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 billet ne s'ffiche si ce n'est le titre de mon blog.
En cliquant sur ARBORESCENCE on constatera que la structure de mon site est la suivante :
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
- Code: Tout sélectionner
<?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
- Code: Tout sélectionner
<?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
- Code: Tout sélectionner
<?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
- Code: Tout sélectionner
<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
- Code: Tout sélectionner
<?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 à résoudre le problème ce serait formidable.
<config>Windows 7 / Internet Explorer 9.0</config>