Jump to content
Sign in to follow this  
e.MiLoU

Éviter le double post

Rate this topic

Recommended Posts

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.

Share this post


Link to post
Share on other 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+

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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).

Share this post


Link to post
Share on other 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

Edited by e.MiLoU

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Tu vides ou tu supprimes les variables??

Comment peux-tu vider alors que c'est le Navigateur qui envoies les données? Peux-tu donner un exemple?

Edited by e.MiLoU

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

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

Edited by etouelle

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...