Chapitre 13 sur 27 POO_PHP

Par regisDevweb, il y a 9 ans


Bonjour,

j'ai une erreur du style Notice: Undefined variable: connexion in C:\wamp64\www\POO_php_grafikart\Blog\environnement\BDD.php on line 35 et Fatal error: Call to a member function query() on null in C:\wamp64\www\POO_php_grafikart\Blog\environnement\BDD.php on line 40

alors que ma requête dans mon getCategorie ma l'air bonne et ma boucle foreach aussi donc je ne comprend pas voila le code :

Categories.php

merci pour vos futurs

Ce que je fais

home.php

<ul> <?php foreach(\Environnement\Table\Categories::getCategorie() as $categories) { ?> <li><a href="<?= $categories->url; ?>"> <?= $categories->nom; ?> </a></li> <?php } ?> </ul>

et

Categories.php

<?php namespace Environnement\Table; use Environnement\Environnement; class Categories { private static $tables = 'categories'; public static function getCategorie() { return Environnement::getDb()->requete(' select * from ' . self::$tables .' ', __CLASS__); } } ?>

Ce que je veux

résoudre mon problème sur ce petit problème

Ce que j'obtiens

Undefined variable: connexion in C:\wamp64\www\POO_php_grafikart\Blog\environnement\BDD.php on line 35
Fatal error: Call to a member function query() on null in C:\wamp64\www\POO_php_grafikart\Blog\environnement\BDD.php on line 40

4 réponses

Carouge10, il y a 9 ans

Bonjour,

Le problème semble venir du fichier BDD.php où il ne trouve pas la variable "connexion".
Peux-t-on voir ce fichier ?

regisDevweb, il y a 9 ans

BDD.php

<?php namespace Environnement; use \PDO; class BDD { private $db_name, $db_host, $db_pass, $db_user, $pdo; public function __construct($db_name, $db_host = 'localhost', $db_user = 'root', $db_pass = '') //constructeur pur intialiser { $this->db_name = $db_name; $this->db_host = $db_host; $this->db_user = $db_user; $this->db_pass = $db_pass; } public function getPDO() //connexion bdd { if($this->pdo === null) //si il n'y a pas de connexion { $connexion = new PDO('mysql:dbname=test_poo;host=localhost', 'root', ''); //connexion bdd $connexion ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //gestion d'erreur $this->pdo = $connexion; } return $connexion; } public function requete($etat, $nom_classe) //methode pour la requete SQL { $resultats = $this->getPDO()->query($etat); //requête $donnees = $resultats->fetchAll(PDO::FETCH_CLASS, $nom_classe); //éxécution résultats return $donnees; } public function prepare($etat, $attribut, $nom_classe, $unarticle = false) { $resultats = $this->getPDO()->prepare($etat); //requête $resultats->execute($attribut); $resultats->setFetchMode(PDO::FETCH_CLASS, $nom_classe); //setFetchMode : définit le fetch utilisé if($unarticle) { $donnees = $resultats->fetch(); //un resultat } else { $donnees = $resultats->fetchAll(); //les resultats } return $donnees; } } ?>
Lartak, il y a 9 ans

Bonjour.
Tu retournes une variable, alors que tu es censé retourner la valeur de la propriété.
Il te faut donc remplacer return $connexion; par return $this->pdo;.

regisDevweb, il y a 9 ans

effectivement, désolé pour le dérangement et merci ^^