IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Mail] Eviter de reposter après un refresh


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 16
    Points : 16
    Points
    16
    Par défaut [Mail] Eviter de reposter après un refresh
    Bonjour!

    Pour faire simple j'ai un formulaire de départ simple pour envoyer un mail, qui se rappel lui même:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <form action="mail.php" method="post">
    <input type="text" name="email" size="100"/>
    <input type="submit" name="Go" value="Envoyer" />
    </form>
    <?php
    if(isset($_POST['Go'])){
    mail($_POST['email'], $mailSubject, $mailBody, $mailHeaders);
    }
    ?>
    Ca marche bien mais ce qui me dérange, c'est que si l'utilisateur rafraichit, ca renvoit le mail... ce que je ne souhaite pas.

    Comment empêcher ca?

    Merci d'avance

  2. #2
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    salut
    tu pourrais par exemple cacher le bouton Envoyer après le clic! (en JS avec l'évènement OnClick! mais je ne sais pas comment on fait exactement )je crois que c'est ce qui est fait ici!

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    alors appel une autre page apres envoie du mail. on peut pas empecher l'utilisateur de faire ce qui veux. :o

  4. #4
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    tu peux très bien générer un id automatique que tu stock dans un champ caché dans ton formulaire
    cet id est mit en session au chargement de la page

    cet id est regénéré à chaque chargement de la page.

    donc au début id = 5 par exemple
    tu envois ton message, tu vérifie que l'id du form (ds le champs hidden) esty égal à l'id en session

    ensuite ça load la page et du coup l'id est regéneré mais pas la session

    donc le mec aura beau faire F5 bah il ne pourra pas reposter

    je ne sais pas si j'ai bien expliqué :$

    att 2 min je vais voir si je peux récuperer ma source

  5. #5
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 281
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 281
    Points : 1 999
    Points
    1 999
    Par défaut
    Utilise une variable de session.

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Moui je me doutais qu'on pouvais pas empecher l'utilisateur de rafraichir mais je me demandais s'il existais pas une variable qui indique qu'il s'agisse d'un rafraichissement... j'aurais du coup fait quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isset($_POST['Go']) && !is_refresh()){ 
    mail($_POST['email'], $mailSubject, $mailBody, $mailHeaders); 
    }
    Mais je vais surement pencher pour la possibilité d'appeller une autre page...

    Merci!

  7. #7
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    reeee

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    //Système  anti-flood.  
    		//Si le jeton présent dans le formulaire est égal à celui en session,
    		//On crée un nouveau jeton aléatoirement (mt_rand()) donc sa valeur va dans le form
    		//et on ne peux plus utiliser F5 pour reposter.
    		if($_SESSION['jeton']==$_POST['jeton'])
    		{
    			$jeton=md5(uniqid(mt_rand(), true));
    			$nom=$_POST['txtNom'];
    			$nom=mysql_real_escape_string($nom);
    			$msg=$_POST['txtMsg'];
    			$msg=mysql_real_escape_string($msg);
     
    			$DateEnvoiMysql=Date("Y-m-d H:i:s");
     
    			$reqInsert="INSERT INTO  livreor (id, nom , msg , date) VALUES ('', '$nom', '$msg', '$DateEnvoiMysql')"; 
    			$reqInsert=mysql_query($reqInsert) or die (mysql_error());
    			echo "<br>Message post&eacute; !<br>";
    		}
    	}
    	else
    	{
    		$jeton=md5(uniqid(mt_rand(), true));
    		$_SESSION['jeton']=$jeton;
    	?>
    </p>
    	  <form action=livreor.php method=post name="formulaire" id="formulaire">
            <table width="80%" align="center">
              <tr>
                <td width="209" valign="top"><strong>Nom :</strong></td>
                <td width="421"><input name=txtNom type=text id="txtNom2" size=30 >
                </td>
              </tr>
              <tr>
                <td valign="top"><strong>Message : <br>
                      <br>
                      <input name="jeton" type="hidden" id="jeton" value="<? echo $jeton; ?>">
                </strong></td>
                <td>
                  <textarea name=txtMsg cols=35 rows=4 id="txtMsg"></textarea>
                </td>
              </tr>
            </table>
            <div align="center"><br>
                <input name="VarEnvoi" type="hidden" id="VarEnvoi" value="envoi" size="10" maxlength="10" readonly>
                <input type="submit" name="Submit" value="Envoyer">
            </div>
            <div align="center"></div>
        </form>
    Bon je te laisse faire le tri mais tout est là normalement

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Nos réponses se sont croisées. J'étudie la possibilité d'une variable cachée et d'une variable de session. Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. eviter un doublon dans la bdd aprés un refresh
    Par arckaniann dans le forum Langage
    Réponses: 3
    Dernier message: 03/10/2013, 17h47
  2. Afficher une autre image apres un refresh
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/06/2007, 08h45
  3. Réponses: 9
    Dernier message: 03/11/2006, 10h30
  4. Erreur 'EOleException' après un refresh
    Par Marcant dans le forum Bases de données
    Réponses: 5
    Dernier message: 01/06/2006, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo