Bonjour,

J'ai une page d'enregistrement qui envoie un mail de confirmation.

Actuellement, tout se passe bien: lors de mes essaies, je m'enregistre, ca passe sur la bdd et le mail en html est envoyé sous cette forme:

[..]
Afin de confirmer votre inscription, je vous demanderais de bien vouloir cliquer sur ce lien: 
        > Confirmez votre inscription <
[..]

Seulement, le token n'est pas délivré dans mon lien: il reste tel que je l'ai écrit:

<a href= "http://localhost:8080/sitefamillehuvelledervogne%20-%20bootstrap/pages/confirm.php?id=$user_id&token=$token">
    <font color="#000000">Confirmez votre inscription</font></a>  
http://localhost:8080/sitefamillexx/pages/confirm.php?id=$user_id&token=$token

Je me suis basé sur les cours de Graf' "gestion d'un espace membre" qui note ceci:

    mail($_POST['email'], 'Confirmation de votre compte', "Afin de valider votre compte merci de cliquer sur ce lien\n\nhttp://local.dev/Lab/Comptes/confirm.php?id=$user_id&token=$token"

Normalement, le $user_id doit donner mon numéro de l'id et $token la suite de caractère "aléatoire", mais ça n'est pas le cas pour moi: il retranscrit tel quel...

QUelqu'un pourrait m'éguiller sur le pb svp?
Edit: petite précision, le $user_id et le $token ne changent pas de couleur chez moi...

7 réponses


Carouge10
Réponse acceptée

Bonsoir,
Pour le moment, tu peux commenter tes header() et ajouter des "echo 'je passe par là';" pour savoir où tu passes.

JeremieMeunier
Réponse acceptée
$pdo->prepare('UPDATE users SET confirmation_token = ?, confirmed_at = ? WHERE id = ?')->execute([NULL, time(), $user_id]);

Bonjour, as-tu essayer comme ceci ?

mail($_POST['email'], 'Confirmation de votre compte', "Afin de valider votre compte merci de cliquer sur ce lien\n\nhttp://local.dev/Lab/Comptes/confirm.php?id=".$user_id."&token=".$token
JoHuv
Auteur

Arf, le boulet... En effet, c'est bien ça:

    http://localhost:8080/sitefamillexxx/pages/confirm.php?id=24&token=K9wIz3zUUM96G7PGM5Xc8Mqe8fBmqJJR8UHhVEc2DnlXl15Lru8V9X0t5EqK

Par contre, je m'apperçois maintenant qu'en cliquant, je vais bien sur la page confirme mais redirigé sur la page de connexion comme le demande mon script. Ma bdd ne remplit rien. Celà ne confirme donc pas le compte...

<?php
$user_id = $_GET['id'];
$token = $_GET['token'];
require CORE.DS.'db.php';
$req = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$req->execute([$user_id]);
$user = $req->fetch();
session_start();

if($user && $user->confirmation_token == $token ){
$pdo->prepare('UPDATE users SET confirmation_token = NULL, confirmed_at = NOW() WHERE id = ?')->execute([$user_id]);
$_SESSION['flash']['success'] = 'Votre compte a bien été validé';
$_SESSION['auth'] = $user;
header('Location: http://localhost:8080/sitefamilleXXX/pages/account.php');
}else{
$_SESSION['flash']['danger'] = "Ce token n'est plus valide";
header('Location: http://localhost:8080/sitefamilleXXX');
}

Aurais-tu une piste à nouveau ? Merci pour ton aide.

Essais en ajoutant ceci ini_set('display_errors', 1); au début de ton script php, si jamais il y a une erreur avec ta requête, il te le dira.

JoHuv
Auteur
    <?php
ini_set('display_errors', 1);
$user_id = $_GET['id'];
$token = $_GET['token'];
require CORE.DS.'db.php';
$req = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$req->execute([$user_id]);
$user = $req->fetch();
session_start();

if($user && $user->confirmation_token == $token ){
$pdo->prepare('UPDATE users SET confirmation_token = NULL, confirmed_at = NOW() WHERE id = ?')->execute([$user_id]);
$_SESSION['flash']['success'] = 'Votre compte a bien été validé';
$_SESSION['auth'] = $user;
header('Location: http://localhost:8080/sitefamillexxx/pages/account.php');
}else{
$_SESSION['flash']['danger'] = "Ce token n'est plus valide";
header('Location: http://localhost:8080/sitefamillexxx');
}

Ajouté et... rien. il m'envoie simplement à la page d'accueil. Comme mes sessions flash ne sont pas visible (traitement trop rapide ?) je ne peux même pas savoir si c'est le token qui pêche...

JoHuv
Auteur

Merci messieurs... Mon bilan:
J'ai une erreur dans le lien:

<a href= "http://localhost:8080/sitefamilleXX/pages/confirm.**php**?id=$user_id&token=$token">
<font color="#000000">Confirmez votre inscription</font></a> "

"php" est en trop... du coup, ça n'allait pas sur la page confirm ;) Merci à Carouge10 pour m'avoir éguillé sur cette erreur.

Ensuite, je dois avoir une deuxième erreur: l'execution du script est telle que la confirmation_token se supprime, et que la date se met à 0000-00-00 00:00:00...

Edit:
J'ai modifié un peu et je touche au but:

if($user && $user->confirmation_token == $token ){
$pdo->prepare('UPDATE users SET remember_token = ?, confirmed_at = ? WHERE id = ?')->execute([$token, time(), $user_id]);
$_SESSION['flash']['success'] = 'Votre compte a bien été validé';
$_SESSION['auth'] = $user;
header('Location: http://localhost:8080/sitefamillexxx/pages/account.php');
}else{
$_SESSION['flash']['danger'] = "Ce token n'est plus valide";
header('Location: http://localhost:8080/sitefamillexxx');
}

Reste le pb de la date... SI je trouve, j'édite à nouveau.

Edit 2 :

Pb resolu !!!

$pdo->prepare('UPDATE users SET remember_token = ?, confirmed_at = NOW() WHERE id = ?')->execute([$token, $user_id]);

Merci Jeremie, ta réponse m'a mise sur la bonne voie ! Merci à Carouge pour m'avoir bien éguillé également !

Tout passe bien. Restera plus qu'à faire en sorte de voir les SESSION FLASH, car là, c'est pas l'cas...