IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

"Undefined variable" et je ne comprend pas pourquoi


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2018
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Novembre 2018
    Messages : 58
    Points : 48
    Points
    48
    Par défaut "Undefined variable" et je ne comprend pas pourquoi
    Bonjour à tous,

    je suis en train de créer mon 1er programme orienté objet et je rencontre mon 1er soucis. Pour le moment je voulais m'assurer que mes articles seraient affichés; j'ai donc mis de côté la partie contrôleur pour directement appeler depuis mon index. La partie contrôleur sera créée après m'être assuré que ma vue fonctionne. J'ai donc codé comme ceci :
    Partie modèle (1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php abstract class Modele{
     
      private $bdd;
     
        protected function executeRequest($data, $param = null) {
            if ($param ==null){
                $result= $this->getBdd()->query($data);
            }
        }
     
        private function getBdd(){
            if ($this->bdd == null) {
            $this->bdd= new PDO("mysql:host=localhost;dbname=blog_jf;charset=utf8",'root',"", array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
            }
            return $this->bdd;
        }
     
    }
    Partie modèle (2) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php require "Modele.php";?>
     
    <?php class ArticleModele extends Modele{
     
        public function getArticles(){
           $sql="SELECT content, date_article,title FROM article";
           $articles= $this->executeRequest($sql);
           return $articles;
        }
    }
    Partie template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <link href="style.css" rel="stylesheet">
        <title><?= $title ?></title>
    </head>
    <body class="<?= $body ?>">
        <header>
            <nav>
                <div class="logo"><img src="lib/images/logo.png"/></div>
                <ul>
                    <li class="hamburger"></li>
                    <li><a href="#">Accueil</a></li>
                    <li><a href="#">A propos de l'auteur</a></li>
                    <li><a href="#">Blog</a></li>
                    <li><a href="#">Contact</a></li>
                </ul>
            </nav> 
            <div class="bg"></div>            
        </header>
        <section>
            <article>
                <?= $content ?>
            </article>
        </section>
        <footer>
        <p>2019 - Jean Forteroche</p>
        </footer>
        <script src="lib/js/main.js"></script>
    </body>
    </html>
    Partie vueBlog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php $title="Blog"?>
    <?php $body ="about"?>
     
     
    <?php ob_start()?>
    <article>
        <div class="box-content">
        <?php foreach ($articles as $article): ?>
            <?= "<h1>" . $article["title"] . "</h1>"?>
            <p> <?= $article["content"]?></p>
        </div>
        <p> <?= $article["date_article"]?></p>
    </article>
    <?php endforeach ?>
     
    <?php $content= ob_get_clean()?>
     
    <?php require "template.php"?>
    et mon index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    require "modele/ArticleModele.php";
    require "vue/vueBlog.php";
    Les erreurs qui s'affichent sont les suivantes :
    Notice: Undefined variable: articles in C:\wamp64\www\projetPHP\vue\vueBlog.php on line 8
    Warning: Invalid argument supplied for foreach() in C:\wamp64\www\projetPHP\vue\vueBlog.php on line 8
    Ça fait un moment que je suis dessus et je ne sais vraiment pas pourquoi j'ai un "undefined variable".

    Une idée serait la bienvenue

  2. #2
    Membre averti Avatar de Freudd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 165
    Points : 379
    Points
    379
    Par défaut
    Bonjour mickasou,

    Ton problème réside dans l'encapsulation de tes variables.
    Même si tu appels ton modèle et ta vue directement dans ton index, la variable $articles est contenu dans ta fonction getArticles().
    Du coup tu n'exploites pas tes données. Je t'invite à utiliser cette fonction entre l'appel de ton modèle et ta vue (ce qui devrait être la place de ton contrôleur prochainement ).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    /* Délcaration de ton modèle. */
    require "modele/ArticleModele.php";
    /* Instanciation et récupération de tes articles. */
    $articleModel = new ArticleModele ();
    $articles = $articleModel->getArticles();
    /* Appel de la vue.*/
    require "vue/vueBlog.php";

  3. #3
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2018
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Novembre 2018
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Effectivement une erreur toute bête (j'ai envie de me cogner la tête contre un mur...)

    Merci Freudd pour ce coup de main. Du coup ça m'a enlever une erreur et il m'en reste une dernière à gérer :

    Warning: Invalid argument supplied for foreach() in C:\wamp64\www\projetPHP\vue\vueBlog.php on line 8
    Une idée ?

  4. #4
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2018
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Novembre 2018
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Bon j'avance à petit pas. J'ai fais une condition avant le foreach m'assurant qu'il y a bien quelque chose dans ma variable $articles (avec isset) sinon j'affiche une erreur et effectivement une erreur s'est affichée. Donc le problème doit venir de ma partie modele car il n'y a rien dans ma variable.

  5. #5
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 681
    Points
    1 681
    Par défaut
    Bonjour,

    La fonction executeRequest indiquée dans le premier extrait ne renvoie rien. Donc l'affectation d'un retour de cette fonction à articles ne retourne rien.

  6. #6
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2018
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Novembre 2018
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Et ben voilà c'est résolu,

    Freudd et Cincinnatus merci pour votre aide, je vais enfin pouvoir avancer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/06/2008, 20h01
  2. Réponses: 6
    Dernier message: 12/08/2007, 13h29
  3. Réponses: 2
    Dernier message: 14/01/2006, 20h29
  4. Comprends pas pourquoi ca marche pas
    Par cellimo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/11/2005, 22h10
  5. error LNK 2019... comprends pas pourquoi ?
    Par MonsieurAk dans le forum MFC
    Réponses: 2
    Dernier message: 29/04/2005, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo