Aller au contenu

Traitement de formulaire


MarvinLeRouge

Sujets conseillés

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:

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

:)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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>

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines plus tard...

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
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



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