MySQL выбрать отдельный запрос в PHP - PullRequest
4 голосов
/ 10 февраля 2011
$sql = "SELECT DISTINCT Branch FROM student_main";
    $result = mysql_query($sql);
    $row_num = mysql_num_rows($result);
    $rows = mysql_fetch_array($result);
    echo "<select name='Branch'>";
    for($i=0;$i<=$row_num-1;$i++){
        echo "<option value='".$rows[$i]."'>".$rows[$i]."</option>";

    }
    echo "</select>";
    echo "<input type='submit' Value='submit' />";
    echo "</form>";

Я пытаюсь создать раскрывающийся список, используя приведенный выше код для моей формы.Но это не работает.В столбце «Ветвь» есть 3 различных значения, но в раскрывающемся списке он показывает только одно значение (первое) и следующие два как пустые значения.

Однако, когда в echo $ row_num он показывает 3.
Это означает, что он выбирает три строки, но тогда почему он не отображается в раскрывающемся списке.

Если я выполняю тот же запрос в phpmyadmin, он показывает правильный ответ или возвращает 3 различных значения Branch.

Ответы [ 7 ]

7 голосов
/ 10 февраля 2011

Вам нужно пройтись по вашему запросу, используя следующее:

    $sql = "SELECT DISTINCT Branch FROM student_main";
    $result = mysql_query($sql);
    echo "<select name='Branch'>";
    while($rows = mysql_fetch_array($result)){ // should probably use mysql_fetch_assoc()
        echo "<option value='".$rows['Branch']."'>".$rows['Branch']."</option>";
    }
    echo "</select>";
    echo "<input type='submit' Value='submit' />";
    echo "</form>";
6 голосов
/ 10 февраля 2011

вам нужно mysql_fetch_array() для каждого ряда. Эта функция возвращает ассоциативный массив только для одной строки. просто включите его в цикл for прямо над оператором echo.

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

5 голосов
/ 10 февраля 2011

Вы должны сделать что-то вроде этого:

$sql = "SELECT DISTINCT Branch FROM student_main";
$result = mysql_query($sql);

echo "<select name='Branch'>";
while ($row = mysql_fetch_array($result)) {
    echo "<option value='".$row[0]."'>".$row[0]."</option>";
}
echo "</select>";

echo "<input type='submit' Value='submit' />";
echo "</form>";
3 голосов
/ 10 февраля 2011

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

while ($row = mysql_fetch_array($result)) {
    echo "<option value='".$row['Branch']."'>".$row['Branch']."</option>";
}
2 голосов
/ 10 февраля 2011

Что вам действительно нужно, так это научиться использовать шаблоны.
Но, похоже, Stackoverflow определенно не место, где можно изучать профессиональные способы разработки веб-сайтов.

Сначала получите ваши данные

$select = $array();
$sql = "SELECT DISTINCT Branch FROM student_main";
$res = mysql_query($sql) or trigger_error(mysql_error().$sql);
while($row = mysql_fetch_array($res)) $select = $row[];

А потом использовать его в шаблоне

<form>
<select name='Branch'>
<? foreach($select as $row): ?>    
  <option value="<?=htmlspecialchars($row['Branch'])?>">
    <?=htmlspecialchars($row['Branch'])?>
  </option>
<? endforeach ?>    
</select>
<input type='submit' Value='submit' />
</form>
2 голосов
/ 10 февраля 2011

В цикле, использующем цикл while, есть проблема:

while($rows=mysql_fetch_array($result)){ 

echo "<option value='".$rows[$i]."'>".$rows[$i]."</option>";

}

Попробуйте это

1 голос
/ 10 февраля 2011

mysql_fetch_array вернет только первый ряд ...

см. здесь для получения полной информации:)

...