@turbomen24

Как правильно собрать текстовые данные в массив методом $_POST?

Есть вот такая форма. Важно, чтобы name было одним и тем же, поскольку это потом надо для js и чтобы были ключи - val1, val2, val3..

<div class="personnel_box">
		<div class="personnel-item">
			val 1  <input type="text" name="personnel_field[val1]" value=""/>
			val 2 <input type="text" name="personnel_field[val2]" value=""/>
			val 3 <input type="text" name="personnel_field[val3]" value=""/>
		</div>
		<div class="personnel-item">
			val 1  <input type="text" name="personnel_field[val1]" value=""/>
			val 2 <input type="text" name="personnel_field[val2]" value=""/>
			val 3 <input type="text" name="personnel_field[val3]" value=""/>
		</div>
	</div>


И дальше собираю в переменную-массив:

$addresses = $_POST['personnel_field'];
	$addresses = array_filter( $addresses );
        update_post_meta( $post_id, 'personnel_field', $addresses ); // присваиваю массив как значение мета-бокса


Если я убираю из моей формы ключи (val1, val2,val3), то данные собираются в сериализованный массив, если добавить ключи то добавляется только значение последнего item.
Получается это сделать так же, если добавить ключи, но имя внутри каждого personnel-item разное - например добавляю цифру personnel_field2 и потом собираю это как массив
$addresses = array($_POST['personnel_field'],$_POST['personnel_field2']);


Но как мне сделать, чтобы имя было одинаковым и чтобы добавить ключи для каждого поля?
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Никак. При разборе данных PHP создаёт в массиве $_POST элемент с ключом - именем поля $_POST['personnel_field'], затем видит, что это массив ключ-значение [val1] и добавляет в него данные по ключам $_POST['personal_field']['val1'] = value.
Соответственно, если набор "имя поля + ключ" встречается второй раз, содержимое в $_POST просто переписывается.
Ответ написан
@Hormet
Если написать так:
<input name="personal_field[]" value="1"/>
<input name="personal_field[]" value="2"/>
<input name="personal_field[]" value="3"/>

то в php получите такой массив:

array (size=1)
  'personal_field' => 
    array (size=3)
      0 => string '1' (length=1)
      1 => string '2' (length=1)
      2 => string '3' (length=1)
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Есть вот такая форма.
Где там форма то?

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

update_post_meta(...
Смахивает на вордпресс или подобный божественный код. Указывайте в тегах вордпресс, чтобы народ сразу не пугался такого всратого кода.

Вообще, вы бы описали чуть более подробно что вы реализуете столь гениальным способом, возможно вы ищите не то и не там...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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