Problème envoie de mail / confirmation par mail

Par raphael-2228 le 12 Février 2020 à 22:16 (Édité) 40 +99

[Résolu]Bonjour, je suis entrain de coder, recoder et ainsi de suite un site pour cela je m'aide des article déjà présent sur ce site et les adaptent selon mon besoin seulement tout marche parfaitement pour instant sauf que j'arrive vers article Valider son compte avec un mail. Je fais comme se qui et montré je recharge la page et la sa me mais HTTP ERROR 500

sans aucune explication ou autre du coup je supprime mon fichier je télécharge la source je modifie juste 2/3 information mais rien y fait toujours le même


ps: je tien à préciser je fait tout via mon hébergeur qui propose lui un gestionnaire de fichier + éditeur de code.

ps 2: j'ai créer un fichier .htaccess avec ce code

ps 3: c'est mon premier topic que je créer donc je sais pas trop comment procéder pour expliquer mon problèmes


Fichier .htaccess


# On autorise de renommer les pages
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
# On peut enlever le .php et renommer les pages comme on le souhaite
RewriteRule ^([^\.]+)$ $1.php [L]


Qui me permet de retirer les extension style .php


Page register.php



<?php
    session_start();


    include('config/configDB.php'); // Fichier PHP contenant la connexion à votre BDD


    // S'il y a une session alors on ne retourne plus sur cette page
    if (isset($_SESSION['id'])){
        header('Location: index'); 
        exit;
    }


    // Si la variable "$_Post" contient des informations alors on les traitres
    if(!empty($_POST)){
        extract($_POST);
        $valid = true;


        // On se place sur le bon formulaire grâce au "name" de la balise "input"
        if (isset($_POST['forget'])){


			$pseudo  = htmlentities(trim($pseudo)); // On récupère le nom
            $nom  = htmlentities(trim($nom)); // On récupère le nom
            $prenom = htmlentities(trim($prenom)); // on récupère le prénom
            $mail = htmlentities(strtolower(trim($mail))); // On récupère le mail
            $mdp = trim($mdp); // On récupère le mot de passe 
            $confmdp = trim($confmdp); //  On récupère la confirmation du mot de passe


			//  Vérification du pseudo
            if(empty($pseudo)){
                $valid = false;
                $er_nom = ("Le nom d' utilisateur ne peut pas être vide");
            }
			
            //  Vérification du nom
            if(empty($nom)){
                $valid = false;
                $er_nom = ("Le nom d' utilisateur ne peut pas être vide");
            }       


            //  Vérification du prénom
            if(empty($prenom)){
                $valid = false;
                $er_prenom = ("Le prenom d' utilisateur ne peut pas être vide");
            }       


            // Vérification du mail
            if(empty($mail)){
                $valid = false;
                $er_mail = "Le mail ne peut pas être vide";


                // On vérifit que le mail est dans le bon format
            }elseif(!preg_match("/^[a-z0-9\-_.]+@[a-z]+\.[a-z]{2,3}$/i", $mail)){
                $valid = false;
                $er_mail = "Le mail n'est pas valide";


            }else{
                // On vérifit que le mail est disponible
                $req_mail = $DB->query("SELECT mail FROM utilisateur WHERE mail = ?",
                    array($mail));


                $req_mail = $req_mail->fetch();


                if ($req_mail['mail'] <> ""){
                    $valid = false;
                    $er_mail = "Ce mail existe déjà";
                }
            }


            // Vérification du mot de passe
            if(empty($mdp)) {
                $valid = false;
                $er_mdp = "Le mot de passe ne peut pas être vide";


            }elseif($mdp != $confmdp){
                $valid = false;
                $er_mdp = "La confirmation du mot de passe ne correspond pas";
            }


            // Si toutes les conditions sont remplies alors on fait le traitement
            if($valid){


                $mdp = crypt($mdp, "$6$rounds=5000$5c724e4558753c343a335d43635c7e24$");


                $date_creation_compte = date('Y-m-d H:i:s');


                $token = bin2hex(random_bytes(12));




                // On insert nos données dans la table utilisateur
                $DB->insert("INSERT INTO utilisateur (pseudo, nom, prenom, mail, mdp, date_creation_compte, token) 
                    VALUES 
                    (?, ?, ?, ?, ?, ?)", 
                    array($pseudo, $nom, $prenom, $mail, $mdp, $date_creation_compte, $token));


                $req = $DB->query("SELECT *
                  FROM utilisateur
                  WHERE mail = ?",
                  array($mail));
                  
                $req = $req->fetch();
                 
                $mail_to = $req['mail']; 
                 
                //=====Création du header de l'e-mail.
                $header = "From: no-reply <no-reply@wolfteam.fr>\n";
                $header .= "MIME-version: 1.0\n";
                $header .= "Content-type: text/html; charset=utf-8\n";
                $header .= "Content-Transfer-ncoding: 8bit";
                //=======
                 
                //=====Ajout du message au format HTML          
                $contenu = '<p>Bonjour ' . $req['nom'] . ',</p><br>
                   <p>Veuillez confirmer votre compte <a href="https://wolfteam.fr/conf.php?id=' . $req['id'] . '&token=' . $token . '">Valider</a><p>';
                                    
                mail($mail_to, 'Confirmation de votre compte', $contenu, $header);




                header('Location: index');
                exit;
            }
        }
    }
