Передача Массива С Использованием Скрытого Элемента Html-Формы
Я пытаюсь разместить массив в скрытом поле и хочу получить этот массив после отправки формы в php.
$postvalue=array("a","b","c");
<input type="hidden" name="result" value="<?php echo $postvalue; ?>">
но получение только строки массива после печати разнесенного значения. Так как же я могу ее решить?
8 ответов:
$postvalue=array("a","b","c"); foreach($postvalue as $value) { echo '<input type="hidden" name="result[]" value="'. $value. '">'; }
и вы получили
$_POST['result']
в массиве
print_r($_POST['result']);
есть в основном два способа добиться этого:
сериализовать данные каким-то образом:
$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()
затем. Но учтите, что вы не должны использовать символ для разделения это происходит в значениях массива (или затем экранирует его) и что вы не можете передать ключи массива с помощью этого метода.используйте свойства специальных именованных элементов ввода:
$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']
массив