PHP - Как отправить массив на другую страницу? - PullRequest
18 голосов
/ 10 октября 2009

Я пытаюсь отправить массив на другую страницу.

То, что я пробовал раньше, было:

стр.1

<input type='hidden' name='input_name' value='<?php print_r($array_name); ?>' />

И стр.2

<?php 
$passed_array = $_POST['input_name'];
?>

Теперь, как мне заставить $passed_array действовать как массив?

Или вам известен какой-нибудь другой способ решения этой проблемы?

Спасибо, Майк.

Редактировать: причина, по которой я хочу сделать это, заключается в том, что мне нужно избегать сеансов и файлов cookie.

Ответы [ 8 ]

43 голосов
/ 10 октября 2009

Вы можете поместить это в сессию:

session_start();
$_SESSION['array_name'] = $array_name;

Или, если вы хотите отправить его через форму, вы можете сериализовать это:

<input type='hidden' name='input_name' value="<?php echo htmlentities(serialize($array_name)); ?>" />

$passed_array = unserialize($_POST['input_name']);

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

Редактировать: многие ответы предлагают использовать name="input_name[]". Это не будет работать в общем случае - его нужно будет модифицировать для поддержки ассоциативных массивов и много модифицировать для поддержки многомерных массивов (icky!). Гораздо лучше придерживаться сериализации.

4 голосов
/ 26 апреля 2013

Я столкнулся с некоторыми проблемами в приведенных выше примерах, когда некоторые значения в моем массиве содержали разрывы строк. Некоторые из моих ценностей также содержали символы из иностранных языков, которые htmlentities продолжали портить. Следующее было моим решением.

На странице, с которой вы хотите передать массив ...

<INPUT TYPE="hidden" NAME="input_name" VALUE="<?= base64_encode(serialize($array_name)); ?>">

На странице, которая получает массив ...

$array = unserialize(base64_decode($_POST["input_name"]));
4 голосов
/ 10 октября 2009

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

<input type='hidden' name='input_name' value='<?php serialize($array_name); ?>' />

и на странице 2:

<?php $passed_array = unserialize($_POST['input_name']); ?>
2 голосов
/ 29 июля 2015

Вы можете просто json_encode() массив затем передать его в виде строки в запросе POST. Использовал это много раз. Работает каждый раз, как молодая грудь

2 голосов
/ 10 октября 2009

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

<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 или сериализацию.

1 голос
/ 10 октября 2009

Обратите внимание, что для работы с сериализованными массивами вам нужно использовать POST в качестве метода передачи формы, так как GET имеет ограничение размера где-то около 1024 символов.

Я бы использовал сеансы везде, где это возможно.

0 голосов
/ 30 января 2015
<?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);
?>
0 голосов
/ 10 октября 2009

Измените input_name на input_name [] в вашем входном теге, затем поместите входной тег для каждого значения массива.

http://phpprogramming.wordpress.com/2007/05/06/php-passing-array-using-hidden-form-element/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...