Page 1 sur 1

Récupération d'une boucle while dans une autre page

Posté : 04 juin 2012, 12:27
par valerieH
Bonjour,
J'ai un soucis pour récupérer les valeurs de mon while dans une autre page, en fait lors de l'envoi d'un email -> il ne me récupère que la dernière valeur:
j'ai un formulaire d'inscription à des formations (form "envoyer"), si le formulaire à correctement été rempli, il ouvre une div par dessus ou il affiche bien toutes les valeurs correctes.
Mon problème est que lorsque je click sur le bouton submit du formulaire de la page de confirmation (form "senddata") il envoie le mail mais avec la dernière formation...

Voici le code de la div:

Code : Tout sélectionner

<?php if ((isset($_POST['envoyer'])) || (isset($_POST['senddata']))) { //data formulaire //gère les formations ++ retrouve les données :D $select; $f = $_POST['mon_champ']; echo "<h2>Vous avez choisi : </h2>"; if((isset($_POST['idf'])) &&(isset($_POST['formid']))){ $idf = ""; echo "idf: " .$idf;} foreach($f as $value) { if(isset($_POST['idf'])){ $idf = $_POST['idf']; echo $idf; } if(isset($_POST['Hrs'])){ $Hrs = $_POST['Hrs']; if($Hrs=="on"){ $Hs = " en soirée";} } if(isset($_POST['Hrw'])){ $Hrw = $_POST['Hrw']; if($Hrw=="on"){ $Hs = "le week-end";} } if (isset($_POST['Hrj'])) { $Hrj = $_POST['Hrj']; if($Hrj=="on"){ $Hs = "en journée";} } $select = explode("_",$value) ; $hidden = explode("_",$value); //valuelist en $_post if(isset($_POST[$select[0]])){ $Hs = $_POST[$select[0]]; } ?> <div style="display: block; "> <?php //$_post hidden checkbox if(isset($_POST[$hidden[1]])){ echo "<h4>hidden files ".$hidden[0].' - horaire: '.$Hs.'</h4>';} echo "<h4>".$select[1].' - Horaire '.$Hs.'</h4>'; //convert string and recup number subformation:D $id = intval($select[0]); //echo $id; $Hid = intval($hidden[0]); //echo $Hid; if($Hs=="en journée"){//echo "-jour-"; $request="SELECT inf_horaire,inf_datedu,inf_dateau,inf_price,sub_name FROM info_formation INNER JOIN form_category ON sub_id=inf_id WHERE sub_name ='".$select[1]."' AND sub_id ='".$id."'"; } if(isset($_POST[$hidden[0]])) //hidden files { //echo "-hidden soir-"; $request="SELECT inf_horairesoir,inf_datedusoir,inf_dateausoir,inf_pricesoir, sub_name FROM info_formation INNER JOIN form_category ON sub_id=inf_id WHERE sub_name ='".$select[1]."' AND sub_id ='".$Hid."'"; } else //select { if($Hs=="en soirée"){//echo "-soir-"; $request="SELECT inf_horairesoir,inf_datedusoir,inf_dateausoir,inf_pricesoir, sub_name FROM info_formation INNER JOIN form_category ON sub_id=inf_id WHERE sub_name ='".$select[1]."' AND sub_id ='".$id."'"; } } if($Hs=="le week-end"){ //echo "-we-"; $request="SELECT inf_horairewe,inf_dateduwe,inf_dateauwe,inf_pricewe, sub_name FROM info_formation INNER JOIN form_category ON sub_id=inf_id WHERE sub_name ='".$select[1]."' AND sub_id ='".$id."'"; } $query = mysql_query($request); //while date du au while($row = mysql_fetch_row($query)) { $datedu = explode(" ", $row[1]); $dateau = explode(" ", $row[2]); $horaire = $row[0]; $price = $row[3]; $subname = $row[4]; $datedu = $row[1]; $dateau = $row[2]; $dateduFR = $datedu[8].$datedu[9].$datedu[7].$datedu[5].$datedu[6].$datedu[4].$datedu[0].$datedu[1].$datedu[2].$datedu[3]; $dateauFR = $dateau[8].$dateau[9].$dateau[7].$dateau[5].$dateau[6].$dateau[4].$dateau[0].$dateau[1].$dateau[2].$dateau[3]; echo " Date du " .$dateduFR ." au " .$dateauFR . " Tous les " .$row[0] ."<br />"; $infofo = "<p style='width: 100%; white-space: now-wrap;'> <div style='color: #000; font-size: 105%; text-decoration: underline;'>".$select[1]."</div><br /> Horaire: Tout les " .$horaire ." <br /> Période du " .$dateduFR ." au ".$dateauFR ."<br /> Prix de la formation: " .$price .' €'."<br /></p> <hr style='margin-bottom:2px; border: 1px solid #836D56;'/>"; echo $infofo; $infofo .="</div>"; echo '<input type="hidden" name="infofo" value="'.$infofo.'"/>'; } //end while date du au } //end foreach } ?>
et ensuite celui de la page d'inscription (celle qui check le formulaire et envoi l'email):

