Erreurs retournées sur un formulaire de connexion

Par Tiiix, il y a 8 ans


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 ;)

5 réponses

JeremieMeunier, il y a 8 ans

Bonjour,

Je suppose que $pdo est définie dans functions.php ?

Tiiix, il y a 8 ans

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'); }
JeremieMeunier, il y a 8 ans

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

SLK, il y a 8 ans

???

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

Tiiix, il y a 8 ans

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