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

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Blog] MVC billets ne s'affichent pas


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut [Blog] MVC billets ne s'affichent pas
    Bonjour,

    Dans le cadre de la structuration d'un blog j'emploie la méthode Modèle Vue Contrôle où une page accueil communique avec une page commentaire

    J'ai donc à ma racine deux contrôleurs globaux ctraccueil.php et ctrcommenaire.php pour chacune de mes pages et 3 répertoires principaux avec des sous répertoires contenant des fichiers comme suit ( je passe sur le css etc qui ne sauraient avoir d'incidences sur le bon fonctionnement du site):

    Modèle/
    /accueil/get_billets.php + connexion_sql.php
    /commentaire/get_billets.php + connexion_sql.php

    Vue/
    /accueil/index.php
    /commentaire/index.php

    Contrôle/
    /accueil/index.php
    /commentaire/index.php

    Lorsque je clique à ma racine en local avec easyphp sur ctraccueil.php j'accéde à ma page d'accueil avec la liste de mes articles, la date, résumé etc... ( donc ici aucun problème ).

    Mais lorsque je vais sur la page commentaire via le lien "commentaire" se trouvant sur ma page d'accueil, les billets ne s'affichent pas et l'erreur suivante se présente :

    Notice: Undefined variable: billets in C:\Program Files\EasyPHP-5.3.6.0\www\BLOG\vue\commentaire\index.php on line 36

    Warning: Invalid argument supplied for foreach() in C:\Program Files\EasyPHP-5.3.6.0\www\BLOG\vue\commentaire\index.php on line 36


    Apparemment le foreach semble causer problème lorsque je passe de mon accueil à mon commentaire alors même que ce foreach ne cause aucun problème à l'ouverture de ma page d'accueil puisqu'il figure dans le script mais je ne sais comment y remédier d'autant plus que voulant garder mes scripts selon cette forme.

    Quelqu'un maitrisant le MVC pourrait-il me venir en aide en tenant compte de mes scripts qui fonctionnent mis a part ce détail. Je reporte ci-dessous chacun des scripts. Merci pour votre aide.

    contrôleurs globaux

    ctraccueil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    include_once('modele/accueil/connexion_sql.php');
    if(!isset($_GET['section']) OR  $_GET['section']=='index')
    {
    include_once('controleur/accueil/index.php');
     
    }
    ?>
    ctrcommentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    include_once('modele/accueil/connexion_sql.php');
    if(!isset($_GET['section']) OR  $_GET['section']=='index')
    {
    include_once('controleur/accueil/index.php');
     
    }
    ?>
    Modèle/
    /accueil/get_billets.php

    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
     <?php
    function get_billets($offset,$limit)
    {
    global $bdd;
    $offset=(int)$offset;
    $limit=(int)$limit;
     
    $req=$bdd->prepare('SELECT id_billet, image, titre, contenu, auteur, categorie, resume, DATE_FORMAT(date_de_creation,\'%d/%m/%Y à %Hh%imin%ss\') AS
    date_de_creation_fr FROM billets
    ORDER BY date_de_creation DESC LIMIT :offset,:limit');
    $req->bindParam(':offset',$offset, PDO::PARAM_INT);
    $req->bindParam(':limit',$limit,PDO::PARAM_INT);
    $req->execute();
    $billets=$req->fetchAll();
     
    return $billets;
    }
    ?>
    /commentaire/get_billets.php

    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
     <?php
     
    function get_billets($offset,$limit)
    {
    global $bdd;
    $offset=(int)$offset;
    $limit=(int)$limit;
     
    $req=$bdd->prepare('SELECT id_billet, image, titre, contenu, auteur, categorie, resume, DATE_FORMAT(date_de_creation,\'%d/%m/%Y à %Hh%imin%ss\') AS
    date_de_creation_fr FROM billets WHERE id=?');
     
     
    $req->bindParam(':offset',$offset, PDO::PARAM_INT);
    $req->bindParam(':limit',$limit,PDO::PARAM_INT);
    $req->execute(array($_GET['billets']));//TABLEAU concerné
    $billets=$req->fetchAll();
     
    return $billets;
    }
    ?>


    Contrôleur/
    accueil/index.php // c'est le même code pour le commentaire/index.php sauf que $billet=get-billets je ne sais pas trop ce que je dois y mettre si ce n'est le chiffre 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
    20
    21
    22
    23
    24
    25
     <?php
    //on demande les cinq derniers billets(modèle)
    include_once('modele/accueil/get_billets.php');
     
    $billets = get_billets(0,5);
     
    //On effectue du traitement sur les données (contrôleur)
    //Ici on doit surtout sécuriser l'affichage
    foreach($billets as $cle=>$billet)
     
    {
     
    	$billets[$cle]['titre']=htmlspecialchars($billet['titre']);
    	$billets[$cle]['contenu']=nl2br(htmlspecialchars($billet['contenu']));
    	$billets[$cle]['auteur']=htmlspecialchars($billet['auteur']);
    	$billets[$cle]['date_de_creation_fr']=($billet['date_de_creation_fr']);
    	$billets[$cle]['categorie']=htmlspecialchars($billet['categorie']);
    	$billets[$cle]['resume']=nl2br(htmlspecialchars($billet['resume']));
     
    }
     
     
    //On affiche la page (vue)
    include_once('vue/accueil/index.php');
    ?>

    Vue/
    accueil/index.php

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>ACCEUIL</title>
    <meta http-equiv="Content-Type" content="text/html;
    charset=iso-8859-1"/>
    <link href="vue/blog/style.css" rel="stylesheet" type="text/css"/>
     
    </head>
     
    <body >
     
    <!--L'ENTETE-->
     
    <div id="entete"><h1>ACCUEIL</h1> </div>
     
    <!--LE MENUENTETE-->
     
    <?php include_once("menu/menuentete.php");?>
     
    <!--LE BLOC DE DROITE-->
     
    <div id="menudroite"><h2>COULEURS</h2>
     
    <?php include_once("menu/elementmenudroite.php");?>
     
     
    </div>
     
     
    <!--LE CORPS-->
    <div id="corps">
     
     
     
    <?php
     
     
    foreach($billets as $cle=> $billet)
    {
    ?>
    <div class="news">
    <h2>
    	<?php echo $billet['categorie'];?>
    </h2>
     
    <h3>
    	<?php echo $billet['titre'];?>
    	<em>le <?php echo $billet['date_de_creation_fr'];?></em>
    </h3>
     
     
     
    <p>
     
    <?php echo $billet['contenu'];?>
    <br/>
    <em><a href="vue/commentaire/index.php?billets=<?php echo $billet['id_billet'];?>">
    Commentaires</a></em>
    </p>
    </div>
    <?php
    }
    ?>
     
     
     
     
    </div>
     
    <!--PIEDDEPAGE-->
    <div id="pieddepage">XXXXXXX</div>
     
     
     
    </body>
    </html>

    commentaire/index.php

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
    <title>COMMENTAIRE</title>
    <meta http-equiv="Content-Type" content="text/html;
    charset=iso-8859-1"/>
    <link href="../../vue/blog/style.css" rel="stylesheet" type="text/css"/>
     
    </head>
     
    <body >
     
    <!--L'ENTETE-->
     
    <div id="entete"><h1>COMMENTAIRES</h1> </div>
    <p><a href="../../ctraccueil.php">Retour à la liste des billets</a>
     
    <!--LE MENUENTETE-->
     
    <?php include_once("../../menu/menuentete.php");?>
     
    <!--LE BLOC DE DROITE-->
     
    <div id="menudroite"><h2>COULEURS</h2>
     
    <?php include_once("../../menu/elementmenudroite.php");?>
     
     
    </div>
     
     
    <!--LE CORPS-->
    <div id="corps">
    <?php
    foreach($billets as $cle=>$billet)
    {
    ?>
     
    <div class="news">
    <h2>
    	<?php echo $billet['categorie'];?>
    </h2>
     
    <h3>
    	<?php echo $billet['titre'];?>
    	<em>le <?php echo $billet['date_de_creation_fr'];?></em>
    </h3>
     
     
     
    <p>
     
    <?php echo $billet['contenu'];?>
    <br/>
    </div><!--div de fin new-->
     
    <?php
    }
    ?>
     
     
    <div><!--div début commentaire-->
    <h2>Commentaires</h2>
    <?include_once("menu/recuperationcommentaire.php");?>
     
     
    </p>
    </div>
     
     
     
     
    </div><!--div de fin de corps-->
     
    <!--PIEDDEPAGE-->
    <div id="pieddepage">XXXXX</div>
     
     
     
    </body>
    </html>




    <config>Windows 7 / Internet Explorer 9.0</config>

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    J'avais encore jamais vu de MVC en procédural

    Bref, vu que tu as l'air de rebondir de script en script comme un gentil lapin, tu devrais te méfier de la porté des variables entre les scripts. Tu devrais utiliser le mot clé Global pour que les "vues" puissent utiliser les données que leurs "renvoient" les "contrôleurs".

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Merci Monsieur DELESPIERRE Benjamin.

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

Discussions similaires

  1. [ASP.NET MVC 3] Le ValidationSummary ne s'affiche pas
    Par Skalp dans le forum ASP.NET MVC
    Réponses: 8
    Dernier message: 28/03/2011, 18h41
  2. [XHTML] IE6 n'affiche pas correctement sidebar blog
    Par jfrsm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 03/05/2007, 23h25
  3. Le résultat de Print ne s'affiche pas...
    Par Red Bull dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2006, 18h56
  4. Les classes ne s'affichent pas
    Par karl3i dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2004, 14h52
  5. [MFC] Ces fenêtres qui ne s'affichent pas..
    Par Davide dans le forum MFC
    Réponses: 3
    Dernier message: 19/11/2003, 11h30

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