我有一个用PHP编写的迷你游戏。我想为它建立一个高分榜。但我无法正确回显数据。我的数据库
+--------+----------+----------------------------------+---------------------+------+------+
| UserID | Username | Password | EmailAddress | win | lost |
+--------+----------+----------------------------------+---------------------+------+------+
| 1 | utku | e10adc3949ba59abbe56e057f20f883e | utku@utku.com | 3 | 6 |
| 2 | utku2 | e10adc3949ba59abbe56e057f20f883e | utku@sda.com | 5 | 15 |
| 3 | utku3 | e10adc3949ba59abbe56e057f20f883e | sad | 0 | 0 |
+--------+----------+----------------------------------+---------------------+------+------+
我试图用这段代码回应他们(我在另一个问题的主题中找到了它)
<?php include "base.php"; ?>
<?
$query="SELECT Username,win,lost FROM users ORDER BY win";
$results = mysql_query($query);
while ($row = mysql_fetch_array($results)) {
echo '<tr>';
foreach($row as $field) {
echo '<td>' . htmlspecialchars($field) . '</td>';
}
echo '</tr><br>';
}
?>
它打印像这样的数据
utku3utku30000
utkuutku3366
utku2utku2551515
但我想以这种形式打印它们
Username Win Lost
utku2 5 15
utku 3 6
utku3 0 0
我该怎么办?我是PHP的新手
答案 0 :(得分:2)
您不应该使用mysql_
,因为它已过时,将在未来的php版本中删除。
您应该切换到mysqli_
或PDO
。 (Overview of the MySQL PHP drivers > Choosing an API)
你的问题是:
array mysql_fetch_array ( resource $result [, int $result_type = MYSQL_BOTH ] )
MYSQL_BOTH:[...]By using MYSQL_BOTH (default), you'll get an array with both associative and number indices.[...]
这就是为什么你每列两次。
快速解决方法是使用MYSQL_NUM
或MYSQL_ASSOC
:
mysql_fetch_array($results, MYSQL_ASSOC)
答案 1 :(得分:1)
您不应在没有tr, td
标记的情况下打印table
。你也没有添加th
。可以试试这个
echo '<table><tr><th>User Name</th><th>Win</th><th>Lost</th></tr>';
while ($row = mysql_fetch_array($results)) {
echo '<tr><td>'.$row['Username'].'</td><td>'.$row['win'].'</td><td>'.$row['lost'].'</td></tr>';
}
echo '</table>';
答案 2 :(得分:-2)
你不需要foreach循环,因为while循环正在进行递归迭代,这就是你有两次结果的原因:
while ($row = mysql_fetch_array($results)) {
echo '<tr>';
echo '<td>' . htmlspecialchars($field['Username']) . '</td>';
echo '<td>' . htmlspecialchars($field['win']) . '</td>';
echo '<td>' . htmlspecialchars($field['lost']) . '</td>';
echo '</tr><br>';
}