Передача Массива С Использованием Скрытого Элемента Html-Формы


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

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

но получение только строки массива после печати разнесенного значения. Так как же я могу ее решить?

8 56
php

8 ответов:

$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.

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

    $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

вы можете использовать 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

либо сериализовать:

$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'])

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

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

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

таким образом, у вас есть три поля ввода с именем result[] и при публикации $_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.","; ?>">