Создание формы из запроса mysql_fetch_array - PullRequest
1 голос
/ 25 февраля 2011

У меня есть поле в базе данных MySQL, которое называется 'location' - оно обслуживает только север, юг, восток, запад.

Я использовал этот код, чтобы получить только 4 отличных результата:

$query_form = "SELECT DISTINCT location FROM hotel ORDER BY location ASC";
$result_form = mysqli_query($dbc, $query_form) or die('die query error');
$row_form = mysql_fetch_array($result_form, MYSQLI_NUM);

Я хотел использовать четыре результата этого запроса, чтобы заполнить таблицу так, чтобы:

<option value='1'>North</option>
<option value='2'>South</option>
<option value='3'>East</option>
<option value='4'>West</option>

Я использовал это:

foreach ($row_form['location'] as $k => $v) {
    echo '<option value="' . $k . '">' . $v . '</option>\n';
    }

но ябоюсь, что мой подход не сработает - с сожалением я нуб и не могу понять, что не так!

Спасибо

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

mysql_fetch_array будет только (цитируя руководство, выделение мое) :

Выборка строка результата какассоциативный массив, числовой массив или оба

Итак, вам придется вызывать эту функцию несколько раз - фактически, один раз на строку (так, здесь, 4 раза) .


Обычно это делается с помощью цикла, который зацикливается, пока вы получаете результаты.
В вашем случае вы, вероятно, захотите использовать что-то похожее на это:

$lineCounter = 1;
while ($row = mysql_fetch_array($result_form, MYSQL_ASSOC)) {
    // Use your row, here.
    // For instance : $row['location']
    // And you can use the $lineCounter variable, to keep track of the current line number.
    $lineCounter++;
}

Примечания:

  • Я использовал MYSQL_ASSOC, чтобы получить ассоциативныймассив для каждой строки: я думаю, что так проще работать.
  • В теле цикла while вы можете использовать ассоциативный массив $row, проиндексированный по имени столбца.


В качестве идентификатора, когда вы вводите данные (например, строки) в некоторый HTML-код, вы должны корректно экранировать вывод, чтобы избежать HTML-инъекций.

Для решения см. htmlspecialchars функция.

0 голосов
/ 25 февраля 2011

MYSQLI_NUM фактически возвращает поля с числовыми индексами. Я полагаю, что в соответствии с вашим требованием <option value="x">..

не поможет

[Проверьте эту ссылку, чтобы узнать, что MYSQLI_NUM на самом деле делает: Что MYSQLI_NUM означает и делает?

Теперь в вашем коде вам нужно изменить следующее:

$i=1;
while ($row_form=mysql_fetch_array($result_form, MYSQLI_NUM)) {
    echo '<option value="' . $i . '">' . $row_form['location'] . '</option>\n';
    $i++;
}

EDIT : Как уже указывалось в другом ответе, вам действительно нужна конструкция цикла для извлечения каждой строки из базы данных. Один сингл mysql_fetch_array(..) даст вам только один ряд. Вы должны выполнять итерации в цикле, пока функция не вернет правильную строку.

Проверьте, как работает функция: http://php.net/manual/en/function.mysql-fetch-array.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...