Code : Tout sélectionner

if(isset($_POST['senddata'])) { //search user //include "inc/searchuser.inc.php"; //send email for bpsa $destinataire = "[email protected]"; $expediteur = $_POST['mail']; $reponse = $expediteur; $infofo = $_POST['infofo']; $contenu_message0 = "Formation reservée: \t"; echo "Envoi d'un mail à $destinataire"; $codehtml= "<html><head><title>Réservation pour formations</title> <style type='text/css'> body{font-family: arial, verdana; font-size: 12px; color: #000; width: 100%; } </style> </head><body> <table style='width: 95%; border-collapse: collapse; text-color: 000; border: 1px solid #836D56;'> <tr> <td bgcolor='#836D56' style='color: white; padding: 5px; '>".$contenu_message0 ."</td></tr> <tr> <td>".$infofo."</td> </tr><tr> <td bgcolor='#836D56' style='color: white; padding: 5px; width: 100%; '><b>Coordonnées de la personne réservant la formation</b></td> </tr><tr> <td style='color: #000; padding: 5px; line-height: 22px; '> <b>Nom, prénom: </b>".$_POST["nom"]." ".$_POST["prenom"]."<br /> <b>Adresse: </b>".$_POST["adresse"]."<br /> <b>CP / Ville: </b>".$_POST["cp"]." ".$_POST["ville"]."<br /> <b>Mail :</b> <a href='mailto:".$_POST["mail"]."'>".$_POST["mail"]."</a><br /> <b>Tél / Gsm : </b>".$_POST["tel"]."<br /> <b>Date et lieu de naissance : </b>".$_POST["dateLieuxNaiss"]."<br /> <b>Profession / Diplôme:</b> ".$_POST["profession"]."<br /> <b>Indication médicale: </b>".$_POST["indicmed"]."<br /> <b>Coordonnées personne de contact:</b> ".$_POST["persContact"].' - '.$_POST["persContact1"]."</td></tr></table> </body></html>"; mail($destinataire, $contenu_message0, $codehtml, "From: $expediteur\r\n". "Reply-To: $reponse\r\n". "Content-Type: text/html; charset=\"iso-8859-1\"\r\n"); } ?>
si quelqu'un saurait se pencher un peu sur ce code, je n'arrive plus à y voir clair...jusqu'a ne plus rien y comprendre...
Merci

Re: Récupération d'une boucle while dans une autre page

Posté : 04 juin 2012, 12:43
par xTG
echo '<input type="hidden" name="infofo" value="'.$infofo.'"/>';
Tu as ceci dans ton while, cela implique que cette balise s'écrit X fois, à chaque itération du while donc.
Sauf que tu mets le même attribut name. Donc le navigateur ne sait pas comment gérer cela, donc il n’envoie que le dernier du DOM.
Utilises une notation tableau, ou bien fais varier le name.
<input type="hidden" name="monTableau[]" />
echo '<input type="hidden" name="monChamp_' . $i . '" />
$i++;

Re: Récupération d'une boucle while dans une autre page

Posté : 04 juin 2012, 13:17
par valerieH
Oui c'est juste mais il ne s'incrémente pas avec ceci:

au dessus du while :
$i = 1;

dans le while :
echo '<input type="hidden" name="infofo_'.$i.'" value="'.$infofo.'"/>';
$i++;

....

Re: Récupération d'une boucle while dans une autre page

Posté : 04 juin 2012, 13:35
par valerieH
ok maintenant elle s'incrémente...j'ai dû mettre la variable $i=0; au dessus du foreach...
je regarde pour la récup du tableau maintenant, je suppose avec un foreach? dans l'email?
Merci déjà pour cette remarque, à force d'etre trop dedans on fini par ne plus y vior clair...

Re: Récupération d'une boucle while dans une autre page

Posté : 04 juin 2012, 13:52
par xTG
Je te recommande tout de même d'utiliser une notation tableau, ainsi pas de post-traitement à faire sur le nom du champ.
Juste un foreach à appliquer dessus.

Re: Récupération d'une boucle while dans une autre page

Posté : 04 juin 2012, 14:29
par valerieH
qu'appelles-tu par notation tableau?

ceci?

Code : Tout sélectionner

echo '<input type="hidden" name="infofo['.$i.']" value="'.$infofo.'"/>';

Re: Récupération d'une boucle while dans une autre page

Posté : 04 juin 2012, 14:40
par xTG
Exactement. :)

Re: Récupération d'une boucle while dans une autre page

Posté : 04 juin 2012, 15:09
par valerieH
Yép Yép Yép, ok c'est fait, email envoyé tout est correct :D

Une énorme merci à toi xTG car je n'y serais jamais arrivée, cette page fait 1200 lignes passé, j'ai déjà un peu optimisé et découpé en include mais rien à faire, qd t'arrives plus à te concentré c'est comme ca..

Merci merci en tout les cas pour ton aide précieuse, je reviendrai ici en cas de futur problème ;=D
Enfin, à espérer pas trop vite qd mm :D

Excellente journée à tous