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...
Bonsoir,
Pour le moment, tu peux commenter tes header() et ajouter des "echo 'je passe par là';" pour savoir où tu passes.
$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
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.
<?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...
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...