Aller au contenu

Sujets conseillés

Posté

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 :blush:

Posté (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é par MarvinLeRouge
Posté

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é

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

:)

Posté
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 ??

Posté (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é par lupucide
Posté

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.

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

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

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

Posté

Je n'ai qu'une redirection. Mais bon apres tout chaqun ca methode :P ! 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é
Je n'ai qu'une redirection. Mais bon apres tout chaqun ca methode :P ! 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 formulaire
if (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>

Posté

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

B) 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 :wacko::fou:

Ceci dit, ça devrair marcher, non ?

(Pfft : bruit de claquage des liaisons dendritiques, avec étrange odeur de caramel)

Posté
<?php
// traitement du formulaire
if (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 :P ( 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 formulaire
if (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.. :P

Posté (modifié)

Je repose ma question car il me semble qu'elle n'a pas été bien comprise :whistling:

Imaginons ma page (écrite vite fait, pour l'exemple) :

<?php
if (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é par lupucide
Posté

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

Posté

Pourquoi n'utilises tu pas les sessions ? C'est facile et efficace.. Comme ca tu n'auras plus de probleme avectes refresh.. non ?

Posté

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é

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 :D

Posté (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 :P

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 :hypocrite:

Modifié par lupucide
  • 2 semaines plus tard...
Posté (modifié)

Hop, un double post pour la bonne cause et pour m'excuser de ma mauvaise foi :whistling:

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é par lupucide

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...