За последние 24 часа нас посетили 19844 программиста и 1657 роботов. Сейчас ищет 1451 программист ...

значение в выпадающем списке

Тема в разделе "Прочие вопросы по PHP", создана пользователем kaizer131, 27 янв 2010.

  1. kaizer131

    kaizer131 Активный пользователь

    С нами с:
    5 янв 2010
    Сообщения:
    10
    Симпатии:
    0
    Здравствуйте !
    Делаю форму с выпадающими списками, значения для которых берутся запросом из БД MySQL.
    Пользователь заполняет форму, нажимает отправить и форма выводится ещё раз(для проверки введенных данных) но уже с данными которые ввёл пользователь.
    С обычными полями всё нормально, но выпадающие списки сбрасывают свои значения .
    Выпадающий список имеет такой код:
    Код (Text):
    1.  
    2. <? $sql = "SELECT * FROM `year` ORDER BY `id`";
    3. $res = mysql_query($sql)
    4.   or die( "Произошла ошибка : " . mysql_error());
    5.  
    6. echo "<select name=snowmobile_year ?>\r\n";
    7. while($row = mysql_fetch_assoc($res))
    8. {
    9. echo "<option value={$row['year']}>{$row['year']}</option>";
    10. }
    11. echo "</select>\r\n";  ?>  
    Подскажите как заставить его запоминать значения ?
     
  2. SDR

    SDR Активный пользователь

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    учим html

    <option value='value' selected>text</option>

    как в нужный опшн selected воткнуть думаю сам догадаешся
     
  3. kaizer131

    kaizer131 Активный пользователь

    С нами с:
    5 янв 2010
    Сообщения:
    10
    Симпатии:
    0
    про selected я знаю :)
    вы меня не совсем поняли значения берутся из БД а не записанны статично

    вот пример моего статичного списка ОН РАБОТАЕТ и сохраняет выбранное значение при перезагрузке страницы :

    Код (Text):
    1.  
    2. <select name="year">
    3.  
    4. <option value="1984"
    5. <?php if (isset($_POST['update'] )&& ($_POST['year'] == '1984'))
    6. {echo "selected='selected'";}?>> 1984 </option>
    7.  
    8. <option value="1985"
    9. <?php if (isset($_POST['update'] )&& ($_POST['year'] == '1985'))
    10. {echo "selected='selected'";}?>> 1985 </option>
    11.  
    12. <option value="1986"
    13. <?php if (isset($_POST['update'] )&& ($_POST['year'] == '1986'))
    14. {echo "selected='selected'";}?>> 1986 </option>
    15.  
    16. </select>
    А вот пример С ВЫБОРКОЙ ИЗ БД, который не могу заставить работать правильно , после перезагрузие страницы значение выпадающего списка сбрасывается

    Код (Text):
    1.  
    2. <? $sql = "SELECT * FROM `year` ORDER BY `id`";
    3. $res = mysql_query($sql)
    4.   or die( "Произошла ошибка : " . mysql_error());
    5.  
    6. echo "<select name=year ?>\r\n";
    7. while($row = mysql_fetch_assoc($res))
    8. {
    9. echo "<option value={$row['year']}";
    10. if (isset($_POST['update'] )))
    11. {
    12.  echo "selected " // ПРОБЛЕМА ЗДЕСЬ ;
    13. }
    14.  echo ">{$row['year']}</option>";
    15. }
    16. echo "</select>\r\n";  ?>  
    Как правильно использовать строку

    Код (Text):
    1.  echo "selected " ;
    , чтоб выбранное значение не сбрасывалось?
     
  4. SDR

    SDR Активный пользователь

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    1. а головой подумать? :)

    2. что значит перезагрузка страницы? отправка формы с загрузкой той-же страницы?

    3. если пункт 2 === true, то видимо
    Код (Text):
    1.  
    2. if($row['year'] == $_POST['year']) {
    3.    // selected
    4. }
    :)
     
  5. kaizer131

    kaizer131 Активный пользователь

    С нами с:
    5 янв 2010
    Сообщения:
    10
    Симпатии:
    0
    да. пункт 2 === true,

    но если делаю так

    Код (Text):
    1.  
    2. <?
    3. $sql = "SELECT * FROM `year` ORDER BY `id`";
    4. $res = mysql_query($sql)
    5. or die( "Произошла ошибка : " . mysql_error());
    6.  
    7. echo "<select name=year ?>\r\n";
    8.  
    9. while($row = mysql_fetch_assoc($res))
    10. {
    11. echo "<option value={$row['year']}";
    12.  
    13. if($row['year'] == $_POST['year'])
    14. {
    15. echo " selected ";
    16. }
    17.  
    18. echo " >{$row['year']}</option>";
    19. }
    20. echo "</select>\r\n";  ?>  
    Всё равно показывает первый пункт выпадающего списка :(

    По сути,
    1- мы отправили запрос на выборку из БД,
    Код (Text):
    1.  
    2. $sql = "SELECT * FROM `year` ORDER BY `id`";
    3. $res = mysql_query($sql)
    4.   or die( "Произошла ошибка : " . mysql_error());
    2- потом организуем последовательный вывод списка , пока у нас не закончится массив значений,

    Код (Text):
    1. echo "<select name=year ?>\r\n";
    2.  
    3. while($row = mysql_fetch_assoc($res))
    4. {
    5. echo "<option value={$row['year']}";
    6. ......................................................
    7. echo " >{$row['year']}</option>";
    8. }
    9. echo "</select>\r\n";  ?>
    3 -попутно в цикле while мы проверяем каждый элемент на совпадение с переменной $_POST['year']
    Код (Text):
    1. if($row['year'] == $_POST['year'])
    2. {
    3. echo " selected ";
    4. }
    и если они совпадают, то выводим метку selected

    Вроде всё верно, но неработает :(
     
  6. SDR

    SDR Активный пользователь

    С нами с:
    22 сен 2009
    Сообщения:
    244
    Симпатии:
    0
    для начала глянь исходник сгенерёного html. есть ли там вообще слово selected.

    если нет, то смотрим, что имеем в:
    Код (Text):
    1.  
    2. if($_SERVER['REQUEST_METHOD'] == 'POST') die ($_POST['year']);
    обновление инфы и выдача страницы делается в один заход, или после обновления идёт редирект назад на форму?
     
  7. kaizer131

    kaizer131 Активный пользователь

    С нами с:
    5 янв 2010
    Сообщения:
    10
    Симпатии:
    0
    Ура заработало :)

    просто в выражении
    Код (Text):
    1. if($row['year'] == $_POST['year'])
    была пропущенна буква и поэтому не происходило сравнение :)

    SDR спасибо за помошь !!!