我希望有人能帮助我进行我的php编码。以下是我想要做的事:
我在我的高中经营一个电子游戏俱乐部,今年我们有121个会员(在一所有900名学生的学校里最大的俱乐部)。回溯游戏在很多人中颇受欢迎,并由此引发了关于拥有领头羊的讨论。因此,我很早就意识到,不断更新HTML文件将是错误的,因此决定设置mysql数据库,在那里可以将高分尝试输入表单(仅由我输入)并填充到网页中。该网页为每个游戏标题提供了一张表格,以及数据库中的前3名。到目前为止,这个部分工作得很好。我的数据库模式如下所示:
表1(“游戏系统”):
表2:(“游戏”)
表3:("solo_leaderboard")
好吧。也许不是完美的,但是这个模式目前是有效的。我可以添加数据和拉数据,并将其张贴到我的网站上的php页面。下面是我现在发布的两个游戏的代码。问题应该是显而易见的:我必须添加30+代码行为每一个新的游戏,我想张贴高分。这太离谱了。我没有强大的mysql或php背景,但多年前我花了很多时间编写C++和Python代码。我认为应该有一个嵌套的循环,将每个游戏系统(表1)一个接一个地拉出来,并为每个游戏创建一个表(表2),并在网页中填充来自独奏主板的前3个分数(表3)。不幸的是,我不知道该怎么做。所以我才来这里。有什么想法吗?
<?php
$servername="localhost";
$username="strickho_leader";
$password="***********";
$database="strickho_leaderboards";
echo "
<body style='background-color:powderblue'; 'text-align:center';>
<h1 style='color:black'; 'font-size:300%'; 'text-align:center';>Benton Central M.A.G.I. Gaming Leaderboard</h1>
</body>";
//Create Connection
$conn = new mysqli($servername, $username, $password, $database);
//FREEWAY
//*****************************************
$result = mysqli_query($conn,"SELECT * FROM solo_leaderboard WHERE game LIKE '%Freeway%' ORDER BY score DESC LIMIT 3");
echo "<table style='text-align:center'; border='1';>
<tr>
<th colspan='5'>Freeway</th>
</tr>
<tr>
<th colspan='5'><img src='https://www.mobygames.com/images/covers/l/20735-freeway-atari-2600-front-cover.jpg' height='200' width='145'></th>
</tr>
<tr>
<th>Name</th>
<th>Score</th>
<th>Date</th>
<th>Grade</th>
<th>Role</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['name'] . "</td>";
echo "<td><b>" . $row['score'] . "</b></td>";
echo "<td>" . $row['date'] . "</td>";
echo "<td>" . $row['gradelevel'] . "</td>";
echo "<td>" . $row['whois'] . "</td>";
echo "</tr>";
}
echo "</table><br><br>";
//*******************************************
//END FREEWAY
//CRAZY TAXI
//*****************************************
$result = mysqli_query($conn,"SELECT * FROM solo_leaderboard WHERE game LIKE '%Crazy Taxi%' ORDER BY score DESC LIMIT 3");
echo "<table style='text-align:center'; border='1';>
<tr>
<th colspan='5'>Crazy Taxi</th>
</tr>
<tr>
<th colspan='5'><img src='https://www.mobygames.com/images/covers/l/5801-crazy-taxi-dreamcast-front-cover.jpg' height='200' width='200'></th>
</tr>
<tr>
<th>Name</th>
<th>Score</th>
发布于 2018-09-25 12:58:18
与每次游戏进行一次查询不同,您可以进行一个通用查询,该查询检索所有游戏的数据,然后循环执行。实际上是两个查询,但这两个查询应该处理所有的工作。我的建议需要对你的桌子做些改动,我会带你去看的。
第一个查询:
SELECT * from games
只有games
表。没别的了。然后拿出这个结果(每行一局),然后用一个预兆循环它:
foreach ($games as $game)
(我使用了$games
,但使用变量with实际获取查询结果)现在您正在循环游戏,进行第二个查询(在循环中),以获得该特定游戏的主板。
第二个查询:
SELECT * FROM solo_leaderboard WHERE game LIKE '%game_name_from_previous_query%' ORDER BY score DESC LIMIT 3
这里我的建议是不要使用LIKE
进行搜索,因为它效率较低,尽管它会工作。我的建议是修改solo_leaderboard
表以包含游戏id,以便您可以使用WHERE game_id = the_id_from_the_previous_query
进行搜索。
最后,在不退出最外层的foreach循环的情况下,您可以循环第二个查询的结果,并像现在这样绘制表。
这就是一般的想法。这将遍历所有游戏,获取每个游戏的主板并将其输出到一个表中,然后转到下一个游戏,等等。
发布于 2018-09-25 13:56:11
我已经很久没有使用PHP了,但是我会尽力帮助您的,可能我拼错了一些PHP术语或函数。
第一个建议,最好是直接编写html静态内容,而不是执行echo
,您编写的每一段php代码都将由服务器处理,echo
的影响很小,但是1k的长html echo
最差。因此,与其:
<?php
$servername="localhost";
$username="strickho_leader";
$password="***********";
$database="strickho_leaderboards";
echo "<body style='background-color:powderblue'; 'text-align:center';>
<h1 style='color:black'; 'font-size:300%'; 'text-align:center';>Benton Central M.A.G.I. Gaming Leaderboard</h1>
</body>";
//Create Connection
$conn = new mysqli($servername, $username, $password, $database);
你应该这样做:
<?php
$servername="localhost";
$username="strickho_leader";
$password="***********";
$database="strickho_leaderboards";
?>
<body style='background-color:powderblue'; 'text-align:center';>
<h1 style='color:black'; 'font-size:300%'; 'text-align:center';>Benton Central M.A.G.I. Gaming Leaderboard</h1>
</body>
<?php
//Create Connection
$conn = new mysqli($servername, $username, $password, $database);
如果您使用的是一个很好的web开发编辑器,那么您将以这种方式获得html语法的高度。当您必须在php
代码中打印html
值时,您可以打开一个php
代码标记并生成一个var echo
。
从你的答案开始,你当然可以做嵌套循环。首先,我认为你应该改变你的数据模型,如果每个游戏的领导板是不同的,你应该在领导板表中有games_id
而不是游戏名称。
因此,您的代码可能如下所示:
<?php
$LEADER_TOP = 3;
$servername="localhost";
$username="strickho_leader";
$password="***********";
$database="strickho_leaderboards";
?>
<body style='background-color:powderblue'; 'text-align:center';>
<h1 style='color:black'; 'font-size:300%'; 'text-align:center';>Benton Central M.A.G.I. Gaming Leaderboard</h1>
<?php
//Create Connection
$mysqli = new mysqli($servername, $username, $password, $database);
/* Check connection (from docs) */
if (mysqli_connect_errno()) {
printf("Connection error: %s\n", $mysqli->connect_error);
exit();
}
//All games
$query = "SELECT * FROM games ORDER BY game ASC";
if ($games = $mysqli->query($query)) {
// Get single game
while ($game = $games->fetch_assoc()) {
// Print game table
?>
<table style='text-align:center'; border='1';>
<tr>
<th colspan='5'><?php echo $game['game']; ?></th>
</tr>
<tr>
<th colspan='5'><img src="<?php echo $game['image']; ?>" height='200' width='145'></th>
</tr>
<tr>
<th>Name</th>
<th>Score</th>
<th>Date</th>
<th>Grade</th>
<th>Role</th>
</tr>
<?php
// Get leaders
$query = "SELECT * FROM solo_leaderboard WHERE game_id = '"+ $game['games_id'] +"' ORDER BY score DESC LIMIT "+$LEADER_TOP;
if ($leaders = $mysqli->query($query)) {
while ($leader = $leaders->fetch_assoc()) {
?>
<tr>
<td><?php echo $leader['name']; ?></td>
<td><b><?php echo $leader['score']; ?></b></td>
<td><?php echo $leader['date']; ?></td>
<td><?php echo $leader['gradelevel']; ?></td>
<td><?php echo $leader['whois']; ?></td>
</tr>
<?php
} // END While Leaders
// Free leaders
$leaders->free();
}
?>
</table><br><br>
<?php
} // END While Games
// Free games
$games->free();
}
?>
如您所见,您需要将图像url添加到您的游戏模型中,并将游戏名更改为games_id
。
另一个个人建议,在html属性中使用“始终加倍”:src="xxx"
。
祝好运!
https://stackoverflow.com/questions/52498471
复制相似问题