Как передать массив через post в другой файл php

Есть масссив $places: Array ( [row1] => 1 [seet1] => 5 [row2] => 8 [seet2] => 15 [row3] => 4 [seet3] => 14 )
Как передать данный массив в другой php файл через форму?
Я пытался делать так:

<form action="result.php" method="POST">
<input type="hidden" name="places" value="'.$places.'">
<input type="submit" name="booking" value="ЗАБРОНИРОВАТЬ МЕСТО">
</form>

И принимать их:

$data=$_POST;
if(isset($data['booking'])){
print_r($data['places']);
}

Но результат выводит лишь пустой массив. Я пробовал использовать json_encode и json_decode но не получалось.


Ответы (1 шт):

Автор решения: MrBlackLord

Вы не можете с помощью PHP просто так взять и вставить значение таким образом value="'.$places.'". Это нужно делать с помощью echo. Более того, таким образом массив таким образом тоже не передать, потому что на выходе будет строка "Array". На помощь приходит функция json_encode(). Преобразуя массив в строку, его уже можно будет вставить в качестве значения для поля:

<input type="hidden" name="places" value='<?= json_encode($places); ?>'>

Обратите внимание, что аттрибут value имеет одинарные кавычки. Это связано с тем, что функция json_encode() возвращает строку с двойными кавычками и html парсер это воспример как просто фигурную кавычку, а не целую, нужную нам строку. В файле result.php мы с помощью функции json_decode() преобразуем нашу строку в объект\массив

Итого - файл с формой:

<?php  $places = ['row' => 21]; // ваш массив?>
<form action="result.php" method="POST">
  <input type="hidden" name="places" value='<?= json_encode($places); ?>'>
  <input type="submit" name="booking" value="ЗАБРОНИРОВАТЬ МЕСТО">
</form>

result.php:

<?php
$data=$_POST;
  if(isset($data['booking'])){
    print_r(json_decode($data['places']));
}
?>
→ Ссылка