Page 1 sur 1

Modèle Vue Contrôle aucun affichage ou erreur

Posté : 30 juin 2011, 08:50
par liliade
Bonjour a tous,

Bien qu'aillant déjà posé ma question par ailleurs sans que d'aucuns ne puissent m'aider je me risque à demander de l'aide sur phpFrance en espérant que des passionnés répondront favorablement à ma demande.

Je veux créer un blog selon la nomenclature Modèle Vue Contrôle ( MVC ). J'ai donc une base de donnée créée dans easyphp/mysql mais quand je teste avec Easyphp à la racine www en cliquant sur blog.php qui est mon contrôleur global rien ne s'affiche si ce n'est le titre de mon blog.

Voici l'arborescence de mon site :ARBORESCENCE

On constatera que j'ai à ma racine sur Easyphp www -> blog.php qui est mon contrôleur global et dont le script est le suivant :
<?php
include_once('modele/connexion_sql.php');
if(!isset($_GET['section']) OR  $_GET['section']=='index')
{
include_once('controleur/blog/index.php');

}
puis 3 répertoires soit :

- le répertoite modèle qui contient un répertoire blog qui contient lui même :

un fichier connexion_sql.php dont le script est le suivant :
<?php
//connexion à la base de donnée
try
{
	$bdd= new PDO('mysql:host=localhost;dbname=news','root','');
}
catch(Exception $e)
{
	die('Erreur:'.$e->getMessage());
}
un fichier get_billets.php dont le script est le suivant :
<?php
function get_billets($offset,$limit)
{
global $bdd;
$offset=(int)$offset;
$limit=(int)$limit;

$req=$bdd->prepare('SELECT id_billet, 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;
}
-le répertoire vue qui contient un répertoire blog qui contient :

un fichier css qui ne saurait avoir d'incidence sur le fonctionnement de mon site à proprement parlé donc inutile que je présente ici le script et

un fichier index.php dont le script est le suivant :
<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 $cle=> $billet)
{
?>
<div class="news">
<h3>
	<?php echo $billet[$cle]['titre'];?>
	<em>le <?php echo $billet[$cle]['date_creation_fr'];?></em>
</h3>

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


- le répertoire contrôleur qui contient un répertoire blog qui contient :

un fichier index.php dont le script est le suivant :
<?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 $cle=>$billet)

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

//On affiche la page (vue)
include_once('vue/blog/index.php');
Pour vérifier si je n'avais pas de problème dans mes fichiers autre que blog.php j'ai cliqué dans mon répertooire contrôleur/blog/ et ai constaté le message suivant :

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\BLOG\controleur\blog\index.php on line 5


Soit dit il ne reconnaît pas où ne trouve pas le chemin que je spécifie dans mon include_once à savoir ('modele/blog/get_billets.php'); alors même que le fichier existe et se trouve à l'endroit spécifié. ce qui fait je suppose à tort ou à raison qu'il ne peut pas afficher mes billets lorsque je clique à la racine de mon site sur mon contrôleur global soit blog.php qui ne peut qu'afficher le titre de mon blog.

Merci à tout passionné d'essayer peut-être le script pour voir s'il fonctionne correctement avec eux ou tout simplement maîtrisant pleinement le php me dire où je pêche. Merci beaucoup pour votre aide. Je suis à mon 5ème forum pour demander de l'aide. Merci beaucoup.

Re: Modèle Vue Contrôle aucun affichage ou erreur

Posté : 30 juin 2011, 09:18
par Mazarini
Bonjour,

Il me semble que la seule solution est de mettre des traces avec des "echo" dans le déroulement de ton script pour vérifier le passage dans les différentes parties de ton code. Tu peux commencer par le fichier "vue/blog/index.php" au début pour vérifier que tu passes bien par la.

Eventuellement, il y a l'IDE NetBeans (http://netbeans.org/index.html) qui permet de faire du débuggage pour suivre l'exécution.