?>
<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Inscription</title>
    </head>


    <body>      
        <div>Inscription</div>
        <form method="post">


			<?php
                // S'il y a une erreur sur le nom alors on affiche
                if (isset($er_pseudo)){
                ?>
                    <div><?= $er_pseudo ?></div>
                <?php   
                }
            ?>
            <input type="text" placeholder="Votre pseudo" name="pseudo" value="<?php if(isset($pseudo)){ echo $pseudo; }?>" required>
			
            <?php
                // S'il y a une erreur sur le nom alors on affiche
                if (isset($er_nom)){
                ?>
                    <div><?= $er_nom ?></div>
                <?php   
                }
            ?>
            <input type="text" placeholder="Votre nom" name="nom" value="<?php if(isset($nom)){ echo $nom; }?>" required>   


            <?php
                if (isset($er_prenom)){
                ?>
                    <div><?= $er_prenom ?></div>
                <?php   
                }
            ?>
            <input type="text" placeholder="Votre prénom" name="prenom" value="<?php if(isset($prenom)){ echo $prenom; }?>" required>   


            <?php
                if (isset($er_mail)){
                ?>
                    <div><?= $er_mail ?></div>
                <?php   
                }
            ?>
            <input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required>


            <?php
                if (isset($er_mdp)){
                ?>
                    <div><?= $er_mdp ?></div>
                <?php   
                }
            ?>
            <input type="password" placeholder="Mot de passe" name="mdp" value="<?php if(isset($mdp)){ echo $mdp; }?>" required>
            <input type="password" placeholder="Confirmer le mot de passe" name="confmdp" required>


                <button type="submit" name="forget">Envoyer</button>


        </form>
    </body>
</html>


Page conf.php


<?php
  session_start();
  require('config/configDB.php');
 
 
  if (isset($_SESSION['id'])){
    header('Location: index.php');
    exit;
  }
 
 
  $id = (int) $_GET['id'];
  $token = (String) htmlentities($_GET['token']);
  
  if(!isset($id)){
    $err_mess = "Le lien est erroné";
 
 
  }elseif(!isset($token)){
    $err_mess = "Le lien est erroné";
  }
 
 
  if(true){
    $req = $DB->query("SELECT id 
      FROM utilisateur WHERE id = ? AND token = ?",
      array($id, $token));
 
 
    $req = $req->fetch();
 
 
    if(!isset($req['id'])){
      $err_mess = "Le lien n'est plus valide";
    }else{
      $DB->insert("UPDATE utilisateur SET token = NULL, confirmation_token = ? WHERE id = ?",
      array(date('Y-m-d H:i:s'), $req['id']));
 
 
      $info_mess = "Votre compte a bien été validé";
    }
  }
 
 
  if(isset($err_mess)){
    echo $err_mess;
  }
 
 
  if(isset($info_mess)){
    echo $info_mess;
  }
  
  ?>
<!DOCTYPE html>
<html>
  <head>
    <title>Validation mail</title>
  </head>
  <body>
    <a href="index">Accueil</a>
  </body>
</html>


Cette pub permet au site de vivre ...

40 commentaires

Tu veux participer ?
Alors connecte toi ou inscris toi et viens participer !

Re: @Jerem971


se que je voulais dire par manuellement c'est rentrée le lien(tout en mettant les bonne information) que les utilisateur sont censé cliqué sur le mail afin de confirmer le compte


ce lien plus précisément :

  

<p>Veuillez confirmer votre compte <a href="https://monadress/conf?id=' . $req['id'] . '&token='      . $token . '">Valider</a><p>';

Re:


@raphael-2228, que veux-tu dire par "manuellement" ? 🤔

Je vient de tester la confirmation email manuellement et elle marche parfaitement j'ai du comprendre un peut sont fonctionnement pour faire sa sinon je reçois toujours pas le mail j'ai essayer de remplacer la variable  $mail_to par ma propre email mais sa change rien du tout

Bonjour @Clouder, j'avez déjà tester et retester  regarde plus bas dans la conversation et cela marcher bien j'ai suivi ton Tuto sur la modification mot de passe marche parfaitement le Tuto pour la page de contact aussi c'est le seul Tuto que ta pas fait en vidéo (coincidence je pense pas) qui marche pas ou du moins reçois aucun mail j'avez essayer de mettre un echo au niveau du mail() sauf que à chaque sa mettait Erreur http 500

