Как отправить два значения в поле параметров?

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

Выпадающий список извлекает данные из внешней службы. Этими данными являются «id» и «name».

Когда я выберу вариант в раскрывающемся списке, а затем нажмите кнопку «Отправить», я хочу, чтобы «id» и «name» были опубликованы.

Мой код выглядит так:

<select name="data"> <option>Select a name</option> <?php foreach($names as $name): ?> <option value="<?php echo $name['id']);?>"> <?php echo $name['name']);?> </option> <?php endforeach; ?> </select> 

Я попытался ввести скрытое поле ввода, но это не отображает выпадающее (вместо этого оно просто создает список).

Я использую как id, так и имя в другом месте, поэтому я не хочу публиковать только идентификатор, а затем должен получить имя снова, поэтому я хочу опубликовать оба из них в одно и то же время.

Любые рекомендации?

Вы не можете публиковать два значения, если оба они не появляются в атрибуте value . Вы можете разместить оба в разделенных запятой или дефисами и explode() их в PHP:

 // Place both values into the value attribute, separated by "-" <option value="<?php echo $name['id'] . "-" . $name['name']);?>"> <?php echo $name['name']);?> </option> 

Получение их в PHP

 // split the contents of $_POST['data'] on a hyphen, returning at most two items list($data_id, $data_name) = explode("-", $_POST['data'], 2); echo "id: $data_id, name: $data_name"; 

Вы можете добавить скрытое поле с именем «id», а затем привязать прослушиватель событий onchange к <select> . внутри функции onchange, получите значение <select> и назначьте его в поле «id».

 <form> <select name="name" onchange="document.getElementById('id').value=this.value"> <!-- ... options ... --> </select> <input type="hidden" name="id" id="id" /> <input type="submit" /> </form> 

Вы можете вывести что-то вроде:

 <option value="<?php echo $name['id']."_".$name['name'];?>"> 

Затем используйте preg_split или explode чтобы разделить их после обработки данных формы.

Единственный способ сделать это – включить обе части информации в значение для единственной опции. Просто используйте код, как показано ниже, а затем, когда вы вернете значение, разделите строку на первом знаке подчеркивания, чтобы выделить значения.

 <select name="data"> <option>Select a name</option> <?php foreach($names as $name): ?> <option value="<?php echo $name['id'] . "_" . $name['name']);?>"> <?php echo $name['name']);?> </option> <?php endforeach; ?> </select> 

Кроме того, вы можете просто оставить идентификатор в своей форме, а затем снова просмотреть идентификатор, когда пользователь отправит форму.

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

Мы можем передать его атрибутом данных и получить доступ в js,

 <option value="<?php echo $name['id']);?>" data-name="<?php echo $name['name']);?>">One</OPTION> var name = $(this).find(':selected').data('name');