Précédent   Forum des professionnels en informatique > PHP > Scripts > Blog
Blog Forum d'entraide sur les scripts de Blogs pour PHP (WordPress, DotClear, b2evolution etc.). Avant de poster -> Blogs en PHP, Cours WordPress
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/07/2011, 09h39   #1
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 1
Points : 1
Par défaut MVC blog billets ne s'affichent pas

Bonjour,

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ôle/
/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 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.

Quelqu'un maitrisant le MVC pourrait-il 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.

contrôleurs globaux

ctraccueil
Code :
1
2
3
4
5
6
7
8
<?php
include_once('modele/accueil/connexion_sql.php');
if(!isset($_GET['section']) OR  $_GET['section']=='index')
{
include_once('controleur/accueil/index.php');
 
}
?>
ctrcommentaire
Code :
1
2
3
4
5
6
7
8
<?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

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 <?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

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 <?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 ?!!!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 <?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

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!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

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<!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>
bizebi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 18h36   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
J'avais encore jamais vu de MVC en procédural

Bref, vu que tu as l'air de rebondir de script en script comme un gentil lapin, tu devrais te méfier de la porté des variables entre les scripts. Tu devrais utiliser le mot clé Global pour que les "vues" puissent utiliser les données que leurs "renvoient" les "contrôleurs".
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 07h22   #3
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 8
Points : 1
Points : 1
Merci Monsieur DELESPIERRE Benjamin.
bizebi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h04.


 
 
 
 
Partenaires

Hébergement Web