Массив Mysql не работает

Я пытаюсь отобразить все строки пользователя в моей базе данных в виде выбора в форме.

Он показывает только пробел. Ничего больше.

Вот мой код.

<?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."; } ?> 

Related of "Массив Mysql не работает"

Во-первых, прекратите использование функций 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 и посмотреть, получаете ли вы строки, которые вы ожидаете, может быть, это не возвращает то, что вы ожидали