Passer un array dans une requête GET

Invité
Invité n'ayant pas de compte PHPfrance

16 févr. 2008, 22:19

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 :

Code : Tout sélectionner

header("Location:showDetails.php?array[][]=".$array);
Dans showDetails.php j'ai dans mon array la String 'Array' et non le réel contenu.
Merci de l'aide.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 févr. 2008, 22:42

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Débuter en PHP".

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 févr. 2008, 02:05

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]...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

17 févr. 2008, 10:13

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 févr. 2008, 15:58

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...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

17 févr. 2008, 16:29

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

Eléphant du PHP | 259 Messages

17 févr. 2008, 17:06

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... ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 févr. 2008, 19:58

Ca peut effectivement pas faire de mal :)

Et que donnent $_GET['vehicules'] et unserialize($_GET['vehicules']) dans ta page showDetails.php ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

19 févr. 2008, 20:06

Salut et désolé pour le temps de réponse, j'avais d'autres chats a fouetter :twisted:

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..

Invité
Invité n'ayant pas de compte PHPfrance

20 févr. 2008, 20:30

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 févr. 2008, 12:53

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]

Invité
Invité n'ayant pas de compte PHPfrance

22 févr. 2008, 17:38

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:

Code : Tout sélectionner

index.php?" . $titre . "paramSuivant="

Invité
Invité n'ayant pas de compte PHPfrance

22 févr. 2008, 22:47

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.

shooter
Invité n'ayant pas de compte PHPfrance

30 oct. 2015, 11:02

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. 8-)