Page 1 sur 1
Passer un array dans une requête GET
Posté : 16 févr. 2008, 22:19
par Invité
Bonjour,
Je n'arrive pas à passer un array dans la requête :
Voici la fonction qui retourne l'array :
Code : Tout sélectionner
$array = array();
$i = 0;
while($row = $result->fetch_assoc()) {
foreach($row as $name=>$val) {
$array[$i][$name] = $val;
}
$i++;
}
return $array;
La requête :
Dans showDetails.php j'ai dans mon array la String 'Array' et non le réel contenu.
Merci de l'aide.
Posté : 16 févr. 2008, 22:42
par Truc
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Débuter en PHP".
Posté : 17 févr. 2008, 02:05
par Ryle
Tu ne peux pas passer de tableau php dans une url. Un tableau est une structure un chouilla plus complexe qu'une chaine de caractère et mérite un peu plus d'attention si tu souhaites la linéariser
Le plus simple est sans doute d'utiliser la fonction serialize() pour transformer ton tableau en une chaine de caractère et la passer en get, puis de l'autre côté, une fois la chaine récupérée, utiliser unserialize() pour reconstituer le tableau

(attention toutefois à la limite de taille qu'impose le passage de variables par get)
Autre solution, bien que je ne l'ai pas testé, tu dois pouvoir reproduire un tableau a une dimension en passant un à un chaque élément... un truc du genre :
"url?array[]=".$array[0]."&array[]=".$array[1]...
Posté : 17 févr. 2008, 10:13
par Invité
Le plus simple est sans doute d'utiliser la fonction serialize() pour transformer ton tableau en une chaine de caractère et la passer en get, puis de l'autre côté, une fois la chaine récupérée, utiliser unserialize() pour reconstituer le tableau Smile (attention toutefois à la limite de taille qu'impose le passage de variables par get)
J'ai essayé cette solution aussi et aprés le unserialize, j'ai fait un var_dump sur la variable array et j'ai eu en sortie bol(false) quelque chose comme ça.
Posté : 17 févr. 2008, 15:58
par Ryle
Montre nous le lien que tu utilises et la valeur générée par le serialize() ...
M'est avis que tu as omis la partie clé dans le couple clé=valeur que tu dois spécifier dans l'url, ou bien que tu ne récupères pas la valeur correctement ensuite...
Posté : 17 févr. 2008, 16:29
par Invité
Bonjour,
Montre nous le lien que tu utilises et la valeur générée par le serialize()
Code : Tout sélectionner
a:1:{i:0;a:8:{s:11:"vehicule_id";s:1:"2";s:15:"vehicule_marque";s:7:"peugeot";s:20:"vehicule_type_moteur";s:6:"diesel";s:14:"vehicule_annee";s:4:"1983";s:13:"vehicule_nbkm";s:5:"20000";s:19:"vehicule_equipement";s:16:"auto radio, clim";s:13:"vehicule_prix";s:5:"10000";s:16:"vehicule_couleur";s:7:"blanche";}}
Code : Tout sélectionner
$vehicules = serialize($arrayVehicule);
header("Location:showDetails.php?vehicules=".$vehicules);
Merci
Posté : 17 févr. 2008, 17:06
par Jules Petibidon
Hello,
Peut-être que urlencode() et urldecode() en complément de serialize()/unserialize() résoudraient ton problème ?
Sans test, sans garantie, sans même être sur que ce soit pas inutile... Mais bon...

Posté : 17 févr. 2008, 19:58
par Ryle
Ca peut effectivement pas faire de mal
Et que donnent $_GET['vehicules'] et unserialize($_GET['vehicules']) dans ta page showDetails.php ?
Posté : 19 févr. 2008, 20:06
par Invité
Salut et désolé pour le temps de réponse, j'avais d'autres chats a fouetter
Code : Tout sélectionner
<?php
if(!empty($_GET['vehicules'])) {
var_dump(urldecode($_GET['vehicules']));
$vehicules = urldecode(unserialize($_GET['vehicules']));
var_dump($vehicules);
$counter = 0;
while($counter < count($vehicules)) {
foreach($vehicules[$counter] as $vehicule) {
print_r($vehicule);
}
$counter++;
}
}
?>
Code : Tout sélectionner
string(371) "a:1:{i:0;a:9:{s:11:\"vehicule_id\";s:1:\"7\";s:15:\"vehicule_marque\";s:8:\"mercedes\";s:20:\"vehicule_type_moteur\";s:6:\"diesel\";s:14:\"vehicule_annee\";s:4:\"1952\";s:13:\"vehicule_nbkm\";s:5:\"12000\";s:19:\"vehicule_equipement\";s:5:\"touto\";s:13:\"vehicule_prix\";s:4:\"1574\";s:16:\"vehicule_couleur\";s:5:\"grise\";s:13:\"vehicule_desc\";s:11:\"description\";}}" string(0) ""
Warning: Invalid argument supplied for foreach() in /opt/coolstack/apache2/htdocs/ajax/CanalAuto/showDetails.php on line 8
Voila cela ne fonctionne toujours pas snif..
Posté : 20 févr. 2008, 20:30
par Invité
J'abandonne la solution de passer l'array dans la requête, je le passe en session. Je reste ouvert à toute suggestion concernant le passage par la requête.
Merci de votre aide.
Posté : 21 févr. 2008, 12:53
par Ryle
M'est avis que ce sont les magic quotes qui posent problème... php te protège automatiquement toutes les guillemets de ta chaine et ça aide pas pour retrouver le tableau...
Colle donc un stripslashes() pour te débarasser des antislash ajoutés par les magic quotes, le unserialize() fonctionnera mieux
$tab = unserialize(stripslashes($_GET['vehicules']));
Quoi qu'il en soit, le passage de la valeur par la session n'est pas une mauvaise solution
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]
Posté : 22 févr. 2008, 17:38
par Invité
J'ai eu le même problème que toi récemment et j'ai réussit à passer mon array en le convertissant en chaîne de caractère.
Mon array était vraiment tout simple, j'ai convertit en faisant ceci:
Code : Tout sélectionner
$titre = ""
foreach($titres as $title)
{
$titre = $titre . "titre[]=" . $title . "&";
}
Et dans mon url je l'ai passé comme ceci:
Posté : 22 févr. 2008, 22:47
par Invité
Merci de ton intervention pour faire partager ton expérience. Pour le moment sa marche en mettant le tableau en session donc la j'ai un peu la flemme(?) de modifier le code. Merci beaucoup en tout cas pour vos idées.
Re: Passer un array dans une requête GET
Posté : 30 oct. 2015, 11:02
par shooter
slt,
en faite, tu peut passer ton tableau en JSON, avec la fonction $machain = json_encode($tableau).
par la suite tu passe $machain dans l'url, et avec la fonction json_decode($machain), t'aura ton tableau.
