bonjour à tous ,

Je suis en train de suivre le tuto sur la gestion d'un espace membre et je rencontre un soucis au niveau du token.
En effet lorsque je clique sur activer votre compte depuis mon adresse mail ,je me retrouve sur ma page activate.php avec le message:mauvais token!!!
je vérifie dans la barre d'adresse et je compare le token avec celui de ma bdd et bizarrement ils sont identiques!

voici mon formulaire.php:

<?php
require_once'cnx.php';
?>
<?php
if(!empty($_POST) && strlen($_POST'signup'])>4 && filter_var($_POST'email'],FILTER_VALIDATE_EMAIL)){
    $prenom = addslashes($_POST'signup']);
    $email = addslashes($_POST'email']);
    $password = sha1($_POST'pwd']);
    $token = sha1(uniqid(rand()));

    $q = array('signup'=>$prenom, 'email'=>$email, 'pwd'=>$password, 'token'=>$token);
    $sql = 'INSERT INTO comptes_utilisateurs (Nom_Utilisateur, Mot_de_Passe, Adresse_Email, token) VALUES (:signup, :pwd, :email, :token)';
    $req = $cnx->prepare($sql);
    $req ->execute($q);
    $to = $email;
    $sujet = 'Activation de votre compte';
    $body ='Bonjour veuillez activer votre compte en cliquant ici -> <a href="http://localhost/site/activate.php?token='.$token.'&email='.$to.'">Activation du compte</a>';
     $entete ="MIME-Version: 1.0\r\n";
     $entete .="Content-type:text/html;charset=UTF-8\r\n";
     $entete .='From:Biblio®.com votre ' ."\r\n".
     'Reply-To: contact@biblio.com' ."\r\n".
     'X-Mailer:PHP/' .phpversion();
    mail($to,$sujet,$body,$entete);

    } else{
     if (!empty($_POST) && strlen($_POST'signup'])<4){
        $error_prenom = 'Votre prénom doit comporter au minimum 4 caractères!';
     }
    if (!empty($_POST) && !filter_var($_POST'email'],FILTER_VALIDATE_EMAIL)){
        $error_email = ' Votre Email n\'est pas valide!';
        }
        }
?>

Voici mon activate.php:

<?php require_once'cnx.php'; ?>
<?php
$token = $_GET'token'];
$email = $_GET'email'];
if(!empty($_GET)){
    $q = array('email' =>$email ,'token'=>$token);
    $sql ='SELECT email , token FROM users WHERE email = :email AND token = :token ';
    $req = $cnx ->prepare($sql);
    $req ->execute($q);
    $count = $req -> rowCount($sql);
    if($count ==1) {
        $v = array('email'=>$email , 'activer' =>'1') ;
        $sql ='SELECT email , activer FROM users WHERE email = :email AND activer = :activer';
        $req ->execute($v);
        $dejactif = $req -> rowCount($sql);
        if($dejactif == 1) {
        $error_actif = 'utilisateur deja actif';
        }else{
        $u = array('email'=>$email , 'activer'=>'1');
        $sql ='UPDATE users SET activer = :activer AND email = :email';
        $req = $cnx ->prepare($sql);
        $req ->execute($u);
        $activated = 'votre cmpte est desormais actif !';
        }
    }else{
        $prob_token = 'mauvais Token';
        }

        }

        ?>

Alors si un de vous pouvez tester ce script chez lui se serait sympa.
Peut être cela vient il aussi d'une simple faute de frappe.

Merci à vous et à bientôt

cordialement

3 réponses


dadada
Auteur
Réponse acceptée

bon je suis vraiment un boulet....

mon oublis était $req = $cnx ->prepare($sql); ligne 13

Fait la requete a la main dans la base pour voir

Bonjour,

A ce que je vois, ton soucis n'est pas obligatoirement du token mais peut venir de l'email aussi en gros le probleme c'est qu'il ne trouve aucun résultat pour ton select :

$sql ='SELECT email , token FROM users WHERE email = :email AND token = :token ';

Vérifie les variables que tu prend dans le get et comme dit Grafikart vérifie la requête dans phpmyadmin.

Cordialement