MarvinLeRouge Posté 6 Juillet 2005 Posté 6 Juillet 2005 Salut, Il mse semble que quelqu'un avait indiqué une méthode pour éviter les problèmes de renvoi des données post quand on recharge une page contenant un formulaire php ET son traitement. Mais je n'arrive plus à retrouver le thread en question. Plizzzzz helpp
lupucide Posté 6 Juillet 2005 Posté 6 Juillet 2005 Tiens, je me posais la même question il y a peu de temps. La méthode m'intéresse aussi.
Compte supprimé Posté 6 Juillet 2005 Posté 6 Juillet 2005 La solution est de faire une redirection aprés le traitement si le formulaire a été correctement rempli.
MarvinLeRouge Posté 7 Juillet 2005 Auteur Posté 7 Juillet 2005 (modifié) Tu pourrais détailler la méthode s'il te plait ? Cas pratique : une page avec un formulaire de contact émettant un mail. L'internaute retombe sur la même page qui traite le formulaire et a ) lui met un message si ça a marché b ) lui met un message et remplis le formulaire s'il s'est trompé Comment fais-tu pour détecter l'état du traitement si tu proviens d'une redirection ? Modifié 7 Juillet 2005 par MarvinLeRouge
hcplayer Posté 7 Juillet 2005 Posté 7 Juillet 2005 en traitant les données dans une autre page que la page qui affiche la ré"ponse (echec ou réussite) (pas dans la même) puis en redirigeant avec un header("location:...") vers la page qui affiche la réponse
Portekoi Posté 7 Juillet 2005 Posté 7 Juillet 2005 Même en fesant cela, si tu cliques sur actualiser, tu renverras les infos. Sauf si la page de d'affichage du message est différente de la page de traitement et diférente de la page contenant le formulaire....
Compte supprimé Posté 7 Juillet 2005 Posté 7 Juillet 2005 en traitant les données dans une autre page que la page qui affiche la ré"ponse (echec ou réussite) (pas dans la même) puis en redirigeant avec un header("location:...") vers la page qui affiche la réponse <{POST_SNAPBACK}> Non car avec cette méthode, difficile de transmettre les champs du formulaire (et ainsi éviter de tout reremplir) La solution est : cible du formulaire sur la même page, avec traitement au début de la page. Si traitement incorect, on affiche le reste de la page avec les champs déjà remplis et les messages d'alerte qui vont bien. si traitement ok, on redirige vers la page ok capito ??
lupucide Posté 7 Juillet 2005 Posté 7 Juillet 2005 (modifié) Mais est-ce qu'il existe un moyen d'éviter l'effet du refresh sur mon formulaire ? Il est facile d'effectuer le traitement du formulaire par un script externe et faire une redirection mais alors, comment renvoyer mes données POST pour effectuer un affichage ? formulaire.php => POST => traitement.php => POST => formulaire.php Je suis preneur de toutes suggestions Modifié 7 Juillet 2005 par lupucide
PoM_- Posté 7 Juillet 2005 Posté 7 Juillet 2005 Moi je ne pense pas que t'as methode est la meilleur. Mon point de vu se tournerais plutot sur une methode utilisant deux pages. L'une contenant le formulaire, l'autre les fonctions neccessaire a la verification du formulaire et à l'envoie. -> Si tous les champs sont bon: Ok, on envoie le mail et on redirige sur la page du formulaire echo"Mail envoyé"; -> Si il manque des champs: Erreur, on met les champs deja remplit en session et on redirige vers la page d'envoie echo"Veuillez renseigner tous les champs"; -> Si tous les champs ok, alor qu'il y avait deja eu une erreur on efface les variable session. unset @$_SESSION['message'], etc.... Voila mon point de vu si vous desirez les sources je les mettrais.
PoM_- Posté 7 Juillet 2005 Posté 7 Juillet 2005 Mais est-ce qu'il existe un moyen d'éviter l'effet du refresh sur mon formulaire ? Il est facile d'effectuer le traitement du formulaire par un script externe et faire une redirection mais alors, comment renvoyer mes données POST pour effectuer un affichage ? formulaire.php => POST => traitement.php => POST => formulaire.php Je suis preneur de toutes suggestions <{POST_SNAPBACK}> Il faut utiliser les SESSIONs...
Compte supprimé Posté 7 Juillet 2005 Posté 7 Juillet 2005 Mais est-ce qu'il existe un moyen d'éviter l'effet du refresh sur mon formulaire ? Il est facile d'effectuer le traitement du formulaire par un script externe et faire une redirection mais alors, comment renvoyer mes données POST pour effectuer un affichage ? formulaire.php => POST => traitement.php => POST => formulaire.php Je suis preneur de toutes suggestions <{POST_SNAPBACK}> Ma méthode évite un refresh du formulaire.
Compte supprimé Posté 7 Juillet 2005 Posté 7 Juillet 2005 Moi je ne pense pas que t'as methode est la meilleur. Explique moi pourquoi ? (parce que moi je ne vois pas...) Ta méthode oblige à se trainer des sessions, et en plus tu fais 2 redirections. Moi j'ai pas de sessions, et au pire, une redirection.
PoM_- Posté 7 Juillet 2005 Posté 7 Juillet 2005 Je n'ai qu'une redirection. Mais bon apres tout chaqun ca methode ! Tans que le résultat est là . Si il t'es possible de mettre tes source dans un zip et mettre le liens, je serais curieux de voir comment tu procède.
Compte supprimé Posté 7 Juillet 2005 Posté 7 Juillet 2005 Je n'ai qu'une redirection. Mais bon apres tout chaqun ca methode ! Tans que le résultat est là .Si il t'es possible de mettre tes source dans un zip et mettre le liens, je serais curieux de voir comment tu procède. <{POST_SNAPBACK}> Oui, sorry, une redirection mais 2 pages Je fais tout simplement un truc du genre <?php// traitement du formulaireif (isset($_POST['monchamp'])) { // vérification des champs .... if ($verification_ok) { // traitement .... // redirection header ("formulaire_soumis.htm"); exit(); } }?><!-- Formulaire --><form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"><input type="text" name="monchamp" id="monchamp" value="<?php echo $_POST['monchamp'] ?>" /><input type="submit" value="Envoyer" /></form>
MarvinLeRouge Posté 7 Juillet 2005 Auteur Posté 7 Juillet 2005 Et comme je souhaite que la personne retombe sur la même page, on a : 1) page formulaire_soumis = page formulaire 2) il faut donc faire passer l'état "ok" lors de la redirection J'ai peut-être une idée : a) nom de la page : formulaire.php cible du formulaire : formulaire.php c) si problème de traitement, on reremplit le formulaire en demandant de corriger. Donc la re-soumission se contentera de ré-afficher l'erreur d) si traitement ok, on envoie le mail (ou on insère en bdd ou que sais-je), et on redirige vers formulaire_ok.php, qui utilise en fait un url-rewriting pour renvoyer sur formulaire.php?etat=ok Voui je suis d'accord, c'est tordu Ceci dit, ça devrair marcher, non ? (Pfft : bruit de claquage des liaisons dendritiques, avec étrange odeur de caramel)
PoM_- Posté 7 Juillet 2005 Posté 7 Juillet 2005 <?php// traitement du formulaireif (isset($_POST['monchamp'])){// vérification des champs....if ($verification_ok) { // traitement .... // redirection header ("formulaire_soumis.htm"); exit(); }}?><!-- Formulaire --><form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"><input type="text" name="monchamp" id="monchamp" value="<?php echo $_POST['monchamp'] ?>" /><input type="submit" value="Envoyer" /></form> Oui c'est pas mal. Mais tu as deux pages aussi ( formulaire_soumis.htm ). De plus y a une erreur avec ton header la syntaxe est pas bonne : header("Location: formulaire_soumis.htm"); et ca ne marchera pas car le header est déjà pris par le formulaire html ( je ne suis pas sur de ca vu que le formulaire est apres le php ). Mais on peut facilement faire qu'une page en rajoutant 2 lignes, comme suit : <?php//form.php// traitement du formulaireif (isset($_POST['monchamp'])){// vérification des champs....if ($verification_ok){ // traitement .... //on vire les variables unset($_POST['monchamp']); // redirection header ("form.php?send=ok"); exit(); }else{ header ("form.php?send=no");}?><!-- Formulaire --><form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"><input type="text" name="monchamp" id="monchamp" value="<?php echo [COLOR=red]@[/COLOR]$_POST['monchamp'] ?>" /><input type="submit" value="Envoyer" /></form><br><br><? if($_GET['send'] == "ok"){echo "Mail envoye avec succes!";}if($_GET['send'] == "no"){echo "Veuillez renseigner tous les champs!";}?> Voila bon j'ai fais ca a la va vite, j'ai pas verifier, mais si y a des erreurs c'est des erreur de , ; " ' etc..
lupucide Posté 7 Juillet 2005 Posté 7 Juillet 2005 (modifié) Je repose ma question car il me semble qu'elle n'a pas été bien comprise Imaginons ma page (écrite vite fait, pour l'exemple) : <?phpif (isset($_POST)) {// Traitement du formulaire}?><html><body><form action="cette-page.php"><input /><form><?php echo $_POST; ?></body></html> Si je passe par une nouvelle page pour le traitement, je ne pourrais pas renvoyer mes données en POST pour les afficher. Pour un exemple plus concret : premier lien en signature. Je vais essayer un unset() après mon echo(), dès fois que... Modifié 7 Juillet 2005 par lupucide
PoM_- Posté 8 Juillet 2005 Posté 8 Juillet 2005 Bin une fois que c'est posté, bien sur que si tu peux trimbaler tes variables de partout. Surtout comme sur le premier liens 'simplecode' dans ta signature il y a un seul chargement donc je crain ne pas comprendre quel est le probleme ..
lupucide Posté 8 Juillet 2005 Posté 8 Juillet 2005 Et bien le problème vient du refresh de la page qui n'est pas très ergonomique, tout simplement
PoM_- Posté 8 Juillet 2005 Posté 8 Juillet 2005 Pourquoi n'utilises tu pas les sessions ? C'est facile et efficace.. Comme ca tu n'auras plus de probleme avectes refresh.. non ?
Compte supprimé Posté 8 Juillet 2005 Posté 8 Juillet 2005 Et bien le problème vient du refresh de la page qui n'est pas très ergonomique, tout simplement <{POST_SNAPBACK}> Pourquoi diable est-ce que tu n'utilise pas ma méthode ? (ou alors je ne comprends rien)
PoM_- Posté 8 Juillet 2005 Posté 8 Juillet 2005 mdr .. je crain ne pas comprendre non plus son probleme on lui a donné toutes les solutions possibles, les codes, il a plus qu'a faire copier/coller lol
MarvinLeRouge Posté 8 Juillet 2005 Auteur Posté 8 Juillet 2005 Bon ben moi j'vais vous laisser vous battre, et je vous dirais ce que donne mon idée tordue dès que je l'aurais testée. Et encore merci pour toutes ces options
lupucide Posté 8 Juillet 2005 Posté 8 Juillet 2005 (modifié) mdr .. je crain ne pas comprendre non plus son probleme on lui a donné toutes les solutions possibles, les codes, il a plus qu'a faire copier/coller lol <{POST_SNAPBACK}> mdr aussi alors, sans vouloir vexer quelqu'un vos méthodes ne sont pas très explicites Ce sont mes données POST qui sont traités pour être réaffichées sur la même page, une redirection perd ces données. A moins que j'ai mal suivi, auquel cas je m'excuse humblement Modifié 8 Juillet 2005 par lupucide
lupucide Posté 18 Juillet 2005 Posté 18 Juillet 2005 (modifié) Hop, un double post pour la bonne cause et pour m'excuser de ma mauvaise foi J'ai donc tester la méthode avec l'ouverture d'une session en deux pages, formulaire et traitement ; j'arrive désormais à faire passer mes données de l'une à l'autre. Merci de vos conseils. Modifié 18 Juillet 2005 par lupucide
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant