Я пытаюсь отобразить все строки пользователя в моей базе данных в виде выбора в форме.
Он показывает только пробел. Ничего больше.
Вот мой код.
<?php session_start(); require('../../config.php'); $user = $_SESSION['user']; $qry=("SELECT `rank`, `uname` FROM users WHERE `uname` = '$user'"); $result=mysql_query($qry); $row = mysql_fetch_assoc($result); $rank = $row['rank']; $logged = $_SESSION['loggedin']; if ($logged == true) { if ($rank >= 3) { echo "Succesful, $user.<br /> <form method='POST' action='delete.php'> <select><option>Please select</option>"; while ($row = mysql_fetch_assoc($result)) { $users = $row['uname']; $lol = ucwords($users); } echo "<option>$lol</option>"; echo "</select> </form>"; } else { echo "Your not an admin. $user"; } } else { echo "Please login."; } ?>
Во-первых, прекратите использование функций mysql_
поскольку они устарели . Посмотрите на mysqli_
или PDO
. Имейте в виду, что ваш скрипт уязвим для SQL-инъекции.
Причина, по которой ваш скрипт не работает, состоит в том, что вы дважды вызываете mysql_fetch_assoc
. Когда вы вызываете его во второй раз, выхода не будет, если ваш запрос возвращает только одну строку.
$qry=("SELECT `rank`, `uname` FROM users WHERE `uname` = '$user'"); $result=mysql_query($qry); $row = mysql_fetch_assoc($result); $rank = $row['rank'];
Вам нужно будет повторно отправить запрос (что-то вроде ниже) и вызвать этот результат отдельно, чтобы заполнить выпадающий список или сохранить результат в массиве.
$qry=("SELECT `uname` FROM users"); $result=mysql_query($qry); while ($row = mysql_fetch_assoc($result)) { echo '<option>' . ucwords($row['uname']) . '</option>'; }
Похоже, что ваш цикл while настроен плохо, я думаю, вам нужно изменить
while ($row = mysql_fetch_assoc($result)) { $users = $row['uname']; $lol = ucwords($users); } echo "<option>$lol</option>";
к этому
while ($row = mysql_fetch_assoc($result)) { $users = $row['uname']; $lol = ucwords($users); echo "<option>$lol</option>"; }
ОБНОВЛЕНИЕ: Я перечитываю ваш вопрос, и кажется, что вы хотите отображать все имена из вашей таблицы. Первоначальный запрос состоял в том, чтобы проверить, является ли пользователь администратором.
Вот как это будет выглядеть. Но это всего лишь дубликат ответа njk .
<?php session_start(); require('../../config.php'); $user = $_SESSION['user']; $qry=("SELECT `rank`, `uname` FROM users WHERE `uname` = '$user'"); $result=mysql_query($qry); $row = mysql_fetch_assoc($result); $rank = $row['rank']; $logged = $_SESSION['loggedin']; if ($logged == true) { if ($rank >= 3) { echo "Succesful, $user.<br /> <form method='POST' action='delete.php'> <select><option>Please select</option>"; // added these 2 lines $qry=("SELECT `rank`, `uname` FROM users"); $result=mysql_query($qry); while ($row = mysql_fetch_assoc($result)) { $users = $row['uname']; $lol = ucwords($users); echo "<option>$lol</option>"; } echo "</select> </form>"; } else { echo "Your not an admin. $user"; } } else { echo "Please login."; } ?>
Вы уверены, что ваша база данных имеет более 1 строки? Вы вызываете выборку 1 раз, поэтому второй раз попытается извлечь вторую строку.
Попробуйте также запустить запрос непосредственно в mysql и посмотреть, получаете ли вы строки, которые вы ожидаете, может быть, это не возвращает то, что вы ожидали