[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как назначить нужный option в select?
grisha2013
Добрый день.

Не могу сообразить, как сделать так, чтобы выпадающий список принимал значение по умолчанию исходя из того, какая запись есть в БД.

Например, есть select в котором три поля option, у каждого из них свое value, например 0, 1, 2, 3. Если в БД 0 то нужно отображать option с пустым value (с надписью типа "выберите пункт меню"), если из БД взято значение, скажем, 2, то выпадающий список при загрузке страницы должен принять новое значение, чтобы его не выбирать вручную.
Нужно для того, чтобы редактируя настройки не приходилось заново указывать то значение что уже и так есть в БД.

Как это сделать, перебирать список в цикле и присваивать checked нужному полю option где value совпадает с значением из БД или есть более простой путь?

Покажите, плиз, на примере кода, если не трудно. Или ссылку на статью где это разъясняется.
sergeiss
А создаешь ты этот список как, не в цикле? Он у тебя жестко задан? Если да, то можно jQuery использовать. Передать в JS выбранную в БД опцию и установить ее на клиентской стороне, после загрузки страницы.
Ну а если в цикле список создаешь.... То тогда вообще нет проблем smile.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
grisha2013
Один создается в цикле из массива идентификаторов и названий

while($option = mysql_fetch_array($result_id))
{
$opt_cont .= '<option value="'.$option['id'].'" >'.$option['team'].'</option>';
}

остальные просто в html прописаны и всем им нужно выставлять значение по умолчанию исходя из взятого в БД.

jQuery не знаю пока, буду на php делать.
sergeiss
Да можно и без jQuery, просто на JS сделать выборку нужной опции smile.gif Не сложно это. А из ПХП просто передать значение нужной опции в браузер. И там не важно, чистый JS или jQuery используешь, на стороне ПХП будет всё одинаково.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Игорь_Vasinsky
так на стороне сервера и делать установку option

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
grisha2013
В общем, решил задачку так:
Для списка который создается в цикле, создал отдельный запрос на получение одного из полей строки выбранной по id в таблице и в теле цикла с помощью if() сравнил полученное значение, с значением присваиваемого для value. При равенстве - добавляю тег selected в создаваемый option.
grisha2013
А вот со статическими списками задачка чуть сложнее получается, придется их в цикл превращать.

Вот собственно список:

$opt = '<select name="menu" size="1" required >';
$opt .= ' <option value="1">Первый</option>';
$opt .= ' <option value="2">Второй</option>';
$opt .= ' <option value="3">Третий</option>';
$opt .= ' <option value="4">Четвертый</option>';
$opt .= ' <option value="5">Пятый</option>';
$opt .= '</select>';


Просто так сравнить value с значением взятым из базы, как я понимаю, нельзя.

Думаю нужно создать массив из значение и названий списка, затем вывести все option в цикле проверяя value с значением из БД, выставляя selected в нужном option-е...

grisha2013
Тяжело быть новичком :D
2,5 часа напрягал мозг над этой элементарщиной и наконец-то нашел рабочее решение.

Прошу прокомментировать этот код и указать на ошибки. Может быть нужно как-то иначе делать, правильнее что-ли?


$option1[1] = "Первый";
$option1[2] = "Второй";
$option1[3] = "Третий";
$option1[4] = "Четвертый";
$option1[5] = "Пятый";

for($i=1; $i<=count($option1); $i++)
{
if($i == $item['id'])
{
$sel = "selected ";
}

$opt .= '<option value="'.$i.'" '.$sel.'>'.$option1[$i].'</option>';
unset($sel);
$opt .= "\n";
}
  • В самом начале создал ассоциативный массив начинающийся с единицы, в котором перечислены названия выпадающих пунктов списка. Решил сделать так, чтобы не возиться с БД и не делать лишних запросов.
  • Затем запустил цикл и в условии задал максимальное количество выполнений равное количеству элементов массива
  • Далее идет проверка на совпадение индекса массива с значением взятым из БД, $item['id'].
  • Если произошло совпадение значения из БД с переменной $i (а значит и поля value) то добавляю selected в option, после чего удаляю переменную $sel чтобы selected не добавлялось в остальные поля из-за не пустой переменной.
  • При каждом проходе прибавляю единицу к value за счет переменной $i, она-же вытаскивает из массива название нужного поля.
  • В завершении добавляю перенос строки для читабельности кода страницы.
Ну вроде логика нормальная. :rolleyes:
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.