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 ^^.

5 réponses


Carouge10
Réponse acceptée

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.

SimonDevelop
Réponse acceptée

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.

JoHuv
Auteur

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 ?

JoHuv
Auteur

Merci à vous deux ! ça marche maintenant ;)