Double mail de confirmation

Résolu
R0M1 -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis en train de faire un site web et j'ai fait une A2F mais lorsque je tape le code envoyer par mail dans le input(qui se trouve dans un form), la page s'actualise et le mail est envoyé une deuxième fois.

Merci d'avance.

Si vous voulez le code dite le moi.
A voir également:

5 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, donne-nous plus d'information si tu souhaites que nous t'aidions.
veux-tu éviter que la page s'actualise?
0
R0M1_07 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Oui pour éviter le double message, que voulez comme info ? le code ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
plus tu donnes d'information, mieux nous pourrons t'aider.
0
R0M1_07 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Bah le code c'est tout ce que j'ai :

<?php
session_start();

if (!isset($_SESSION['maillogin'])) {
 ?>
  <!DOCTYPE html>
  <html>
  <head>
   <title>Erreur</title>
   <meta charset="utf-8">
  </head>
  <body>
   <p>Une erreur est survenue, votre mail n'a pas été retenu ! Vous devez donc créer un nouveau compte ! (Si l'inscription est impossible veuillez ressayer dans 24 heures)</p><a href="../">S'inscrire</a>
  </body>
  </html>
 <?php
}else{

$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
 $requser = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
  $requser->execute(array($_SESSION['maillogin']));
  $userexist = $requser->rowCount();
  if($userexist == 1){
   $userinfo = $requser->fetch();
   $_SESSION['id'] = $userinfo['id'];
   $_SESSION['mail'] = $userinfo['mail'];
   $_SESSION['confirme'] = $userinfo['confirme'];
   $_SESSION['key'] = $userinfo['confirmkey'];
  }else{
   echo "Hum.. Je pense qu'il y a eu un bug, c'est impossible que 2 utilisateurs ont le même mail !";
  }
   

 if(isset($_SESSION['confirme']) AND $_SESSION['confirme'] == 0){
 
     ini_set( 'display_errors', 1 );
  
     error_reporting( E_ALL );
  
     $from = "r0m1.seb@free.fr";
  
     $to = $_SESSION['maillogin'];
  
     $subject = "A2F MyVideo";
  
     $message = "Le code A2F : " . $_SESSION['key'] . " Nous avons un petit probleme que nous n'arrivons pas a resoudre, c'est que lorsque vous entrerez ce code dans le site, un deuxieme message vous sera envoye qui est un double de celui ci.";
  
     $headers = "From:" . $from;
  
     mail($to,$subject,$message, $headers);
  
     echo "L'email a été envoyé.";

     ?>

     <!DOCTYPE html>
     <html>
     <head>
      <title>A2F</title>
      <meta charset="utf-8">
     </head>
     <body>
      <form method="POST">
      <label for="a2f">Un mail de confirmation viens d'être envoyé à cette adresse : <?php echo $_SESSION['maillogin'] ?> !</label>
      <input type="text" name="a2f" id="a2f">
      <input type="submit" name="a2fconfirm" id="a2fconfirm" value="Confirmer">
      <p>Si vous fermer cette page ou si vous ne confirmez pas votre mail sous 24 heures, le compte sera supprimé !</p>
      </form>
     </body>
     </html>

     <?php

  

     if(isset($_POST['a2fconfirm'])){
      $a2f2 = htmlspecialchars($_POST['a2f']);
      if($a2f2 == $_SESSION['key']){
       $updateuser = $bdd->prepare('UPDATE membres SET confirme = "1" WHERE id = :id');
    $updateuser->execute(array(
                'id' => $_SESSION['id']
                ));
    unset($_POST['a2fconfirm']);
    echo "Votre compte viens d'être confirmé à l'instant !<br>Vous serez redirigez vers la page de connection dans 10 secondes !";
    header("Location: ../../signin/");
    exit();
      }else{
       echo "Le clé d'authentification et le code envoyé par mail ne corresponde pas !";
      }
  }

 }else{
  echo "Votre compte est déjà confirmé<br>Redirection vers le profil dans 10 secondes";
  sleep(10);
  header("Location: ../../profil.php?id=" . $_SESSION['id']);
 }
}
?>
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
tu peux aussi expliquer ce que fait et ce que voit l'utilisateur du site.
0
R0M1_07 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Alors, lorsque on arrive sur cette page on a directement un mail d'envoyé ensuite, on entre le code dans le input puis le php virifie si les 2 codes sont pareil et ensuite on update le membres en le mettant en confirme 1 au lieu de 0 et c'est tout
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
"et c'est tout", donc il n'y a qu'un seul mail d'envoyé?
décris, étape par étape, ce que fait l'utilisateur, ce qui est affiché sur l'écran, et le contenu des deux mails.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

D'après ce que je comprends... ton souci se situe sur le IF de ton envoi de mail
Au lieu de
 if(isset($_SESSION['confirme']) AND $_SESSION['confirme'] == 0){


Il faudrait vérifier que tu ne "submit" pas ton formulaire :
 if( !isset($_POST['a2fconfirm']) && isset($_SESSION['confirme']) && $_SESSION['confirme'] == 0){


Et comme te l'a suggéré Yg_be, appliques les conseils donnés ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ca rendra ton code plus lisible et plus facilement maintenable.


0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
je suis aussi étonné de voir
echo
suivi de
header
.
0