Передача массива с использованием скрытого элемента формы Html

Я пытаюсь опубликовать массив в скрытом поле и хочу получить этот массив после отправки формы в php.

$postvalue=array("a","b","c"); <input type="hidden" name="result" value="<?php echo $postvalue; ?>"> 

Но получаю только строку массива после печати опубликованного значения. Итак, как я могу это решить?

 $postvalue=array("a","b","c"); foreach($postvalue as $value) { echo '<input type="hidden" name="result[]" value="'. $value. '">'; } 

и вы получите $_POST['result'] как массив

print_r($_POST['result']);

В основном существует два возможных способа достижения этого:

  1. Сериализовать данные в некотором роде:

     $postvalue = serialize($array); // client side $array = unserialize($_POST['result']; //server side 

    И затем вы можете неэтериализовать опубликованные значения с помощью unserialize($postvalue) Дополнительная информация об этом приведена в руководствах php .

    Alternativley вы можете использовать функции json_encode() и json_decode() чтобы получить сериализованную строку в формате json. Вы можете даже сжать переданные данные с помощью gzcompress() (обратите внимание, что это интенсивно работает) и base64_encode() переданные данные с помощью base64_encode() (чтобы ваши данные сохранились на чистых транспортных слоях, отличных от 8 base64_encode() ). Это может выглядеть так:

     $postvalue = base64_encode(json_encode($array)); //client side $array = json_decode(base64_decode($_POST['result'])); //server side 

    Не рекомендуемый способ сериализации ваших данных (но очень дешевый по производительности) – просто использовать implode() для вашего массива, чтобы получить строку со всеми значениями, разделенными некоторым определенным символом. На серверном сервере вы можете получить массив с помощью функции explode() . Но учтите, что вы не должны использовать символ для разделения, который встречается в значениях массива (или затем избегать его), и что вы не можете передавать ключи массива с помощью этого метода.

  2. Используйте свойства специальных именованных элементов ввода:

     $postvalue = ""; foreach ($array as $v) { $postvalue .= '<input type="hidden" name="result[]" value="' .$v. '" />'; } 

    Таким образом вы получите весь массив в переменной $_POST['result'] если форма отправлена. Обратите внимание, что это не передает ключи массива. Однако вы можете достичь этого, используя result[$key] как имя каждого поля.

Каждый из этих методов получил свои преимущества и недостатки. То, что вы используете, в основном зависит от того, насколько большой будет ваш массив, поскольку вы должны попытаться отправить минимальный объем данных со всеми этими методами.

Другой способ добиться этого – хранить массив в сеансе на стороне сервера, а не передавать его на стороне клиента. Подобным образом вы можете получить доступ к массиву по переменной $_SESSION и не должны передавать что-либо по форме. Для этого взгляните на основной пример использования сеансов на php.net

Либо сериализуйте:

 $postvalue=array("a","b","c"); <input type="hidden" name="result" value="<?php echo serialize($postvalue); ?>"> 

on receive: unserialize($_POST['result'])

или взорвать:

 $postvalue=array("a","b","c"); <input type="hidden" name="result" value="<?php echo implode(',', $postvalue); ?>"> 

on receive: explode(',', $_POST['result'])

Вы можете использовать serialize и base64_encode с клиентской стороны, после чего использовать unserialize и base64_decode на стороне сервера. Например:

В стороне клиента используйте:

  $postvalue=array("a","b","c"); $postvalue = base64_encode(serialize($array)); //your form hidden input <input type="hidden" name="result" value="<?php echo $postvalue; ?>"> 

На стороне сервера используйте:

  $postvalue = unserialize(base64_decode($_POST['result'])); print_r($postvalue) //your desired array data will be printed here 

лучше сначала кодировать JSON-строку, а затем кодировать base64, например. на стороне сервера в обратном порядке: используйте сначала base64_decode, затем json_decode. поэтому вы восстановите свой php-массив

Если вы хотите опубликовать массив, вы должны использовать другое обозначение:

 foreach ($postvalue as $value){ <input type="hidden" name="result[]" value="$value."> } 

таким образом, у вас есть три поля ввода с результатом имени [], а при публикации $_POST['result'] будет массив

 <input type="hidden" name="item[]" value="[anyvalue]"> 

Пусть он будет в повторном режиме, он выведет этот элемент в форме в виде массива и будет использовать

 print_r($_POST['item']) 

Чтобы получить элемент

вы можете сделать это так

 <input type="hidden" name="result" value="<?php foreach($postvalue as $value) echo $postvalue.","; ?>">