我创建了一个测验页面,将登录用户的测验结果存储到排行榜。
我有一个名为 Members 的表,其中包含 user 和 quiz_score 列。我根据登录用户进行的测验结果打印出排行榜。我在个人资料页面的排行榜中显示特定用户的位置时遇到问题。如果他们进入前三名,我还想附上一枚奖牌(例如 jpeg 图像)。
这是我到目前为止的排行榜代码:
<?php
require_once 'header.php';
// Send variables for the MySQL database class.
$database = mysql_connect('localhost', 'root', 'password') or die('Could not connect: ' . mysql_error());
mysql_select_db('robinsnest') or die('Could not select database');
$query = "SELECT * FROM `members` ORDER by `quiz_score` DESC LIMIT 10";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
$num_results = mysql_num_rows($result);
echo '<div class="container marketing">
<div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
<table class="gradienttable">
<tr>
<th>Position</th>
<th>User Name</th>
<th>Score</th>
</tr>';
for($i = 1; $i <= $num_results; $i++)
{
$row = mysql_fetch_array($result);
echo "<tr>
<td>".$i."</td>
<td>".$row['user']."</td>
<td>".$row['quiz_score']."</td>
</tr>";
}
echo "</table>
</div>
</div>";
echo"<hr class='featurette-divider'>";
echo ' <footer>
<p class="pull-right"><a href="#">Back to top</a></p>
<p>2015 Students-NCI, · <a href="#">Privacy</a> · <a href="#">Terms</a></p>
</footer>';
?>
</body>
</html>
到目前为止,我用于打印用户分数的代码:
<?php
require_once 'header.php';
$database = mysql_connect('localhost', 'root', 'password') or die('Could not connect: ' . mysql_error());
mysql_select_db('robinsnest') or die('Could not select database');
$query = "SELECT user, quiz_score, FIND_IN_SET( quiz_score, (
SELECT GROUP_CONCAT( quiz_score
ORDER BY quiz_score DESC )
FROM members )
) AS rank
FROM members
WHERE user = '$user';";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
$num_results = mysql_num_rows($result);
echo "<p>".$query."</p>";
echo"<hr class='featurette-divider'>";
echo ' <footer>
<p class="pull-right"><a href="#">Back to top</a></p>
<p>2015 Students-NCI, · <a href="#">Privacy</a> · <a href="#">Terms</a></p>
</footer>';
?>
</body>
</html>
不打印登录用户的位置,只是打印 sql 查询的字符串。我尝试了几种不同的方法,但没有成功。
任何帮助将不胜感激。
Note:
- 我删除了你的
for loop()
并使用while loop()
供您查询。我知道您按查询结果的数量循环它,但它只会获得第一行的值。如果您分配循环的当前编号并将其作为数组附加到变量,也许是可行的。
- 我使用了一个名为
$ranking
这将在每个循环上增加(删除了$num_results
,因为你不再需要它了)。
- 您以错误的方式混合 PHP 和 HTML。 PHP 附有
?>
在继续处理 HTML 之前。
- 清理了一些代码。
- 您的第二个给定代码的目的是什么?如果您已经尝试在第一个代码中显示数据?但我仍然尝试通过获取数据并使用来显示数据(如果查询正确)
while loop
.
- 确保您的查询正确(连接凭据、数据库名称、表名称、列名称等)
您的固定代码:
<?php
require_once 'header.php';
// Send variables for the MySQL database class.
$database = mysql_connect('localhost', 'root', 'password') or die('Could not connect: ' . mysql_error());
mysql_select_db('robinsnest') or die('Could not select database');
$query = "SELECT * FROM `members` ORDER by `quiz_score` DESC LIMIT 10";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
$num_results = mysql_num_rows($result);
$ranking = 1;
?>
<div class="container marketing">
<div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
<table class="gradienttable">
<tr>
<th>Position</th>
<th>User Name</th>
<th>Score</th>
</tr>
<?php
while($row = mysql_fetch_array($result)){
?>
<tr>
<td><?php echo $ranking; ?></td>
<td><?php echo $row['user']; ?></td>
<td><?php echo $row['quiz_score']; ?></td>
<?php
$ranking = $ranking + 1; /* INCREMENT RANKING BY 1 */
?>
</tr>
<?php
} /* END OF WHILE LOOP */
?>
</table>
</div>
</div>
<hr class="featurette-divider">
<footer>
<p class="pull-right"><a href="#">Back to top</a></p>
<p>2015 Students-NCI, · <a href="#">Privacy</a> · <a href="#">Terms</a></p>
</footer>
</body>
</html>
您的第二个给定代码:
<?php
require_once 'header.php';
$database = mysql_connect('localhost', 'root', 'password') or die('Could not connect: ' . mysql_error());
mysql_select_db('robinsnest') or die('Could not select database');
$query = "SELECT user, quiz_score, FIND_IN_SET( quiz_score, (
SELECT GROUP_CONCAT( quiz_score
ORDER BY quiz_score DESC )
FROM members )
) AS rank
FROM members
WHERE user = '$user';";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
$num_results = mysql_num_rows($result);
while($row = mysql_fetch_array($result)){
?>
<p><?php echo $row['user']." - ".$row['quiz_score']; ?></p>
<?php
} /* END OF WHILE LOOP */
?>
<hr class="featurette-divider">
<footer>
<p class="pull-right"><a href="#">Back to top</a></p>
<p>2015 Students-NCI, · <a href="#">Privacy</a> · <a href="#">Terms</a></p>
</footer>';
</body>
</html>
推荐:
- 你应该使用
prepared statement
而不是弃用mysql_*
预防功能SQL注入 https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)