Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Использование:

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

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

print_r($_POST['result']);

Ответ 2

Есть в основном два возможных способа добиться этого:

  1. Сериализация данных некоторым способом:

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

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

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

    $postvalue = base64_encode(json_encode($array)); // Client side

    $array = json_decode(base64_decode($_POST['result'])); // Server side

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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

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

при получении: unserialize($_POST['result'])

Или взорваться:

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

При получении: explode(',', $_POST['result'])

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

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

print_r($_POST['item'])

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

Ответ 8

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

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