MVC modèle vue contrôle erreur affichage

Résolu/Fermé
ANTHURIUMRE - 21 juin 2011 à 10:51
 ANTHURIUMRE - 13 juil. 2011 à 19:19
Bonjour,
J'essaie de mettre sur pied un blog en respectant la nomenclature Modèle Vue Contrôle dont vous trouverez les fichier ci-dessous. Mais quand je lance ma Vue le message suivant s'affiche. Pourriez-m'aider s'il vous plaît. Merci.

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

fichier modèle:

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

$req=$bdd->prepare('SELECT id, image, categorie, titre, contenu, auteur, 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;
}


Fichier Vue

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


Fichier contrôle

<?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']=n12br(htmlspecialchars($billet['contenu']));
}


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


A voir également:

3 réponses

Utilisateur anonyme
21 juin 2011 à 11:18
Bonjour,

Manifestement vous avez un souci avec get_billets($offset,$limit) qui ne vous renvoie rien, vérifiez avec dump($billets) dans le modèle avant de faire le return.
0
ANTHURIUMRE
21 juin 2011 à 12:19
Bonjour Neoprog67,

J'ai fait ce que vous m'avez dit mais j'ai toujours le message d'erreur. Merci quand même pour la suggestion.
0
votre variable $billets contient bien quelque chose avant le return ?
0
ANTHURIUMRE
21 juin 2011 à 20:24
j'ai oublié de dire que j'ai entre autre a ma racine de easyphp soit dans wwww un fichier de contrôleur global nommé blog.php et dans mon répertoire "modèle" un fichier connexion_sql.php et quand je clique sur blog.php le message suivant s'affiche :

Warning: include_once(modele/connexion_sql.php) [function.include-once]: failed to open stream: No such file or directory in C:\Program Files\EasyPHP-5.3.6.0\www\blog.php on line 2

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

Fatal error: Call to a member function prepare() on a non-object in C:\Program Files\EasyPHP-5.3.6.0\www\modele\blog\get_billets.php on line 8


Voici ci-dessous mes deux autres fichiers pour mieux comprendre le foncitonnement de mon blog MVC. Merci pour votre aide.

fichier contrôleur globale blog.php

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



fichier connexion_squl.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());
}
?>
0
Utilisateur anonyme
22 juin 2011 à 07:46
Bonjour,

Ben ne cherchez pas plus loin. Votre variable $bdd n'est pas instanciée, puisque vous ne faites pas la connexion SQL.

Ce message Warning: include_once(modele/connexion_sql.php) [function.include-once]: failed to open stream: No such file or directory in C:\Program Files\EasyPHP-5.3.6.0\www\blog.php on line 2

indique que blog.php cherche un fichier C:\Program Files\EasyPHP-5.3.6.0\www\modele\connexion_sql.php et qu'il ne le trouve pas, le fichier existe bien ?
0
ANTHURIUMRE
22 juin 2011 à 08:27
Bonjour à tous et Bonjour neoprog67 et merci pour ton aide,

Il ne le trouvait pas car j'avais commis un oubli dans le chemin il fallai que je mette
\modele/blog/connexion_sql.php
Ceci étant dit aucun billet ne s'affiche si ce n'est le titre de la page de mon blog.

Et quand je vais dans mon répertoire vue/blog qui contient index.php j'ai le message suivant :

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

et de même quand je vais dans mon répertoire controleur/blog qui contient index.php j'ai 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\controleur\blog\index.php on line 5
0
Utilisateur anonyme
22 juin 2011 à 08:34
Même problème
index.php n'accède pas à modele/blog/get_billets.php, à cause d'un mauvais include_once
0
ANTHURIUMRE
22 juin 2011 à 10:53
Oui mais j'ai beau chercher je n'y arrive pas. Commment y remédier. en suivant ce lien

ARBORESCENCE

on aura accès à une image de l'arborescence de mon site.

MERCI pour votre aide.
0
ANTHURIUMRE
22 juin 2011 à 10:54
Bon je croyois pouvoir mettre un lien sur CMM mais je n'y arrive pas pourtant j'ai suivi les indications sur les forums.
0
Bonjour à tous. Un élement dans ma base de donné n'était pas orthorgraphié comme dans mon script. Maintenant j'ai corrigé et tout va bien. Merci pour votre aide. A+
0
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 323
8 juil. 2011 à 17:21
Bonsoir,

Tu as signalé à la Conciergerie que plusieurs de tes questions sont résolues...

Il est d'usage, quand on trouve la réponse soi-même, de venir la donner pour l'édification des autres personnes intéressées.

Cordialement.
0