@raphael-2228, super !


Pour ton dernier problème celui de l'envoi de ton mail essaie de partir d'une page vierge et tu mets uniquement la fonction mail de php avec comme objet et message "test" et comme destinataire ton mail.

Ok merci tout mes problème sont résolu hormis en ce qui concerne la confirmation par mail/envoie

donc je pense pouvoir m'être en résolu

@raphael-2228,


Pour mettre les dates en français je fais comme ça :


<?php
setlocale(LC_TIME, "fr_FR.UTF-8");
					
$date_du_jour = strftime("%d", strtotime($req['ma_date'])) . ' ' . ucfirst(strftime("%B", strtotime($req['ma_date']))) . '  ' . strftime("%Y à %H:%M", strtotime($req['ma_date']));


N'hésite pas à regarder ce qu'offre la fonction strftime


Et une autre comment faire pour que sa récupère que les 4 derniers articles car pour instant sa m'affiche tout


Pour afficher un nombre connu d'enregistrement tu dois utiliser l'instruction LIMIT en SQL


Exemple :


SELECT *
FROM utilisateur 
WHERE age > 18
LIMIT 4


Avec la requête au-dessus tu afficheras 4 enregistrements au maximum.

Ok merci

j'ai juste une petite une petite question un peux bête pour toi je pense @Clouder

comment faire pour afficher la date en français au lieu de anglais car j'ai voulu reprendre le meme principe que toi sur la page index afficher les derniers article sauf que la date et en anglais de style Mon 10 Feb 2020 à 11:28 hors moi je veut que sa fasse Lun 10 Fev 2020 ou Lundi 10 Février 2020

Et une autre comment faire pour que sa récupère que les 4 derniers articles car pour instant sa m'affiche tout


voila mon code :


