2015-05-30 4 views
0

Я пытаюсь получить данные из таблицы MySQL в 2 отдельных раскрывающегося списка, но только в первом выпадающем списке получается список городов из базы данных, почему 2-й выпадающий список не отображается в списке городов. Вот код в PHPДанные не поступают в раскрывающемся списке от MySQL

<?php mysql_connect("localhost", "root", "") or die("Connection Failed"); 
mysql_select_db("flywest")or die("Connection Failed"); 
$query = "SELECT * FROM cities"; 
$result = mysql_query($query); 
?> 
Depart 
<select name="formDepart" id="fromDepart"> 
    <?php while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { ?> 
    <option value="<?php echo $line['city_name'];?>"> <?php echo $line['city_name'];?> 
    </option> 
    <?php } ?> 
</select> 
</p> 
Arrive 
<select name="formArrive" id="fromDepart"> 
    <?php while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { ?> 
    <option value="<?php echo $line['city_name'];?>"> <?php echo $line['city_name'];?> 
    </option> 
    <?php } ?> 
</select> 
<p> 

Просьба показать мою ошибку.

+1

Ошибка 1) Использование функций 'mysql_ *'. Учитывая простоту проблемы, я предполагаю, что вы довольно новичок в этом, поэтому научитесь использовать «PDO» и/или «mysqli» вместо устаревших функций. Ошибка 2) второй 'while' будет запускаться только тогда, когда' mysql_fetch_array' возвращает результат не false-y. В вашем случае он уже возвратил все данные в первом 'while', поэтому' mysql_fetch_array' не имеет никаких данных для возврата. –

ответ

0

Ваш 1-й цикл while достиг конца набора результатов, и, следовательно, запуск снова начинается с конца и не может идти дальше.

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

<?php  
$cities = array(); 
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $cities[] = $line; 
} 
?> 

<select name="formDepart" id="fromDepart"> 
    <?php foreach ($cities as $line) { ?> 
    <option value="<?php echo $line['city_name'];?>"> <?php echo $line['city_name'];?> 
    </option> 
    <?php } ?> 
</select> 
</p> 
Arrive 
<select name="formArrive" id="fromDepart"> 
    <?php foreach ($cities as $line) { ?> 
    <option value="<?php echo $line['city_name'];?>"> <?php echo $line['city_name'];?> 
    </option> 
    <?php } ?> 
</select> 

Это должно работать нормально.

+0

Благодарим за руководство –

0

Проблема проста, ваш первый цикл while использует все результаты запроса, поэтому второй цикл while не имеет смысла использовать.

Так что в основном второй цикл while не имеет данных для обработки.

Одним из решений было бы сбросить указатель набора результатов к первой записи в наборе результатов перед запуском второго цикла while. Так что попробуйте это

<?php 
    mysql_connect("localhost", "root", "") or die("Connection Failed"); 
    mysql_select_db("flywest")or die("Connection Failed"); 

    $query = "SELECT * FROM cities"; 
    $result = mysql_query($query); 
?> 
Depart 
<select name="formDepart" id="fromDepart"> 
<?php 
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { 
?> 
    <option value="<?php echo $line['city_name'];?>"> <?php echo $line['city_name'];?> 
</option> 
<?php 
} 
?> 
</select> 
</p> 
Arrive 
<select name="formArrive" id="fromDepart"> 
<?php 

    // <-- new line to reset the resultset pointer 
    mysql_data_seek($result,0); 
    // >-- new line 


    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { ?> 
    <option value="<?php echo $line['city_name'];?>"> <?php echo $line['city_name'];?> 
    </option> 
<?php 
} 
?> 
</select> 
<p> 

Очевидно, я должен также отметить mysql_ расширение * PHP теперь принизить и поэтому не должны использоваться. Если вы пишете новый код, посмотрите расширение MYSQLI_ * или расширение PDO.

Смежные вопросы