Modèle Vue Controle php problème affichage

Résolu/Fermé
ANTHURIUMRE - 23 juin 2011 à 20:45
 ANTHURIUMRE - 13 juil. 2011 à 19:22
Bonjour,
Bien qu'ayant déjà posé ma question par ailleurs sans que d'aucuns ne parviennent à m'aider, je réitère ici ma demande dans l'espoir que quelq'un daigne me venir en aide en le remerciant par avance car je tourne en rond.

Je veux créer un blog en php mais selon la nomenclature Modèle, Vue, Contrôleur (MVC). Lorsque que je teste mon site avec easyphp avec mon contrôleur global blog.php aucun billets ne s'ffiche si ce n'est le titre de mon blog.

L'arborescence de mon site est le suivant
a la racine www j'ai blog.php qui est mon contrôleur global

puis j'ai trois répertoires a savoir :
- Répertoire modele qui contient un répertoire blog qui contient :
le ficher get_billet.php
le fichier connexion_sql.php
- Répertoire vue qui contient un répertoire blog qui contient :
un fichier index.php
le fichier style.css
- Répertoire controleur qui contient un répertoire blog qui contient :
un fichier index.php

Pour voir s'il n'y a pas un problème par ailleurs je suis allé dans mon répertoire controleur et ai cliqué sur blog contenant un index.php qui me donne ce message d'erreur :
Warning: include_once(modele/blog/get_billets.php) [function.include-once]: failed to open stream: No such file or directory in C:\Program Files\EasyPHP-5.3.6.0\www\controleur\blog\index.php on line 3

Warning: include_once() [function.include]: Failed opening 'modele/blog/get_billets.php' for inclusion (include_path='.;C:\php\pear') in C:\Program Files\EasyPHP-5.3.6.0\www\controleur\blog\index.php on line 3

Fatal error: Call to undefined function get_billets() in C:\Program Files\EasyPHP-5.3.6.0\www\controleur\blog\index.php on line 5


Puis j'ai cliqué dans mon répertoire vue sur blog qui contient lui aussi un index.php et j'obtiens ce message d'erreur :

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

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


Voici les scripts de mes fichiers :

A racine WWW/
Script fichier blog.php

<?php
include_once('modele/blog/connexion_sql.php');
if(!isset($_GET['section']) or  $_GET['section']=='index')
{
include_once('controleur/blog/index.php');

}



REPERTOIRE MODELE/BLOG/
script fichier get_billets.php

<?php
function get_billets($offset,$limit)
{
global $bdd;
$offset=(int)$offset;
$limit=(int)$limit;

$req=$bdd->prepare('SELECT id, titre, contenu, DATE_FORMAT(date_creation,\'%d/%m/%Y à %Hh%imin%ss\') AS
date_creation_fr FROM billets
ORDER BY date_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;
}


script fichier connexion_sql.php

<?php
//connexion à la base de donnée
try
{
	$bdd= new PDO('mysql:host=localhost;dbname=news','root','');
}
catch(Exception $e)
{
	die('Erreur:'.$e->getMessage());
}
?>


REPERTOIRE VUE/BLOG/

script fichier index.php


<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>Titre</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>
<h1>Titre</h1>

<?php
foreach($billets as  $billet)
{
?>
<div class="news">
<h3>
	<?php echo $billet['titre'];?>
	<em>le <?php echo $billet['date_creation_fr'];?></em>
</h3>

<p>
<?php echo $billet['contenu'];?>
<br/>
<em><a href="commentaires.php?billet=<?php echo $billet['id'];?>">
Commentaires</a></em>
</p>
</div>
<?php
}
?>
</body>
</html>


REPERTOIRE CONTROLEUR/BLOG/

script fichier index.php

<?php
//on demande les cinq derniers billets(modèle)
include_once('modele/blog/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 $billet)

{
	$billet['titre']=htmlspecialchars($billet['titre']);
	$billet['contenu']=nl2br(htmlspecialchars($billet['contenu']));
}

//On affiche la page (vue)
include_once('vue/blog/index.php');


Si une âme charitable pouvait m'aider a résoudre le problème ce serait formidable. Attention je ne suis pas un as en programmation. Ces scripts relèvent d'un livre que j'ai acheté pour comprenre le php et correspond à un site célèbre que ne ne citerai pas ici pour éviter toute publicité. Merci beaucoup pour votre aide.

A voir également:

2 réponses

Arctara Messages postés 526 Date d'inscription samedi 9 août 2008 Statut Membre Dernière intervention 14 juillet 2012 78
23 juin 2011 à 20:52
Si ça vient du site du zéro comme je le pense, va voir sur leur forum, ils te donneront surement une réponse claire et concise, maintenant pour ma part, ce que je trouve bizarre, ce sont tes includes : dans le dernier fichier que tu décris, tu as
include_once('modele/blog/get_billets.php');
Donc tu appelle un fichier qui se trouve à ./controleur/blog/modele/blog/ : je trouve ta hiérarchie bizarre...
0
C'est www/blog.php qui doit être consulté par le Web, tous les autres fichiers PHP (Modele,Controlleur,Vue) n'ont pas à l'être.
Il s'agirait là du "Front Controller", dont le rôle est de traiter la demande, et la transmettre au contrôleur spécialisé.
0
ANTHURIUMRE
24 juin 2011 à 11:15
Bonjour Arctara et A.Nonymous,

Arctara tu dis "Si ça vient du site du XXXX comme je le pense, va voir sur leur forum, ils te donneront surement une réponse claire et concise, maintenant pour ma part, ce que je trouve bizarre, ce sont tes includes : dans le dernier fichier que tu décris, tu as
include_once('modele/blog/get_billets.php');
Donc tu appelle un fichier qui se trouve à ./controleur/blog/modele/blog/ : je trouve ta hiérarchie bizarre...
C'est la première chose qu j'ai faite. Mais rien n'y fait, les réponses apportées n'aboutissent pas. D'autre part, le livre relève d'un spécialiste aussi me suis-je appliqué à reprendre à la lettre ce qui est écrit. Bien entendu avant de le faire en MVC je l'ai fait selon la méthode intuitive décrit dans les précédents chapitre et cela fonctionnait. les includes correspondent donc exactement à ce que le spécialiste énonce dans ses exemples. Merci quand même pour l'intérêt porté à mon problème.

A.Nonymous je suis conscient que c'est blog.php qui doit être consulté. Mais mis à part le titre de mon blog il n'affiche pas les billets que j'ai dans ma bases de données sur eaysyphp/msql

C'est bien pour ça que j'ai voulu regarder /vue/blog et /controleur/blog qui m'affichent les erreurs mentionnées dans mon premier post. Merci pour l'intérêt accordé à mon problème.
0
La consultation de www/blog.php retourne quoi comme erreur ?
Pour rappel, les billets ne s'affichent que s'il y a certaines valeurs dans $_GET
blog.php?section=toto
par exemple
0
ANTHURIUMRE
25 juin 2011 à 07:52
Bonjour A. Nonymous,
La consultation de www/blog.php ( qui est le contrôleur global ) ne m'affiche aucune erreur. Mais il ne m'affiche pas non plus les billets de ma base de donnée.
0
Bonsoir à tous, j'avais mal orthographié un champ dans ma base de donnée ce qui fait que mon script bloquait. Maintenant j'ai corrigé et ça fonctionne correctement. Merci pour votre aide. A+
0