Page 1 sur 1

pb avec serialize unserialize

Posté : 25 juin 2015, 16:09
par fred39
Bonjour,
dans le cadre d'un cursus de formation php mysql, je fais un petit TP agence de voyage :D .
J'ai une boucle, qui construit les box destinations dans la page "accueil.php". Voir images ci dessous.
l'objectif c'est quand on clic sur une des box ça nous renvoie vers une page précisant les caractéristiques de la destination.

voici la fonction qui génère la box

Code : Tout sélectionner

function generateBox($paramDestination = false) { $html = ""; if ($paramDestination && is_array($paramDestination)) { // cette partie génère le formulaire qui permettra de transmettre le tableau $paramDestination à la page details.php. // on évite ainsi de refaire la requête SQL ds la page details.php $html = '<div class="box"><form name="transfertArray" method="post" action="test.php">' .'<input type="hidden" name="stringParamDestination" value="'. urlencode(serialize($paramDestination)).'" />' .'<a href="#" onclick="document.forms[\'transfertArray\'].submit();" '.'>'; if (isset($paramDestination['img'])) { $pathImg = getPathImg($paramDestination['img']); if ($pathImg) { $html.='<img src="' . $pathImg . '" />'; } } $html.=generateTitlePrice($paramDestination); $html.='</a></form></div>'; } return $html; }
On voit bien sur les copies d'écran que le tableau $paramDestination est bien différent pour chaque box la valeur de urlencode(serialize($paramDestination) et de $html.='<img src="' . $pathImg . '" />'; est différente.

dans ma page test.php (action du formulaire, j'ai juste mis les 2 lignes suivantes:

Code : Tout sélectionner

$destination = unserialize(urldecode($_POST['stringParamDestination'])); echo $destination['img'];
et le pb, c'est que quelque soit la box sur laquelle je clique, je récupère toujours le tableau de la première destination.
"marrakech.jpg"

Je ne vois pas d'où peut venir le pb.
Si quelqu'un a une idée...
merci d'avance.


Image


Image

Re: pb avec serialize unserialize

Posté : 25 juin 2015, 16:53
par Saian
Salut, toutes les box contiennent un formulaire de même nom et donc le code sur le onclick doit systématiquement soumettre le premier formulaire de ce nom.
Il faudrait que tu donnes un id unique au formulaire à chaque appel de generateBox afin de pouvoir cibler le bon formulaire sans aucune ambiguïté.

PS : en jQuery un $(this).parent('form').submit() devrait faire le job sans avoir besoin d'id ou de name sur les formulaires.

Re: pb avec serialize unserialize

Posté : 26 juin 2015, 08:52
par fred39
Bonjour,
merci pour la réponse. Effectivement, je n'avais pas pensé que j'avais n fois un formulaire avec le même nom.
J'ai modifié ma fonction ainsi.

Code : Tout sélectionner

if ($paramDestination && is_array($paramDestination)) { // cette partie génère le formulaire qui permettra de transmettre le tableau $paramDestination à la page details.php. // on évite ainsi de refaire la requête SQL ds la page details.php $transfertArray= str_replace(" ","_",$paramDestination['nom']."Array"); $html= $transfertArray; $html.= '<div class="box"><form name='.$transfertArray.' method="post" action="test.php">' .'<input type="hidden" name="stringParamDestination" value="'. urlencode(serialize($paramDestination)).'" />' .'<a href="#" onclick="document.forms[\''.$transfertArray.'\'].submit();" '.'>';
merci beaucoup