Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как получить все значения из мультиселекта?

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


     20.01.2022    Все вопросы » Общие вопросы по PHP    209

вопрос
Здравствуйте.

Пытаюсь в Быстрое редактирование новости (engine/ajax/editnews.php) добавить новое поле
<select name="region[]" id="region" style="width:350px; margin-bottom:5px;" multiple><option value="0">Без филиала</option>{$region_list}</select>

далее есть код для обработки дынных из этого селекта
$region = isset( $_POST['region'] ) ? $_POST['region'] : array();
if( !count( $region ) ) {
	$region = array();
	$region[] = '0';
}
$region_list = array();
foreach ( $region as $value ) {
	$region_list[] = intval($value);
}
$region_list = $db->safesql( implode( ',', $region_list ) );

но в результате в переменной $region_list содержится только последнее выбранное значение...
Что я делаю не так?

Ответил: TeraMoune


Попробуйте изменить функцию сохранения, ajax_save_for_edit
Изменив этот участок кода,

$.each($('#ajaxnews'+news_id).serializeArray(), function(index,value) {

	params[value.name] = value.value;

});


На такой,

let i = 0;
$.each($('#ajaxnews'+news_id).serializeArray(), function(index,value) {

	if( value.name == 'region[]' ) {

		Object.defineProperty(params, 'region['+i+']', {
		  value : value.value,
		  enumerable: true,
		});
		i++;
	} else params[value.name] = value.value;

});

5 комментариев

ravchik
Юзер

ravchik - 20 января 2022 11:23 -

Не сработало, к сожалению... Зато я теперь знаю, что форма в быстром редактировании обрабатывается через ajax )) Буду копать в эту сторону. Спасибо!

TeraMoune
Эксперт

TeraMoune - 20 января 2022 11:26 -


Странно, у меня работает. Консоль проверяли, проверяли значения которые передаются ?
Быть может не обновился кэш скрипта ?

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

UPD: Обработчик так же принимает значения.

ravchik
Юзер

ravchik - 20 января 2022 12:32 -

В общем, что-то начало получаться... Но не так как нужно ))
В dle_js.js заменил код
t.action="save",t.user_hash=dle_login_hash

на
t.action="save",t.user_hash=dle_login_hash,t.region=$('#region').val()

тепер в $_POST['region'] передаются все выделенные пункты из селекта... но перед ними добавляется еще последний из них. Т.е., выделяю 1 и 3 пункты, например, а в пост приходит 3,1,3

TeraMoune
Эксперт

TeraMoune - 20 января 2022 13:17 -

Потому, что у Вас остался тот участок кода который дополнительно обрабатывает заполнение объекта.

Вот этот малыш в тандеме с $.each($("#ajaxnews"+e).serializeArray() уже проходит по всем элементам формы и заполняет значения, а потом еще и вы дописываете сверху добавку. Вот только в изначальном случае, так как в цикле всё происходит и не имеет порядкового номера, оно будет проходит один выбранный options за другим, при этом перезаписывая предыдущее значение.

t[o.name]=o.value


Либо опять же по примеру как я выше предоставил, сделайте условие которое не будет обрабатывать если input относится к региону.

P.S. Для публикации кода, используются квадратные скобки. В прочем как для любого форматирования.

ravchik
Юзер

ravchik - 20 января 2022 13:32 -

Всё, разобрался... Действительно, был дублирующий код. Спасибо за помощь!

PS: кнопка вставки исходного кода в форме добавления комментариев не работает... поэтому добавил вручную... извините, что-то тупанул со скобками...

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх