Bonjour,
J'installe un "espace membre" sur mon site.
Ma connection PDO est formulée sur mon "Model.php"
/**
* Permet d'initialiser les variable du Model
**/
public function __construct(){
// Nom de la table
if($this->table === false){
$this->table = strtolower(get_class($this)).'s';
}
// Connection à la base ou récupération de la précédente connection
$conf = Conf::$databases[$this->conf];
if(isset(Model::$connections[$this->conf])){
$this->db = Model::$connections[$this->conf];
return true;
}
try{
$pdo = new PDO(
'mysql:host='.$conf['host'].';dbname='.$conf['database'].';',
$conf['login'],
$conf['password'],
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')
);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
Model::$connections[$this->conf] = $pdo;
$this->db = $pdo;
}catch(PDOException $e){
if(Conf::$debug >= 1){
die($e->getMessage());
}else{
die('Impossible de se connecter à la base de donnée');
}
}
}
Et ma page "register.php" me pause un soucis.
<?php
require_once CORE.DS.'functions.php';
if(!isset($_SESSION)){
session_start();
}
if(!empty($_POST)){
$errors = array();
require_once CORE.DS.'Model.php';
if(empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])){
$errors['username'] = "Votre pseudo n'est pas valide (alphanumérique)";
} 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';
}
}
Voici les messages d'erreur:
1 - Notice: Undefined variable: pdo in E:...pages\register.php on line 15
2 - Fatal error: Call to a member function prepare() on a non-object in E:...pages\register.php on line 15
Je n'arrive pas à comprendre pourquoi il ne reconnait pas ma variable ? $pdo est pourtant nickel pour mes autres pages ?!
Merci d'avance à celui qui peut m'aider ^^.
Ta variable n'est disponible que dans la fonction du constructeur. Une fois celui-ci fait, elle est détruite.
Il te faut crée une variable dans ta class Model. Et tu accèderas à cette variable grace à un function.
Comme le dit @Carouge10, dans ton constructeur qui fait ceci $this->db = $pdo;
, donc tu devrais avoir une variavle private ou public nommé $db;
dans ta classe.
Donc dans ton code tu dois faire plutôt ceci :
$pdo = new TA_CLASSE();
$req = $pdo->db->prepare('SELECT id FROM users WHERE username = ?');
Bonsoir,
Ta variable $pdo n'existe pas. Elle n'est pas instancier. Donc il est logique qu'il ne la trouve pas.
Pour la seconde erreur elle est lié à la 1ère.
salut, mais c'est pas ce qui est fait en faisant "$pdo = new pdo " dans Model sachant que le require lie les deux page ? si c'est pas le cas, que dois-je faire de plus ?