Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Помогите с select options (https://javascript.ru/forum/dom-window/67519-pomogite-s-select-options.html)

Sav2907 21.02.2017 21:52

Помогите с 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;
};	
?>

Sav2907 21.02.2017 21:54

Например, если результат $row['names'] = Марина, тогда должно получиться <option value="Марина" selected>Марина</option>

laimas 21.02.2017 22:16

Очень плохо конечно, что в базе это Андрей, Марина...., во-первых это не уникальные значения, во-вторых искать по строкам это накладно.

А чтобы отметить выбранную опцию, то список нужно выводить в цикле, сверяя полученное значение со значением опции списка.

Sav2907 21.02.2017 22:44

Цитата:

Сообщение от laimas (Сообщение 445004)
сверяя полученное значение со значением опции списка.

Как это сделать?

laimas 21.02.2017 23:01

Ну как, как написано было, в цикле. Но вот что делает ваш цикл и вообще зачем он нужен, если в нем просто выводится таблица? Что-то конкретно по такому коду (как сделать) сказать не возможно. Хотя бы "на пальцах" тогда пояснить что и чего где находится и как вывести, а иначе....

Sav2907 21.02.2017 23:57

Придумал такое решение, знаю что смешное, но работает, если у кого-то будет лучше, пусть напишет
$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;

laimas 22.02.2017 01:01

Словами можно пояснить чего это такое, без кода, ибо он просто муть какая-то?

Я не знаю чего вы там выгребаете из базы и почему куча таблиц, поэтому не на этом примере, а дальше уж не знаю как.

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>';

Sav2907 22.02.2017 03:16

Спасибо что пытаетесь мне помочь. На счет уникальности, код переделал, поэтому сейчас выбираются из базы уникальные ID, и в options value сейчас эти ID


Часовой пояс GMT +3, время: 09:57.