Bonjour,
Voila je rencontre un petit problème avec mon code.
je suis actuellement le tuto de grafikart pour la création d'un site internbet et surtout la partie compte utilisateur.
Plus précisément la partie finale quand l'absence d'eereur est chekée et que l'on exécute la requête préparée pour insérer toutes les données
<?php
require_once'inc/functions.php';
session_start();
if(!empty($_POST)){
$errors=array();
require_once 'inc/db.php';
if(empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/',$_POST['username'])){
$errors['username']="Votre Pseudo n'est pas valide";
} else {
$req = $pdo->prepare('SELECT id FROM users WHERE username = ?');
$req->execute([$_POST['username']]);
$user=$req->fetch();
if($user);{
$errors['username'] = "ce pseudo est déjà pris";
}
}
if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errors['email']="Votre Email n'est pas valide";
}
if(empty($_POST['password']) || $_POST['password'] != $_POST['password_confirmed']) {
$errors['password']="Votre mot de passe n'est pas valide";
} else {
$req = $pdo->prepare('SELECT id FROM users WHERE email = ?');
$req->execute([$_POST['email']]);
$user=$req->fetch();
if($user);
$errors['email'] = "cet email est déjà utilisé par un autre compte ";
}
}
if(empty($errors)){
$req = $pdo->prepare('INSERT INTO users SET username = ?, password = ?, email = ?, confirmation_token = ?');
$password = password_hash($_POST['password'],PASSWORD_BCRYPT);
$token = str_random(60);
$req->execute([$_POST['username'], $password, $_POST['email'],$token]);
if(empty($errors)){
$_SESSION['flash']['success'] = 'un Email de confirmation vous a été envoyé pour valider votre compte';
mail($_POST['email'],'Confirmation de votre compte STELLAR',"Afin de valider votre compte, merci de cliquer sur ce lien\n\nhttp://localhost/index.php,id=$user_id,$token=$token");
header('location: index.php');
exit();
}
$user_id = $pdo->LastInsertId();
}
?>
Je rencontre cette erreur citée en titre
( ! ) Notice: Undefined variable: pdo in E:\phpmyadmin\STELLAR\projet\register.php on line 47
( ! ) Fatal error: Uncaught Error: Call to a member function prepare() on null in E:\phpmyadmin\STELLAR\projet\register.php on line 47
Pour moi le problème vien de la ligne entre étoile mais je ne trouve pas la solution depuis 1 semaine
Merci pour votre aide
Cordialement
Jonathan.
c'est ça
<?php
session_start();
require_once'inc/functions.php';
if(!empty($_POST)){
$errors=array();
require_once 'inc/db.php';
if(empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/',$_POST['username'])){
$errors['username']="Votre Pseudo n'est pas valide";
} else {
$req = $pdo->prepare('SELECT id FROM users WHERE username = ?');
$req->execute([$_POST['username']]);
$user=$req->fetch();
if($user);{
$errors['username'] = "ce pseudo est déjà pris";
}
}
if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errors['email']="Votre Email n'est pas valide";
}
if(empty($_POST['password']) || $_POST['password'] != $_POST['password_confirmed']) {
$errors['password']="Votre mot de passe n'est pas valide";
} else {
$req = $pdo->prepare('SELECT id FROM users WHERE email = ?');
$req->execute([$_POST['email']]);
$user=$req->fetch();
if($user);
$errors['email'] = "cet email est déjà utilisé par un autre compte ";
}
if(empty($errors)){
$req = $pdo->prepare('INSERT INTO users SET username = ?, password = ?, email = ?, confirmation_token = ?');
$password = password_hash($_POST['password'],PASSWORD_BCRYPT);
$token = str_random(60);
$req->execute([$_POST['username'], $password, $_POST['email'],$token]);
if(empty($errors)){
$_SESSION['flash']['success'] = 'un Email de confirmation vous a été envoyé pour valider votre compte';
mail($_POST['email'],'Confirmation de votre compte STELLAR',"Afin de valider votre compte, merci de cliquer sur ce lien\n\nhttp://localhost/index.php,id=$user_id,$token=$token");
header('location: index.php');
exit();
}
$user_id = $pdo->LastInsertId();
}
}
J'ai modifié ton code, mais il reste des erreurs.... surtout à la fin de ligne de certain "if".....
Bravo merci je n'ai plus que des erreurs de parsage je vais essayer de les réctifier seul car je débute. je vais également essayer d'étudier de plus près ce que tu as modifié, ouf une semaine de perdu mais 10 de retrouvées.
A+
bien sûr voici:
<?php
$pdo = new PDO('mysql:dbname=stellar;host=localhost','root','');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
autant pour moi,
difficile à lire le code quand le bouton "</>" de l'éditeur n'est pas bien utiliser
Tu as fais ton require_once uniquement si les données $_POST ne sont pas vide. Alors à le test de "$errors" , il ne connais pas $pdo
Sors le de cette conditions et ça sera bon
tu as l'air d'avoir trouvé la solution mais j'ai rien compris à la réponse qu'entends tu par sors le de cette condition je supprime la condition ou je ferme et j'ouvre une nouvelle balise php?????
non, tu as inclus ton fichier seulement si tu as des données.
Le test que tu fais sur $errors (d'ailleurs tu fais 2 fois le même test) doit être remis juste après avoir fait le test sur $user.
Ecoute je suis navré et embêter je vais essayer de te dire ce que je comprende de ta réponse: je "require" DB.php seulement si j'ai posté des données. soit le pseudo, le mail et le password. Ok je comprends
Le test que je fais sur $errors c'est bien ça: if(empty($errors)){
je dois faire ce test juste après le if de $user. mais alors également après le if de $password et de $email, non??
Arf je suis largué!