Bonjour Moogli je rappelle mon problème et mets directement les scripts sur le forum,
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ôleur/
/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 aussi 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. Si j'enlève foreach et suivant dans ma page d'accueil c'est ce message me signalant que la variable $billet n'existe pas ou est indéfinie :
Notice: Undefined variable: billet in C:\Program Files\EasyPHP-5.3.6.0\www\BLOG\vue\commentaire\index.php on line 41
Notice: Undefined variable: billet in C:\Program Files\EasyPHP-5.3.6.0\www\BLOG\vue\commentaire\index.php on line 45
le
Notice: Undefined variable: billet in C:\Program Files\EasyPHP-5.3.6.0\www\BLOG\vue\commentaire\index.php on line 46
Notice: Undefined variable: billet in C:\Program Files\EasyPHP-5.3.6.0\www\BLOG\vue\commentaire\index.php on line 53
J'ai testé le script de façon intuitive c'est à dire sans tenir compte du mvc et ça marche correctement. Toutefois j'aimerai qu'il soit en MVC.
Voilà pourquoi je demande si quelqu'un maitrisant le MVC pourrait 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. J'ai bien mis l'array dans commentaire/get_billet.php.
contrôleurs globaux
ctraccueil
<?php
include_once('modele/accueil/connexion_sql.php');
if(!isset($_GET['section']) OR $_GET['section']=='index')
{
include_once('controleur/accueil/index.php');
}
?>
ctrcommentaire
<?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
<?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
<?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 ?!!!
<?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
[<!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
<!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>
Bonjour Moogli je rappelle mon problème et mets directement les scripts sur le forum,
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):
[b]Modèle/[/b]
/accueil/get_billets.php + connexion_sql.php
/commentaire/get_billets.php + connexion_sql.php
[b]Vue/[/b]
/accueil/index.php
/commentaire/index.php
[b]Contrôleur/[/b]
/accueil/index.php
/commentaire/index.php
Lorsque je clique à ma racine en local avec easyphp sur [b]ctraccueil.php [/b]j'accéde à ma page d'accueil avec la liste de mes articles, la date, résumé etc... ( [b][u]donc ici aucun problème ).[/u][/b]
Mais lorsque je vais sur la page commentaire via le lien "[b]commentaire[/b]" se trouvant sur ma page d'accueil, les billets ne s'affichent pas et l'erreur suivante se présente :
[b]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[/b]
Apparemment le [b]foreach[/b] semble aussi 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. Si j'enlève foreach et suivant dans ma page d'accueil c'est ce message me signalant que la variable $billet n'existe pas ou est indéfinie :
[b]Notice: Undefined variable: billet in C:\Program Files\EasyPHP-5.3.6.0\www\BLOG\vue\commentaire\index.php on line 41
Notice: Undefined variable: billet in C:\Program Files\EasyPHP-5.3.6.0\www\BLOG\vue\commentaire\index.php on line 45
le
Notice: Undefined variable: billet in C:\Program Files\EasyPHP-5.3.6.0\www\BLOG\vue\commentaire\index.php on line 46
Notice: Undefined variable: billet in C:\Program Files\EasyPHP-5.3.6.0\www\BLOG\vue\commentaire\index.php on line 53
[/b]
J'ai testé le script de façon intuitive c'est à dire sans tenir compte du mvc et ça marche correctement. Toutefois j'aimerai qu'il soit en MVC.
Voilà pourquoi je demande si quelqu'un maitrisant le MVC pourrait me venir en aide en tenant compte de mes scripts qui fonctionnent mis a part ce détail. [b]Je reporte ci-dessous chacun des scripts. Merci pour votre aide[/b]. J'ai bien mis l'array dans commentaire/get_billet.php.
[b][u]contrôleurs globaux[/u][/b]
[b]ctraccueil[/b][php]
<?php
include_once('modele/accueil/connexion_sql.php');
if(!isset($_GET['section']) OR $_GET['section']=='index')
{
include_once('controleur/accueil/index.php');
}
?> [/php]
[b]ctrcommentaire[/b]
[php]
<?php
include_once('modele/accueil/connexion_sql.php');
if(!isset($_GET['section']) OR $_GET['section']=='index')
{
include_once('controleur/accueil/index.php');
}
?> [/php]
[b][u]Modèle/[/u][/b]
[b]/accueil/get_billets.php[/b]
[php]<?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;
}
?> [/php]
[b]/commentaire/get_billets.php [/b]
[php]<?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;
}
?> [/php]
[b][u]Contrôleur/[/u][/b]
[b]accueil/index.php [/b]// 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 ?!!!
[php] <?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');
?>
[/php]
[b][u]Vue/[/u][/b]
[b]accueil/index.php[/b]
[html][<!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>
[/html]
[b]commentaire/index.php[/b]
[html]<!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> [/html]
<config>Windows 7 / Internet Explorer 9.0</config>