Ce site utilise des cookies pour améliorer uniquement votre expérience utilisateur.
Vous pouvez lire à tout moment comment nous utilisons les cookies sur le site.
Bonjour j'ai suivi le tuto et j'ai un retour d'erreur qui me dit : Notice: Undefined variable: valid in blabla on line 23
accompagner du lien "Accueil"
je recois bien un mail qui me dit cliquez validez puis une fois validez sa me dit veuillez confirmer
voici mon conf.php
<?php
session_start();
include('bd/connexionDB.php');
if (isset($_SESSION['id'])){
header('Location: index.php');
exit;
}
$id = (int) $_GET['id'];
$token = (String) htmlentities($_GET['token']);
if($id < 1){
$valid = false;
$err_mess = "Le lien est erroné";
}elseif(!isset($token)){
$valid = false;
$err_mess = "Le lien est erroné";
}
if($valid){
$req = $DB->query("SELECT id
FROM utilisateur
WHERE id = ? AND token = ?",
array($id, $token));
$req = $req->fetch();
if(!isset($req['id'])){
$valid = false;
$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é";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Validation mail</title>
</head>
<body>
<?php
if(isset($info_mess)){
echo $info_mess;
}
if(isset($err_mess)){
echo $err_mess;
}
?>
<a href="index.php">Accueil</a>
</body>
</html>
Re @Jerem971
j'ai trouvé ma bêtise j'ai copiez collez dans la base de donné du coup j'ai fait en manuel pour incorporé id, nom, prénom le vachar et autre heidisql qui a beugué j'ai pas compris pourquoi bref ces résolu mais j'ai quand meme une question pourquoi avoir mis des (htmlentities) dans inscription connexion et autre les espace sont impossible
Re @Jerem971
j'ai tous retesté et probleme dans le script conf.php les variable
if($id < 1){
$valid = false;
$err_mess = "Le lien est erroné";
}elseif(!isset($token)){
$valid = false;
$err_mess = "Le lien est erroné";
}
ne reponde pas donc la variable $valid
n'est effectivement à aucun moment créée celle ci
if($valid){
Re:
Peux-tu me donner le lien des articles de formations que tu as lu ?
Je vais essayer de voir quels étapes tu as sautés...
Re
Oui je travaille bien en local et je me ser bien de sendmail dans xampp et il et bien configurer comme dans l'article que vous m'avez join
Re:
On est bien d'accord que tu travailles en local avec XAMPP et non sur un hébergeur en ligne ? Cet article permet de le configurer pour l'envoie de mail...
Re
Alors j'ai téléchargé avec attente 30 secondes l'article ou les articles pas copier coller et la connexion à la bd s'effectue avec succès quand je teste l'inscription la bd enregistre avec succès je fais avec xampp j'ai beau chercher je comprends pas de ou viens le problème
Re:
Alors j'ai quelques questions :
Bonjour @Jerem971,
Je comprends bien que j'ai une erreur de variables mais la variable pour valider existe bien puisque dans le mail que je reçois il me dit de cliquer valider et me renvoie bien sûr l'URL suggère dans cette même variable j'ai fait un essai en mettant manuellement une date pour valider et la non plus sa ne marche pas sa me dit veuillez confirmer votre compte
pour moi l'erreur vien d'ailleur voici l'autre erreur qui me fait dire sa :
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in C:\xampp\htdocs\bd\connexionDB.php on line 29
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number in C:\xampp\htdocs\bd\connexionDB.php on line 29
voici la bd
<?php
// Déclaration d'une nouvelle classe
class connexionDB {
private $host = 'localhost'; // nom de l'host
private $name = 'monsite'; // nom de la base de donnée
private $user = 'root'; // utilisateur
private $pass = ''; // mot de passe
//private $pass = ''; // Ne rien mettre si on est sous windows
private $connexion;
function __construct($host = null, $name = null, $user = null, $pass = null){
if($host != null){
$this->host = $host;
$this->name = $name;
$this->user = $user;
$this->pass = $pass;
}
try{
$this->connexion = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->name,
$this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
}catch (PDOException $e){
echo 'Erreur : Impossible de se connecter à la BDD !';
die();
}
}
public function query($sql, $data = array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
return $req;
}
public function insert($sql, $data = array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
}
}
// Faire une connexion à votre fonction
$DB = new connexionDB();
?>
j'ai aussi controlé dans l'URL id correspond bien a la bd et le token aussi
erreur 2
Notice: Undefined variable: valid in C:\xampp\htdocs\conf.php on line 23
conf.php
<?php
session_start();
include('bd/connexionDB.php');
if (isset($_SESSION['id'])){
header('Location: index.php');
exit;
}
$id = (int) $_GET['id'];
$token = (String) htmlentities($_GET['token']);
if($id < 1){
$valid = false;
$err_mess = "Le lien est erroné";
}elseif(!isset($token)){
$valid = false;
$err_mess = "Le lien est erroné";
}
if($valid){
$req = $DB->query("SELECT id
FROM utilisateur
WHERE id = ? AND token = ?");
array($id, $token);
$req = $req->fetch();
if(!isset($req['id'])){
$valid = false;
$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é";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Validation mail</title>
</head>
<body>
<?php
if(isset($info_mess)){
echo $info_mess;
}
if(isset($err_mess)){
echo $err_mess;
}
?>
<a href="index.php">Accueil</a>
</body>
</html>
inscription
<?php
session_start();
include('bd/connexionDB.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.php');
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['inscription'])){
$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 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$$2a$07$J2ihDv8vVf7QZ9BsaRrKyqs2tkn55Yq$');
$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 (nom, prenom, mail, mdp, date_creation_compte, token)
VALUES
(?, ?, ?, ?, ?, ?)",
array($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@gmail.com>\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="http://51.91.174.227/conf.php?id=' . $req['id'] . '&token=' . $token . '">Valider</a><p>';
mail($mail_to, 'Confirmation de votre compte', $contenu, $header);
header('Location: index.php');
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_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="inscription">Envoyer</button>
</form>
</body>
</html>
Hello @fredoloulou,
Quand tu reçois le mail, tu dois cliquer sur un bouton ou obtenir le lien qui doit valider le compte... C'est ça et seulement ça, rien de plus...
Le message d'erreur que tu reçois est le fait que tu n'as pas défini ta variable "valid
"...