PHP - Как отправить массив на другую страницу?
Я пытаюсь отправить массив на другую страницу.
То, что я пробовал раньше, было:
стр .1
<input type='hidden' name='input_name' value='<?php print_r($array_name); ?>' />
И страница2
<?php
$passed_array = $_POST['input_name'];
?>
Теперь как сделать $passed_array
действовать как массив?
Или вы знаете какой-либо другой способ решения этой проблемы?
Спасибо, Майк.
Изменить: причина, по которой я хочу сделать это, заключается в том, что мне нужно избегать сеансов и файлов cookie.
Ответы
Ответ 1
Вы можете поместить его в сеанс:
session_start();
$_SESSION['array_name'] = $array_name;
Или, если вы хотите отправить его через форму, вы можете serialize it:
<input type='hidden' name='input_name' value="<?php echo htmlentities(serialize($array_name)); ?>" />
$passed_array = unserialize($_POST['input_name']);
Сессия имеет то преимущество, что клиент ее не видит (поэтому не может вмешиваться в нее), и она быстрее, если массив большой. Недостатком является то, что он может запутаться, если пользователь открыл несколько вкладок.
Изменить: многие ответы предполагают использование name="input_name[]"
. Это не будет работать в общем случае - его нужно будет модифицировать для поддержки ассоциативных массивов и многое изменить для поддержки многомерных массивов (icky!). Гораздо лучше придерживаться сериализации.
Ответ 2
Вы можете сериализовать массив, который превращает его в строку, а затем затем несериализует его, что возвращает его в массив. Вот так:
<input type='hidden' name='input_name' value='<?php serialize($array_name); ?>' />
и на стр. 2:
<?php $passed_array = unserialize($_POST['input_name']); ?>
Ответ 3
Я столкнулся с некоторыми проблемами с приведенными выше примерами, когда некоторые значения в моем массиве содержали разрывы строк. Некоторые из моих значений также имели символы из иностранных языков, которые htmlentities
продолжали прикручиваться. Следующее было моим решением.
На странице, с которой вы хотите передать массив из...
<INPUT TYPE="hidden" NAME="input_name" VALUE="<?= base64_encode(serialize($array_name)); ?>">
На странице, которая получает массив...
$array = unserialize(base64_decode($_POST["input_name"]));
Ответ 4
Вы не можете отправить массив сразу, вам придется либо отправлять каждое значение отдельно:
<input type='hidden' name='input_name[]' value='<?php print_r($array_name[0]); ?>' />
<input type='hidden' name='input_name[]' value='<?php print_r($array_name[1]); ?>' />
<input type='hidden' name='input_name[]' value='<?php print_r($array_name[2]); ?>' />
...
Или просмотрите json или сериализацию.
Ответ 5
Обратите внимание, что для работы с сериализованными массивами вам необходимо использовать POST в качестве метода передачи формы, так как GET имеет ограничение на размер около 1024 символов.
Я буду использовать сессии, где это возможно.
Ответ 6
Вы можете просто json_encode()
массив передать его как строку в запросе POST. Используется много раз. Работает каждый раз, как молодая титка
Ответ 7
Измените имя_данных на input_name [] в теге ввода, затем поместите тег ввода для каждого значения массива.
http://phpprogramming.wordpress.com/2007/05/06/php-passing-array-using-hidden-form-element/
Ответ 8
<?php
/*arraytransfer.php*/
echo "Array transfer<br>";
$name = array( "mike", "tom" );
$arrCnt = sizeof( $name );
echo "arrCnt: $arrCnt<br>";
echo "<form action=\"arrayrcv2.php\" method=\"POST\">";
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"arrCnt\" VALUE=\"$arrCnt\">";
for( $i=0; $i < $arrCnt; $i++ ) {
echo "<INPUT TYPE=\"HIDDEN\" NAME=\"name\" VALUE=\"$name[$i]\"> ";
}
echo "<input type=\"submit\" name=\"submit\" value=\"Submit me!\" />";
echo "</form>";
?>
<?php
/*arrayrecv.php */
$arrCnt = $_POST["arrCnt"];
echo "Receiving data arrCnt = $arrCnt<br>";
$name = array();
for( $i = 0; $i < $arrCnt; $i++ ) {
$var = $_POST["name"];
if( $var != "" ) array_push($name, $var );
}
print_r($name);
?>