Помогите с select options
Здравствуйте. Есть выборка из базы, помогите поставить атрибут selected в зависимости от результата выборки.
<?php $result = $connection->query("SELECT names from my_base"); while ($row = mysqli_fetch_assoc($result)) { $table .=' <table> <tr> <td> <select class="names"> <option value="Андрей">Андрей</option> <option value="Марина">Марина</option> <option value="Илона">Илона</option> <option value="Вероника">Вероника</option> </select> </td> </tr> </table>'; echo $table; }; ?> |
Например, если результат $row['names'] = Марина, тогда должно получиться <option value="Марина" selected>Марина</option>
|
Очень плохо конечно, что в базе это Андрей, Марина...., во-первых это не уникальные значения, во-вторых искать по строкам это накладно.
А чтобы отметить выбранную опцию, то список нужно выводить в цикле, сверяя полученное значение со значением опции списка. |
Цитата:
|
Ну как, как написано было, в цикле. Но вот что делает ваш цикл и вообще зачем он нужен, если в нем просто выводится таблица? Что-то конкретно по такому коду (как сделать) сказать не возможно. Хотя бы "на пальцах" тогда пояснить что и чего где находится и как вывести, а иначе....
|
Придумал такое решение, знаю что смешное, но работает, если у кого-то будет лучше, пусть напишет
$table .='<table>'; $x = 0; while ($row = mysql_fetch_assoc($result)){ $x++; $table .=' <script> $( document ).ready(function() { $(N'.$x.').val("'.$row['names'].'"); }); </script> <tr> <td> <select class="names" id="N'.$x.'"> <option value=""></option> <option value="Андрей">Андрей</option> <option value="Марина">Марина</option> <option value="Илона">Илона</option> <option value="Вероника">Вероника</option> </select> </td> </tr>'; }; $table .='</table>'; echo $table; |
Словами можно пояснить чего это такое, без кода, ибо он просто муть какая-то?
Я не знаю чего вы там выгребаете из базы и почему куча таблиц, поэтому не на этом примере, а дальше уж не знаю как. 1) Представленный список имен, значениями опций которого также имена, в базе по такому запросу "SELECT names from my_base" имеет право на существование только в том случае, если значения поля таблицы "names" принадлежат записям с уникальными значениями. Но при таком раскладе список может оказаться слишком большим по размеру (сотни Марин, Андреев, ...) и вряд ли кто-то станет в нем разбираться. А ввиду того, что имена есть значения не уникальные такой список теряет всякий смысл. 2) Предположим, что имена в выборке принадлежат уникальным записям, а по списку имен нужно будет во всех записях таблицы "my_base" найти записи у которых поле "names" содержит имя выбранное в списке. Но для этого список должен содержать только уникальные значения, то есть в нем не должно быть повторяющихся имен. Для запрос должен выбрать из таблицы только уникальные значения и должен выглядеть так: $result = $connection->query("SELECT DISTINCT names FROM my_base"); 3) Если поле формы не имеет имени, то оно не будет передано на север, то есть значения из списка <select class="names" id="N'.$x.'"> просто не будет. Поэтому назовем его "name" - <select class="names" name="name">. Предположим, что данный список уже был у клиента и он выбрал в нем некое имя отправив форму методом GET. По полученному GET запросу сервер произведет поиск в этой таблице, отдаст результат клиенту наряду со списком, полученный запросом как показано выше. Строя сам список будет проверять совпадения значения запроса и значения из базы: $selected = isset($_GET['name']) ? $_GET['name'] : null; $select = '<select class="names" name="name"><option value="">Выберите имя...</option>'; while ($row = mysql_fetch_assoc($result)) $select .= '<option value="'.$row['names'].'" '. ($row['names']==$selected ? 'selected' : null).'>'.$row['names'].'</option>'; echo $select . '</select>'; |
Спасибо что пытаетесь мне помочь. На счет уникальности, код переделал, поэтому сейчас выбираются из базы уникальные ID, и в options value сейчас эти ID
|
Часовой пояс GMT +3, время: 09:57. |