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] Empecher la répétition de "mail()" suite à F5


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Par défaut [Mail] Empecher la répétition de "mail()" suite à F5
    Bonjour,

    Suite à la validation d'un formulaire (page documentation.php), les données sont transmises à une page (mail.php) qui envoie un email et affiche un message.
    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
    <?php
    // Envoie de l'e-mail
    $destinataire = 'The Boss <boss@site.com>';
    $sujet = 'Demande d\'information';
    $header= 'From: expediteur@site.com';
     
    $result = mail($destinataire, $sujet, 'message', $header);
     
    if ($result === true)
    {
    ?>
    	<p class="mail">Votre demande a bien &eacute;t&eacute; transmise à la soci&eacute;t&eacute;. Merci.</p>
    <?php
    }
    else
    {
    ?>
    	<p class="mail">Pour des raisons techniques, l'envoi de votre demande n'a pas abouti.</p>
    <?php
    }
    ?>
    Seulement, si j'appuie sur F5, le mail est envoyé à nouveau.

    Je cherche donc une solution pour empêcher de renvoyer le mail sur une actualisation.

    Merci

    PS : le code ci-dessus est une version simplifiée de l'original. Je l'ai modifié ici même. Il se peut donc qu'il ne fonctionne pas tel quel. Mais l'original fonctionne très bien et le pb vient uniquement de la réactualisation.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    envoie l'email et fait une redirection vers une autre page de ton site

  3. #3
    Membre confirmé Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Par défaut
    Effectivement, c'est une solution.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Tu vérifies avant d'envoyer le mail si $_SESSION['mail_envoye']==1. Si oui => tu ne renvoies pas le mail ; sinon, tu envoies le mail et tu passes la variable à 1.

  5. #5
    Membre confirmé Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Par défaut
    Ah ! Ca, c'est une solution qui me plait

    Par contre, je n'ai encore jamais utilisé les sessions (ce sera une bonne occasion de commencer...)

    Tu pourrait me donner les grandes lignes ?

    EDIT : Là, je viens de tomber sur un cas qui peut poser pb : une personne vient d'utiliser le formulaire pour m'envoyer un mail. Mais elle s'est aperçu qu'elle avait fait une erreur, est revenue sur le formulaire, a fait des corrections et a renvoyé le mail. Dans ce cas, faudrait pas que je le bloque !

    Comment faire ?
    En initialisant la variable de session au moment du clic sur "envoyer" ? : peu probable car c'est coté client.
    En initialisant la variable à 0 si la page précédente (http_referer ou un truc du genre) est "documentation.php" ? : est-ce que "referer" devient "mail.php" lorsqu'on fait F5 ? Je ne crois pas

    Mais, bon, déjà empêcher le renvoi sur F5. Pour les cas particuliers, je verrais ensuite.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Par défaut
    Dans ta variable de session, au lieu de mettre 1 tu peut mettre time()
    et ds ton script tu regarde si la varaiable de session est diff de 0, ds ce cas, tu la compare avec le temps actuel, et si ya plus de mettons 15 seconde de difference tu envoi le mail. Si la difference est inferieur à 15 sec tu bloque lenvoi.

  7. #7
    Membre confirmé Avatar de Ricou13
    Inscrit en
    Août 2002
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 292
    Par défaut
    J'ai trouvé plus simple :

    Comme il faut forcement passer par le formulaire (documentation.php) pour accéder à la page qui envoi le mail (mail.php), je n'ai qu'à réinitialiser la variable à ce moment.

    Ainsi, si l'utilisateur repasse par le formulaire, c'est qu'il doit avoir une raison et donc je le laisse rémettre un email.

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

Discussions similaires

  1. [Postfix] : empecher root d'envoyer des mails
    Par aindoula dans le forum Réseau
    Réponses: 0
    Dernier message: 21/07/2009, 12h42

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