Re: Modèle Vue Contrôle aucun affichage ou erreur

Posté : 30 juin 2011, 10:02
par moogli
salut,

ou alors on regarde bien le beau dessin et l'on se rencontre que php ne raconte pas d’ânerie :mrgreen:

pourquoi ?
parce include_once('modele/blog/get_billets.php'); dans le fichier /controleur/blog/index.php va inclure le fichier dans l'arborescence spécifié à partir du répertoire du fichier. Clairement php essai d'inclure /contoleur/blog/modele/blog/get_billets.php et la ben oui tu te rend compte que le fichier et même les répertoires n'existe pas ;)

d'ailleurs c'est la cas pour tous les fichiers inclus dans tes scripts.

Pour solutionner le problème le mieux est soit de créer une constante ou une variable que l'on balade partout, soit de gérer proprement l'include path.

sachant que pour respecter ton modèle (qui est modèle, vue, contoleur[/url]) tu sépare toute les couches et donc tu respecte la logique objet : chacun est au maximum autonome, donc pas de global qui tienne, tu passe l'objet de connexion au sgbd en paramètre de ta fonction, ou dans le constructeur d'une classe. Tu peux aussi imaginer un autoload qui va s'occuper du chargement tous seul (et pour les adaptes même un registre de singleton ;) ).

dernière chose, dans le 1er fichier le lien vers le fichier de connexion au sgbd n'est pas bon il manque le répertoire blog, donc déjà ce fichier la doit te refouler :)


@+

Re: Modèle Vue Contrôle aucun affichage ou erreur

Posté : 30 juin 2011, 11:56
par liliade
Bonjour Mazarini et Moogli,

Mazarini j'ai mis les écho ( mouchards ) et toutes mes pages sont bien appelées.

Moogli
dernière chose, dans le 1er fichier le lien vers le fichier de connexion au sgbd n'est pas bon il manque le répertoire blog, donc déjà ce fichier la doit te refouler
j'avais rectifié avant de poster mais je n'avais pas refais le schéma. Donc pour la connexion c'est ok.

Maintenant il faudrait que j'essaie de mettre en pratique ce que tu me dis. Mais je ne connais pas singleton et je doute pouvoir mettre en application ce que tu expliques. Je suis bien dans php débutant.

Merci à tous les deux pour votre aide. Je vais essayer et encore essayer
Pour solutionner le problème le mieux est soit de créer une constante ou une variable que l'on balade partout, soit de gérer proprement l'include path

Re: Modèle Vue Contrôle aucun affichage ou erreur

Posté : 01 juil. 2011, 11:39
par moogli
le singleton c'est une possibilité, mais bon régle d'abord ton problème de chemin et tu n'aura plus de soucis ;)

@+

Re: Modèle Vue Contrôle aucun affichage ou erreur

Posté : 01 juil. 2011, 11:47
par Mazarini
@moogli, je pense qu'il a essayé d'appeler directement un script qui ne doit pas être appelé directement, mais inclu. (ce n'est qu'une supposition)

Autrement pour les echo, il faut les mettre aussi pour voir dans quelle partie du code tu passes et si ca correspond à ce que tu veux. Par exemple tu peux faire des echo des valeurs avant un "if" et en début du "if" et du "else" pour voir ou tu passes et pourquoi.

Re: Modèle Vue Contrôle aucun affichage ou erreur

Posté : 01 juil. 2011, 11:54
par moogli
wé je suis d'accord pour ce qui est des tests des scripts directement dans les répertoires ;)

Par contre autant le faire proprement :)

après vi faut debug :/


@+

Re: Modèle Vue Contrôle aucun affichage ou erreur

Posté : 08 juil. 2011, 17:12
par liliade
Bonjour à tous j'ai résolu mon problème cela venait pour beaucoup d'une erreur entre ma base de donnée et le scritp. Je ne sais comment fermé ce sujet. Merci quand même pour votre aide. Donc problème résolu. :D