Отобразить рейтинг пользователей в таблице лидеров php mysql?

Я создал страницу викторины, в которой хранится результат опроса пользователей в журнале лидеров.

У меня есть таблица, называемая членами с пользователями столбцов и 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. Я пробовал несколько разных вещей, но не имел успеха.

Любая помощь будет принята с благодарностью.

Заметка:

  • Я удалил ваш for loop() и вместо этого использовал while loop() для вашего запроса. Я знаю, что вы зацикливаете его на количество результатов запроса, но оно получит только значение первой строки. Возможно, это возможно, если вы назначите текущий номер цикла и присоедините его к переменной как массив.
  • Я использовал счетчик с именем $ranking $num_results , который будет увеличиваться в каждом цикле (удалил $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, &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> 

Рекомендация:

  • Вы должны использовать prepared statement вместо устаревших функций mysql_* для предотвращения инъекций SQL .