Bonjour !
J'essais de mettre en place un formulaire d'inscription et de connexion (inscription c'est fait, et tout fonctionne).
Par contre, pour la connexion, cela ne fonctionne pas, et me retourne 2 erreurs :
Notice: Undefined variable: pdo
Fatal error: Call to a member function prepare() on null
Voici mon code :
if(!empty($_POST) && !empty($_POST['name']) && !empty($_POST['password']))
{
require_once '../functions/functions.php';
$req = $pdo->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL');
$req->execute(['username' => $_POST['name']]);
$user = $req->fetch();
if($user == null)
{
$_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
}
elseif(password_verify($_POST['password'], $user->password))
{
require_once '..functions/db-connect.php';
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = 'Vous êtes maintenant connecté';
header('Location: ../index');
exit();
}
else
{
$_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrecte';
}
}
J'ai donc pensé à un problème de variable non déclarée, et j'ai donc fait ça :
$pdo = 0;
$req = $pdo->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL');
Mais là du coup, il me reproche d'avoir tenté d'intégrer un entier.
Donc j'ai essayé ça :
$pdo = NULL;
$req = $pdo->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL');
Mais même problème, l'erreur en sortie est que je dois pas avoir de variable NULL :/
Quelqu'un aurait une solution, ou pourrait m'expliquer le soucis, que je ne refasse pas la même erreur à l'avenir ?
Merci d'avance pour vos futures réponses ;)
Donc en fait il faut que fasse :
$req = $db->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL');
Il faut utiliser la variable que as nommé qui est $db
et non $pdo
Bonsoir, merci de ta réponse ;)
Alors non, le pdo est appelé dans mon db-connect.php
le voici :
<?php
session_start();
$dbhost = 'localhost'; //Hôte
$dbname = 'site_wekod'; //Nom de la base
$dbuser = 'root'; //Utilisateur
$dbpswd = ''; //Mot de passe
try
{
$db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname,$dbuser,$dbpswd, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
}
catch(PDOexception $e)
{
die('Une erreur est survenue lors de la connexion avec la base de données');
}
???
ben... attends est-ce que tu demandes pourquoi ce genre de code ne fonctionne pas ?
$pdo = 0;
// donc :
$req = 0->prepare('SELECT...');
ou encore ?
$pdo = NULL;
// donc :
$req = NULL->prepare('SELECT...');
Quand même... :'(
Alors non, le pdo est appelé dans mon db-connect.php
Attention, s'il est défini seulement dans "db-connect.php", il ne le sera pas ailleurs,
il faut que tu arrives à "appeler" ton objet PDO
depuis n'importe où.
J'ai donc pensé à un problème de variable non déclarée
en même temps... : "Notice: Undefined variable: pdo"
En tous cas ici, effectivement tu as raison.
Comme l'a montré @JeremieMeunier
Bonjour, merci pour vos réponses. J'ai pas encore suffisamment d'expérience en orienté objet pour avoir la logique dans la construction de mon code, désolé :/
Je crois avoir compris mon erreur, en effet je n'appellais pas $db mais $pdo qui n'était pas déclaré dans mon db-connect.php
J'essais ça