php - 在php mysql排行榜表中显示用户排名?

标签 php mysql xampp

我创建了一个测验页面,将登录用户的测验结果存储到排行榜。

我有一个名为 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, &middot; <a href="#">Privacy</a> &middot; <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, &middot; <a href="#">Privacy</a> &middot; <a href="#">Terms</a></p>
            </footer>';
?>
</body>
</html>

不打印登录用户的位置,只是打印sql查询的字符串。我尝试了一些不同的方法,但没有成功。

如有任何帮助,我们将不胜感激。

最佳答案

注意:

  • 我删除了您的 forloop() 并使用 whileloop() 进行查询。我知道您按查询结果的数量循环它,但它只会获得第一行的值。如果您分配当前的循环编号并将其作为数组附加到变量,也许是可行的。
  • 我使用了一个名为 $ranking 的计数器,它会在每次循环时递增(删除了 $num_results,因为您不再需要它)。
  • 您以错误的方式混合 PHP 和 HTML。在继续处理 HTML 之前,将 PHP 用 ?> 括起来。
  • 清理了一些代码。
  • 您提供的第二个代码的用途是什么?如果您已经尝试在第一个代码中显示数据?但我仍然尝试通过获取数据并使用 while 循环来显示数据(如果查询正确)。
  • 确保您的查询正确(连接凭据、数据库名称、表名称、列名称等)

您的固定代码:

 <?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, &middot; <a href="#">Privacy</a> &middot; <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, &middot; <a href="#">Privacy</a> &middot; <a href="#">Terms</a></p>
  </footer>';

</body>
</html>

建议:

  • 您应该使用准备好的语句而不是已弃用的mysql_*函数来防止 SQL injections .

关于php - 在php mysql排行榜表中显示用户排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29688965/

相关文章:

php - 使用 Cookie 来检查某人是否访问过某个页面

mysql - SQL查询只有一个字符的字符串

2张表的Mysql优化查询

XAMPP 中的 MySQL 无法启动

javascript - 如何根据解析用户命令字符串为 HTML 元素着色

apache - Laravel 虚拟主机不起作用

php - 使用 php 编辑 .doc 或 .docx 文件

php - 比较两个sql表

php - 无法加载某些页面 html 或 css

mysql - 具有复合连接条件的 SQL LEFT JOIN 如何工作