$idArray = array(1,2,3,4);
puis-je écrire cette ligne en HTML?
<form method='POST' action='{$_SERVER['PHP_SELF']}?arr={$idArray}'>
ou devrais-je écrire:
<form method='POST' action='{$_SERVER['PHP_SELF']}?arr[]={$idArray}'>
comment sera-t-il passé?
comment dois-je le gérer dans la page appelée?
merci !!
Si vous souhaitez passer un tableau en tant que paramètre, vous devez ajouter un paramètre pour chaque élément. Votre chaîne de requête deviendrait:
?arr[]=1&arr[]=2&arr[]=3&arr[]=4
Comme d'autres l'ont écrit, vous pouvez également sérialiser et désérialiser le tableau.
Mais devez-vous vraiment renvoyer les données au client? Il semble que vous ayez simplement besoin d'un moyen de conserver les données entre les requêtes.
Dans ce cas, il vaut mieux utiliser sessions(docs) . Ceci est également plus sécurisé, sinon le client pourrait modifier les données.
Utilisez la fonction serialize
et unserialize
PHP . Cette fonction vous donne la version stockable (chaîne) du type tableau . Pour plus d'informations sur l'utilisation, lisez http://php.net/ manual/fr/function.serialize.php et http://www.php.net/manual/en/function.unserialize.php
Une autre option (même jolie, dirais-je):
<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>
Mais bien sûr, il est envoyé en tant que POST. Je ne recommanderais pas de l'envoyer avec serialize car la sortie de cette fonction peut devenir assez grosse et la longueur ou l'URL est limitée.
Vous pouvez utiliser serialize et & serialize avec urlencode Par exemple.
En envoyant, vous pouvez les envoyer comme ceci:
<?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
?>
Lors de la réception, vous pouvez y accéder en tant que:
<?php
$destArray1=unserialize($_GET['array1']);
$destArray2=unserialize($_GET['array2']);
$destData1=unserialize($_GET['data1']);
?>
Et voila, vous pouvez attacher cette URL sur une requête ajax ou une page de navigateur normale.
Utilisez simplement explode()
et transmettez sa valeur. Vous pouvez récupérer le tableau en utilisant implode () .
Remarque: Choisissez le délimiteur en fonction du type de contenu qui n'existe pas dans votre tableau. Pour par exemple. Si vous êtes sûr qu'il n'y aura pas de virgules (,) dans votre tableau, choisissez ensuite une virgule comme séparateur.
Utiliser la fonction parse_str
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;
http://snipplr.com/view/4444/passing-an-array-through-get-request/
$str=serialize($idArray);
<form method='POST' action='{$_SERVER['PHP_SELF']}?arr=$str'>
Pour obtenir les données dans la page de réception, vous devez d’abord:
<?PHP
$idArray = unserialize($_GET["arr"]);
?>
serialize()
votre tableau en premier et passez-le. Ensuite, appelez unserialize()
dessus. http://ie.php.net/serialize
Une session est un moyen beaucoup plus sûr et plus propre de le faire. Commencez votre session avec:
session_start();
Ajoutez ensuite votre tableau sérialisé en tant que variable de session comme ceci:
$_SESSION["venue"] = serialize($venue);
Appelez simplement la variable de session quand vous en avez besoin.
La réponse de Felix répond à la question magnifiquement, mais manque les exemples à mon avis.
Cette réponse est motivée par le commentaire sur la réponse de Felix.
pouvez-vous spécifier les clés en utilisant cette méthode? - Qwerty 27 avr. 14 à 0:05
Tout d'abord, pour illustrer la réponse de Felix:
<input type="hidden" name="array[]" value="val1" />
<input type="hidden" name="array[]" value="val2" />
<input type="hidden" name="array[]" value="val3" />
Lorsque la demande est envoyée au serveur, elle est du type Array
.
Voici un exemple avec des clés. Cela vous donnera un tableau avec deux clés, deux valeurs chacune.
<input type="hidden" name="array['first']" value="val1" />
<input type="hidden" name="array['first']" value="val2" />
<input type="hidden" name="array['second']" value="val3" />
<input type="hidden" name="array['second']" value="val4" />
Enfin, voici un exemple avec VueJS, qui correspond à ce que j’utilisais au moment d’écrire, ce qui m’a amené à cette question.
<input v-for="(value, key) in data" type="hidden" :name="'array[' + key + ']'" :value="value">
J'espère que cela sera utile à tous les passants.
Dans le cas particulier que vous avez mentionné, j'imploserais le tableau en une chaîne, puis je l'exploserais lorsque vous posteriez le formulaire.
$str = rawurlencode(implode(",",$idArray));
<form method='POST' action='{$_SERVER['PHP_SELF']}?arr={$str}'>
et ensuite sur le post-traitement:
$idArray = explode(",",rawurldecode($_POST['arr']));