строке - передача массива get php




как передать массив в GET в PHP? (7)

$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}'>

как это пройдет?

как мне справиться с этим на вызываемой странице?

Спасибо !!


В указанном вами конкретном случае я бы поместил массив в строку, а затем взорвал его при публикации формы.

$str = rawurlencode(implode(",",$idArray));

<form method='POST' action='{$_SERVER['PHP_SELF']}?arr={$str}'>

а затем на пост-обработку:

 $idArray = explode(",",rawurldecode($_POST['arr']));

Вы можете использовать serialize и & serialize вместе с 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']);
?>

И вуаля, вы можете прикрепить этот URL-адрес на запрос AJAX или обычную страницу браузера.


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

?arr[]=1&arr[]=2&arr[]=3&arr[]=4

Как написали другие, вы также можете сериализовать и десериализовать массив.

Но нужно ли вам снова отправлять данные клиенту? Похоже, вам просто нужен способ сохранить данные между запросами .

В этом случае лучше использовать sessions(docs) . Это также более безопасно, так как в противном случае клиент может изменить данные.



Просто используйте explode() и передайте его значение. Вы можете получить массив обратно с помощью implode() .

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


Сессия - намного более безопасный и чистый способ сделать это. Начните сессию с:

session_start();

Затем добавьте ваш сериализованный массив в качестве переменной сеанса следующим образом:

$_SESSION["venue"] = serialize($venue);

Просто вызовите переменную сеанса, когда вам это нужно.


serialize() ваш массив первым и передайте его. Затем вызовите unserialize() для него. http://ie.php.net/serialize





arrays