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