Décrivez ici votre problème ou ce que vous cherchez à faire.

Bonjour j'ai un soucis j'apprend la poo en php avec les vidéos de grafikart.
Je souhaite afficher les titres de mes articles de ma bdd sur la page HOME.PHP
Mais quand j'utilise ma variable qui est $db j'ai un erreur sur mon navigateur.
ma variable $db dans mon fichier index.php .
Je pense que j'ai une erreur au niveau de la diffusion des fichiers mais je ne sais pas laquelle. Pourriez vous m'aidez ? J'ai pris des captures d'écrans

la video que je me sert https://grafikart.fr/tutoriels/tp-database-566#autoplay

Le lien de mon github : https://github.com/xavgdt66/Blog

Ce que je veux

Que les titres de mes articles apparaissent

Ce que j'obtiens

Warning: Undefined variable $db in C:\xampp\htdocs\blog\pages\home.php on line 3
Fatal error: Uncaught Error: Call to a member function query() on null in C:\xampp\htdocs\blog\pages\home.php:3 Stack trace: #0 {main} thrown in C:\xampp\htdocs\blog\pages\home.php on line 3

2 réponses


Hello :)

Alors le problème est tout simple: tu as créé ta db, tu as créé ta homepage, mais dans ta homepage tu n'a pas importé ta DB, tu as juste placé une variable $db, mais ta page elle ne sait pas d'où elle sort, il faut lui expliquer ce que c'est $db en faisant ça dans ta HomePage:

$db = new App\Database($db_name, $db_user = 'root', $db_pass = '' ,$db_host = 'localhost');

Après tu apprends la POO, alors tu as sauté une étape, tu es passé directement de PHP procédural à PHP en POO, il faudrait que tu apprennes le MVC, parce que le traitement ne derait pas se trouver dans ta HomePage, mais dans un Controller (ou Manager, en général les tutos appellent ça des managers et les docs officielles appellent ça des controllers) et en gros si tu fais du MVC ta structure devrait ressembler à ça:

App
    - Controllers
        - HomeController.php -> $db = ...; $db->query ...; return la page avec les donées finales en faisant par ex $model = $db->query...;

    - Database
        - Database.php -> ta database PDO

    - Models
        - TonModele1.php -> un object modèle par exemple User.php
        - TonModele2.php -> un object modèle par exemple Orders.php

    - Views
        - layouts
            - app.php // Le template avec la variable content

        - homepage.php // La page Home, et par rapport à ton controller tu récupère le réésultat en faisant $model (ou autre nom si tu as donné un autre nom à ta variable, et cette fois tu aura injecté directement depuis le controller donc la variable devrait fonctionner)
        - aboutpage.php // une autre page

autoloader.php // plus pertinent à la racine c'est juste un utilitaire

Ah et la tu es en apprentissage donc c'est bien de faire ton propre autoloader au début, mais il faudra que tu apprennes à utiliser composer pour faire des autoloader beaucoup plus puissants, et quand tu passeras pro tu utilisera composer de toutes façons :p

Merci pour ta réponse je viens de le faire , j'ai bien mis ma bdd dans la homepage mais ça ne fonctionne toujours pas .

J'ai fait un nouveau repository sur github: https://github.com/xavgdt66/nvblog

Pour l'apprentissage je suis les video et ensuite je vais pratiquer moi meme , concernant le mvc je connais un peu , je ne suis pas encore à cette vidéo .