Aller au contenu

Éviter le double post


e.MiLoU

Sujets conseillés

Bonjour,

Je voudrais connaître le moyen qui est utilisé pour éviter le double post... J'entends pas là que lorsque quelqu'un a ajouté un message et puis qu'il rafraichit la page, les données sont de nouveau envoyées...

Commet faire pour éviter cela??

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Il faut faire une redirection vers une autre page dès que tu as traité le formulaire.

Perso tous mes formulaires sont construits pareil :

<?php
if (isset($_POST[form]))
{
... traitement
... redirection vers la même page
}
?>
... formulaire html qui pointe sur la même page

Avantages :

- si le formulaire n'a pas été rempli corrrectement, les variables sont disponibles pour les réaficher dans les champs.

- une page formulaire/traitement (plus simple à maintenir).

- refresh inactif.

a+

Lien vers le commentaire
Partager sur d’autres sites

Ca ne fonctionne pas... Une fois mon formulaire envoyé et ma redirection faite du type:

header(location: http://...)

si j'appuye sur rafraichir, il m'ajoute de nouveau mon entrée... Je crois que le problème vient de ma direction. Laquelle utilises-tu??

Merci

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Ca ne fonctionne pas... Une fois mon formulaire envoyé et ma redirection faite du type:

header(location: http://...)

si j'appuye sur rafraichir, il m'ajoute de nouveau mon entrée... Je crois que le problème vient de ma direction. Laquelle utilises-tu??

Si, lorsque tu rafraichis ca rajoute une entrée, cela veut dire que tu est encore sur la page qui enregistre dans la base de données. (tu m'arrète si je me trompe :) )

Or, la solution proposée par Jeroen consiste à rediriger (après l'enregistrement) sur une une page différente, ne contenant pas le script d'enregistrement.

Dans les grandes lignes tu dois avoir :

une page contenant ton formulaire (par exemple : formulaire.php) qui lors de la soumission envoi sur un script d'enregistrement (record.php). Lequel script, redirige vers une page de confirmation : "l'enregistrement s'est bien passé" (confirmation.php).

Lien vers le commentaire
Partager sur d’autres sites

En fait, le but, c'est que après la redirection, il ne renvoie plus les POST... Mais c'est un problème... Parce que ça ne fonctionne pas. (Ou alors, j'ai pas tout compris...)

Je vais attendre la réponse de Jeroen pour voir quelle redirection il utilise, aussinon, je fais comme tu as dit :D.

EDIT: Je crois que je vais faire comme tu as dit, ça marche impec :D

Modifié par e.MiLoU
Lien vers le commentaire
Partager sur d’autres sites

Salut,

Pourquoi rediriger ?

Perso je vide l'ensemble des variables utilisées après l'envoi du mail et donc compte-tenu du test qui est fait en amont sur la validité des champs, çà ne peut pas repartir.

Lien vers le commentaire
Partager sur d’autres sites

Je renvoie bien sur la même page via un header en php

header ("location:mapage.html");
exit;

Et je t'affirme que ça marche nickel.

<{POST_SNAPBACK}>

Au temps pour moi :wacko: ... Je confirme que cette méthode marche aussi

Lien vers le commentaire
Partager sur d’autres sites

  • 3 months later...

Je fais remonter ce post.

C'est pour dire que ça marche tellement bien chez moi que non seulement le flood n'est plus possible, mais poster un message normalement ne l'est plus aussi.

J'ai du faire un erreur quelquepart... :huh:

Enfin normal quoi, je suis encore débutant.

Voilà mon code :

<? if (isset($_POST[form])) // c'est à cause du form hein ? je le remplace par quoi ?
{
if (isset($_POST['pseudo']) AND isset($_POST['message'])) // Si les variables existent
{
       if ($_POST['pseudo'] != NULL AND $_POST['message'] != NULL) // Si on a vraiment quelque chose à enregistrer
       {
       mysql_connect("localhost", "base", "mdp");
       mysql_select_db("base");
   
       $message = htmlentities ($_POST['message']);
       $pseudo = htmlentities ($_POST['pseudo']);
 $ip = $_SERVER['REMOTE_ADDR'];
 $timestamp = time();
   
       mysql_query("INSERT INTO minichat VALUES('', '$pseudo', '$message' , '$ip', '$timestamp')");
   
       mysql_close();
       }
}

header ("location: http://.../8.php");
exit;

}

Voilà, si vous trouvez quelquechose, moi je comprend pas trop le principe de l'anti-flood que j'ai intégré, c'est surement pour ça...

Lien vers le commentaire
Partager sur d’autres sites

Trés compiqué tout ça...

Si les variables existent

attention a ne pas confondre "existent" et "non nulles"

a partir du mement ou tu soumet, les variables sont renvoyées, donc elles existent.

Pour tester le non nul, il faut faire utiliser la fonction empty();

ferais donc ça :

if (isset($_POST['pseudo'])) // défini quand le formulaire est soumis, même s'il est nul
{
if (!empty($_POST['pseudo']) AND !empty($_POST['message'])) // Si les variables existent
{... je traite...+redirection}
else {...gestion du message d'alerte...}
}
...affichage du formulaire

Lien vers le commentaire
Partager sur d’autres sites

Trés compiqué tout ça...

attention a ne pas confondre "existent" et "non nulles"

a partir du mement ou tu soumet, les variables sont renvoyées, donc elles existent.

...

<{POST_SNAPBACK}>

Je mettrais un très léger bémol : certains types de champs ne sont pas nécessairement envoyés lors de la soumission d'un formulaire : les checkbox. S'ils ne sont pas cochés, ils ne sont pas envoyés.

Lien vers le commentaire
Partager sur d’autres sites

  • 4 months later...

Tout marche nickel, mon seul problème est que je n'arrive pas a afficher un message de confirmation de la réussite de l'ajout d'info dans BD sur la même page que le formulaire. C'est normal puisque les variables sont réinitialisées par la redirection sur la même page. Mais comment faire alors ??

------------------------

Désolé trompé de bouton...

Modifié par etouelle
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...