<?php
    session_start(); // Permet de savoir s'il y a une session. C'est ? dire si un utilisateur c'est connect? ? votre site.


    include('config/configDB.php'); // Fichier PHP contenant la connexion ? votre BDD
    include('header.php');
    include('navbar.php');




  	// S'il n'y a pas de session alors on ne va pas sur cette page
  	//if(!isset($_SESSION['id'])){ 
    	//header('Location: maintenance'); 
    	//exit; 
  //}


      $req = $DB->query("SELECT b.*, u.prenom, u.nom, c.titre as titre_cat
        FROM blog b
        LEFT JOIN utilisateur u ON u.id = b.id_user
        LEFT JOIN categorie c ON c.id_categorie = b.id_categorie
        ORDER BY b.date_creation DESC");


    $req = $req->fetchAll();


?>
<html>
    <body>
        <div class="tp-sj-by-st">
            <div class="container">
                <div class="row">
                    <div class="col-xs-12 col-sm-12 col-md-12">
                        <h1 style="font-size: 2.4rem; font-weight: bold; margin: 0">
                            Nos derniers articles
                        </h1>
                    </div>
                </div>
            </div>
        </div>
        <div class="container">
            <div class="row">
                <div class="col-12 col-sm-12 col-md-12" style="margin-top: 20px">
                    <div class="row" style="margin-top: -80px">
                                                <div class="col-xs-12 col-sm-12 col-md-12">
                    <?php
                        foreach($req as $r){ 
                        ?>  
                            <a href="blog/<?= $r['id'] ?>">
                                <div class="ind-lg-by">
                                    <div style="position: absolute; left: -10px; top: 10px; right: 0">
                                        <span style="background: linear-gradient(45deg, #d5135a, #f05924); padding: 5px; color: white; border-radius: 5px">
<span style="font-weight: bold">
                                        </span><?= date_format(date_create($r['date_creation']), 'D d M Y à H:i'); ?>                                
                                    </div>
                                    <div style="padding: 10px 20px; margin: 40px 0 0 0;">
                                        <h1 style="font-size: 1.4rem">
                                            <?= $r['titre'] ?>                                    
                                        </h1>
                                        <h4 style="font-size: .6rem">Posté par <?= $r['prenom'] . " " . $r['nom'] ?> dans la catégorie <b><?= $r['titre_cat'] ?></b>
                                        </h4>
                                    </div>
                                </div>
                            <?php
                                }
                            ?>      
                            </a>
                        </div>  
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>
<?php
include('footer.php'); 
?>

@raphael-2228


J'ai modifié ta vrai clé par macle par contre dans ton fichier forget.php tu as oublié de mettre ceci devant ta clé :


$6$rounds=5000$


Du coup la génération du mot de passe est différente de celui de ton inscription

Bonjout @Clouder,


Le mot de Passe et Bien crypté dans la Bdd


et je pense bien utilisé la même voyez par vous meme


forget.php


<?php
    session_start();

    ini_set('display_errors',1);
    error_reporting (E_ALL ^ E_NOTICE);

    include('config/configDB.php');
    include('header.php');
    include('navbar.php');

    if (isset($_SESSION['id'])){
        header('Location: home');
        exit;
    }

    if(!empty($_POST)){
        extract($_POST);
        $valid = true;

        if (isset($_POST['forget'])){
            $mail = htmlentities(strtolower(trim($mail))); // On récupère le mail afin d envoyer le mail pour la récupèration du mot de passe 
            // Si le mail est vide alors on ne traite pas
            if(empty($mail)){
                $valid = false;
                $er_mail = "Il faut mettre un mail";
            }

            if($valid){
                $verification_mail = $DB->query("SELECT pseudo, nom, prenom, mail, n_mdp, pseudo
                    FROM utilisateur WHERE mail = ?",
                    array($mail));

                $verification_mail = $verification_mail->fetch();

                if(isset($verification_mail['mail'])){
                    if($verification_mail['n_mdp'] == 0){
                        // On génère un mot de passe à l'aide de la fonction RAND de PHP
                        $new_pass = rand();

                        // Le mieux serait de générer un nombre aléatoire entre 7 et 10 caractères (Lettres et chiffres)
                        $new_pass_crypt = crypt($new_pass, "macle");

                        $subject = 'Nouveau mot de passe';
                        $to = $verification_mail['mail'];

                        //===== Création du header du mail.
                        $header = "From: no-reply@wolfteam.fr \n";
                        $header .= "Reply-To: ".$to."\n";
                        $header .= "MIME-version: 1.0\n";
                        $header .= "Content-type: text/html; charset=utf-8\n";
                        $header .= "Content-Transfer-Encoding: 8bit";

                        //===== Contenu de votre message
                        $message =  "<html>".
                            "<body>".
                            "<p style='text-align: center; font-size: 18px'><b>Bonjour".$verification_mail['pseudo']."</b>,</p><br/>".
                            "<p style='text-align: justify'><i><b>Nouveau mot de passe : </b></i>".$new_pass."</p><br/>".
                            "</body>".
                            "</html>";

                        //===== Envoi du mail
                        mail($to, $subject, $message, $header);

                        $DB->insert("UPDATE utilisateur SET mdp = ?, n_mdp = 1 WHERE mail = ?", 
                            array($new_pass_crypt, $verification_mail['mail']));
                    }   
                }       
                header('Location: login');
                exit;
            }
        }
    }
?>


login.php


<?php
    ini_set('display_errors',1);
    error_reporting(E_ALL);

    session_start();

    include('config/configDB.php'); // Fichier PHP contenant la connexion à votre BDD
	include('header.php');
	include('navbar.php');

  // S'il y a une session alors on ne retourne plus sur cette page  
    if (isset($_SESSION['id'])){
        header('Location: /');
        exit;
    }

    // Si la variable "$_Post" contient des informations alors on les traitres
    if(!empty($_POST)){
        extract($_POST);
        $valid = true;

        if (isset($_POST['signin'])){

            $mail = htmlentities(strtolower(trim($mail)));
            $mdp = trim($mdp);

            if(empty($mail)){ // Vérification qu'il y est bien un mail de renseign?
                $valid = false;
                $er_mail = "Il faut mettre un mail";
            }

            if(empty($mdp)){ // Vérification qu'il y est bien un mot de passe de renseign?
                $valid = false;
                $er_mdp = "Il faut mettre un mot de passe";
            }

            // On fait une requ?te pour savoir si le couple mail / mot de passe existe bien car le mail est unique !
            $req = $DB->query("SELECT * 
                FROM utilisateur 
                WHERE mail = ? AND mdp = ?",
                array($mail, crypt($mdp, "macle")));

            $req = $req->fetch();

            // Si on a pas de résultat alors c'est qu'il n'y a pas d'utilisateur correspondant au couple mail / mot de passe
            if (!isset($req['id'])){
                $valid = false;
                $er_mail = "Le mail ou le mot de passe est incorrecte";
            }

            if ($valid){

            if(isset($_POST['remember'])) {
                setcookie('email',$mail,time()+365*24*3600,null,null,false,true);
                setcookie('mdp',$mdp,time()+365*24*3600,null,null,false,true);
            }
                $_SESSION['id'] = $req['id']; // id de l'utilisateur unique pour les requétes futures
				$_SESSION['pseudo'] = $req['pseudo'];
                $_SESSION['nom'] = $req['nom'];
                $_SESSION['prenom'] = $req['prenom'];
                $_SESSION['mail'] = $req['mail'];
                $_SESSION['avatar'] = $req['avatar'];

                header('Location:  /');
                exit;
            }   
        }
    }
?>
Cette pub permet au site de vivre ...