pour l'instant mon site fonctionne super bien et depuis un petit moment j'ai des utilisateurs qui s'enregistre avec des adresses email bidon
je souhaiterais donc pouvoir un email de confirmation a leur adresse email
Mais comment m' y prendre
Apparemment je devrais créer deux nouveaux champs un token_user et un pour la confirmation "confirmer "
voici mon code existant que j'ai commencer a modifier
Code : Tout sélectionner
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
?>
<?php
// je me connecte a la base de donnee
require_once 'base.php';
//si tous est ok alors on passe a l inscription
if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype']))
{
$password = ($_POST['password']);
$password_retype = ($_POST['password_retype']);
//preparation des variables propres
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$email = !empty($_POST['email']) ? $_POST['email'] : NULL;
//préparation de la requête et des variables afin de vérifier si l email est présent dans la table
$sql = "SELECT pseudo, email, password FROM utilisateurs WHERE email = ?";
$datas = [$email];
//Execution de la requete
try
{
$requete = $bdd->prepare($sql);
$requete->execute($datas);
}
catch(Exception $e)
{
// en cas d'erreur :
echo " Erreur ! " . $e->getMessage();
echo " Les datas : ";
print_r($datas);
}
$data = $requete->fetch();
$row = $requete->rowCount();
if ($row == 0)
{
//préparation de la requête et des variables afin de verifier si le pseudo est present dans la table
$sql = "SELECT pseudo, email, password FROM utilisateurs WHERE pseudo = ?";
$datas = [$pseudo];
//Execution de la requete
try
{
$requete = $bdd->prepare($sql);
$requete->execute($datas);
}
catch(Exception $e)
{
// en cas d'erreur :
echo " Erreur ! " . $e->getMessage();
echo " Les datas : ";
print_r($datas);
}
$data = $requete->fetch();
$row = $requete->rowCount();
//on verifie que le pseudo n est pas present
if ($row == 0)
{ //on verifie que le pseudo fais moins de 40 caractere
if (strlen($pseudo) <= 30)
{ //on verifie que le email fais moins de 40 caractere
if (strlen($email) <= 35)
{
if(preg_match('/^[a-z_\-0-9]+$/i', $pseudo))//on verifie les caracteres
{
if (filter_var($email, FILTER_VALIDATE_EMAIL)) //on verifie que c est bien une email
{
if ($password == $password_retype)
{ //on verifie que le pasword retape correpond bien au passord
$cost = ['cost' => 12];
$password = password_hash($password, PASSWORD_BCRYPT, $cost);
$ip = $_SERVER['REMOTE_ADDR'];
$insert = $bdd->prepare('INSERT INTO utilisateurs(pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)');
$insert->execute(array('pseudo' => $pseudo,'email' => $email,'password' => $password,'ip' => $ip,'token' => bin2hex(openssl_random_pseudo_bytes(24)),'token_user' => bin2hex(openssl_random_pseudo_bytes(24)),'confirmer' => $confirmer);
//traitement de l envois par mail a l'utilisateur
setlocale (LC_TIME, 'fr_FR.utf8','fra');
date_default_timezone_set('Europe/Brussels');
$date1 = date('d-m-Y H:i:s'); // Date du jour
// on entre l'adresse email du membre
$to = '$email'; // notez la virgule
// Sujet
$subject= "Votre lien de confirmation ";
// message
$message =
'
<html>
<head>
<title>voici votre lien de confirmation </title>
</head>
<body>
<table>
<tr>
<td>le lien est </td><td><a href="https://phil.pecheperle.be/validation.php?'.id=$id&token_user=$token_user.'">Votre lien de confirmation</a></td></br>
</tr>
</table>
</body>
</html> ';
// Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'content-type: text/html; charset=utf-8';
// En-têtes additionnels
//$headers[] = "From: " . $name . "<". $_POST["email"] .">\r\n";
$headers[] = 'From: '.$email."\r\n".
'Reply-To: '.$name."\r\n" .
'X-Mailer: PHP/' . phpversion();
// Envoi
//var_dump($headers);
if(mail($to, $subject, $message, implode("\r\n", $headers))){
// success message
//echo "Success!<br />";
}else{
// error message
//echo "Fail<br />";
header('Location:redirection-inscription.php?reg_err=success');
die();
}
else
{
header('Location: inscription.php?reg_err=password');
die();
}
}
else
{
header('Location: inscription.php?reg_err=email');
die();
}
}
else
{
header('Location: inscription.php?reg_err=pseudo_caractere');
die();
}
}
else
{
header('Location: inscription.php?reg_err=email_length');
die();
}
}
else
{
header('Location: inscription.php?reg_err=pseudo_length');
die();
}
}
else
{
header('Location: inscription.php?reg_err=already');
die();
}
}
else
{
header('Location: inscription.php?reg_err=already');
die();
}
}
Code : Tout sélectionner
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
require 'includes/db.php';
//on cree une variable pour la comparer
$tokenUser= !empty($_POST['tokenUser']) ? $_POST['tokenUser'] : NULL;
$id= !empty($_POST['id']) ? $_POST['id'] : NULL;
$req = $bdd->prepare('SELECT id, token_user ,confirmer FROM membre WHERE id = ?*:id');
if($req->execute(array(':id' => $id)) && $resultat = $req->fetch()){
$tokenUser = $resultat['token_user'];
$activation = $resultat['confirmer'];
if($activation != NULL) {
echo("votre compte est déjà activé");
} else {
if($tokenUser == $token_user) {
echo("Votre compte est activé");
} else {
echo("Cette clé ne correspond pas");
}
}
}
?>comment utiliser la requête update