$idArray = array(1,2,3,4);
могу ли я написать эту строку в HTML?
<form method='POST' action='{$_SERVER['PHP_SELF']}?arr={$idArray}'>
или я должен написать:
<form method='POST' action='{$_SERVER['PHP_SELF']}?arr[]={$idArray}'>
как он будет принят?
как я должен обрабатывать его на вызываемой странице?
благодаря !!
Если вы хотите передать массив как параметр, вам нужно будет добавить параметр для каждого элемента. Строка запроса будет выглядеть следующим образом:
?arr[]=1&arr[]=2&arr[]=3&arr[]=4
Как написали другие, вы также можете сериализовать и неэтериализовать массив.
Но действительно ли вам нужно снова отправить данные клиенту? Похоже, вам просто нужен способ сохранения данных между запросами .
В этом случае лучше использовать сеансы (документы) . Это также более безопасно, так как иначе клиент может изменять данные.
Используйте функцию serialize
и unserialize
PHP. Эта функция предоставляет вам сохраняемую (строчную) версию типа массива. Более подробную информацию об использовании читайте http://php.net/manual/en/function.serialize.php и http://www.php.net/manual/en/function.unserialize.php.
Еще один вариант (даже красивый, я бы сказал):
<form method='POST'> <input type="hidden" name="idArray[]" value="1" /> <input type="hidden" name="idArray[]" value="2" /> <input type="hidden" name="idArray[]" value="3" /> <input type="hidden" name="idArray[]" value="4" /> </form>
Но, конечно, он отправляется как POST. Я бы не рекомендовал отправлять его с сериализацией, поскольку выход этой функции может стать довольно большим, а длина или URL ограничены.
Просто используйте explode()
и передайте его значение. Вы можете вернуть массив с помощью метода implode () .
Примечание. Выберите разделитель в соответствии с типом содержимого, которого нет в вашем массиве. Напр. Если вы уверены, что в вашем массиве не будет никаких запятых (,), тогда выберите запятую как разделитель.
Вы можете использовать сериализацию и сериализацию вместе с urlencode, например
При отправке вы можете отправить их следующим образом:
<?php $array1 = Array(["key1"]=>"value1",["key2"]=>"value2"); $array2 = Array(["key1"]=>"value1",["key2"]=>"value2"); $data1="textdata"; $urlPortion= '&array1='.urlencode(serialize($array1)). '&array2='.urlencode(serialize($array2)). '&data1='.urlencode(serialize($data1)); //Full URL: $fullUrl='http://localhost/?somevariable=somevalue'.$urlPortion ?>
При получении вы можете получить к ним доступ:
<?php $destArray1=unserialize($_GET['array1']); $destArray2=unserialize($_GET['array2']); $destData1=unserialize($_GET['data1']); ?>
И Voila, вы можете прикрепить этот URL-адрес к запросу ajax или обычной странице браузера.
http://snipplr.com/view/4444/passing-an-array-through-get-request/
$str=serialize($idArray); <form method='POST' action='{$_SERVER['PHP_SELF']}?arr=$str'>
Чтобы получить данные на странице приема, вам сначала нужно:
<?PHP $idArray = unserialize($_GET["arr"]); ?>
Использовать функцию parse_str
$str = "first=value&arr[]=foo+bar&arr[]=baz"; parse_str($str); echo $first;
Это старая тема, но ответа нет.
В конкретном случае, о котором вы упомянули, я бы разложил массив на строку, а затем взорвался, когда вы отправляете форму.
$str = rawurlencode(implode(",",$idArray)); <form method='POST' action='{$_SERVER['PHP_SELF']}?arr={$str}'>
а затем на почтовую обработку:
$idArray = explode(",",rawurldecode($_POST['arr']));
сначала выполните serialize()
вашего массива и передайте это через. Затем вызовите unserialize()
. http://ie.php.net/serialize
Сессия – гораздо более безопасный и чистый способ сделать это. Начните сеанс с:
session_start();
Затем добавьте свой сериализованный массив в качестве переменной сеанса следующим образом:
$_SESSION["venue"] = serialize($venue);
Просто вызовите переменную сеанса, когда вам это нужно.