Probleme Création de Fonction en PHP/MVC
Yuushi_Sato
Messages postés
107
Statut
Membre
-
Yuushi_Sato Messages postés 107 Statut Membre -
Yuushi_Sato Messages postés 107 Statut Membre -
Bonjour,
Voila j'ai un problèmes lors de la création de la fonction de comptage de commentaires par news.
Impossible de retourner le nombre de commentaire par news.
Voila mon fichier Modele:
Mon fichier Controleur
Mon Fichier Index.php (Racine du site)
Merci de bien vouloir m'orienter car cela fait un moment que je buche dessus.
De Plus j'essaie aussi la pagination mais rien n'y fait, j'ai potasser pas mal de tutos mais je n'y arrive pas.
Aider-moi s'il vous plait!
Voila j'ai un problèmes lors de la création de la fonction de comptage de commentaires par news.
Impossible de retourner le nombre de commentaire par news.
Voila mon fichier Modele:
<?php
// Renvoie la liste des news du blog
function getNewss() {
$bdd = getBdd();
$newss = $bdd->query('select BIL_ID as id, BIL_DATE as date, BIL_AUTEUR as auteur, '
. ' BIL_TITRE as titre, BIL_CONTENU as contenu from T_BILLET'
. ' order by BIL_ID desc');
return $newss;
}
// Renvoie les informations sur une news
function getNews($idNews) {
$bdd = getBdd();
$news = $bdd->prepare('select BIL_ID as id, BIL_DATE as date, BIL_AUTEUR as auteur, '
. ' BIL_TITRE as titre, BIL_CONTENU as contenu from T_BILLET'
. ' where BIL_ID=?');
$news->execute(array($idNews));
if ($news->rowCount() == 1)
return $news->fetch(); // Accès à la première ligne de résultat
else
throw new Exception("Aucun billet ne correspond à l'identifiant '$idBillet'");
}
// Renvoie la liste des commentaires associés à un billet
function getCommentaires($idNews) {
$bdd = getBdd();
$commentaires = $bdd->prepare('select COM_ID as id, COM_DATE as date,'
. ' COM_AUTEUR as auteur, COM_CONTENU as contenu from T_COMMENTAIRE'
. ' where BIL_ID=?');
$commentaires->execute(array($idNews));
return $commentaires;
}
function count_commentaires($idNews) {
$bdd = getBdd();
<bold>/** Ici j'ai tester pas mal de requete inner join et autre et rien */</bold>
}
// Effectue la connexion à la BDD
// Instancie et renvoie l'objet PDO associé
function getBdd() {
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root',
'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
return $bdd;
}
Mon fichier Controleur
<?php
require 'Modele/Modele.php';
// Affiche la liste de toutes les news du blog
function accueil() {
$newss = getNewss();
<ital><bold> /* Appelle à la requête de comptage */</bold></ital>
$count_commentaires = count_commentaires($idnews);
require 'Vue/vueAccueil.php';
}
// Affiche les détails sur une news
function news($idNews) {
$news = getNews($idNews);
$commentaires = getCommentaires($idNews);
require 'Vue/vueBillet.php';
}
// Affiche une erreur
function erreur($msgErreur) {
require 'Vue/vueErreur.php';
}
Mon Fichier Index.php (Racine du site)
<?php
require 'Controleur/Controleur.php';
try {
if (isset($_GET['action'])) {
if ($_GET['action'] == 'news') {
if (isset($_GET['id'])) {
$idNews = intval($_GET['id']);
if ($idNews != 0) {
news($idNews);
}
else
throw new Exception("Identifiant de billet non valide");
}
else
throw new Exception("Identifiant de billet non défini");
}
else
throw new Exception("Action non valide");
}
else { // aucune action définie : affichage de l'accueil
accueil();
}
}
catch (Exception $e) {
erreur($e->getMessage());
}
| EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :ICI Merci d'y penser dans tes prochains messages. |
Merci de bien vouloir m'orienter car cela fait un moment que je buche dessus.
De Plus j'essaie aussi la pagination mais rien n'y fait, j'ai potasser pas mal de tutos mais je n'y arrive pas.
Aider-moi s'il vous plait!
A voir également:
- Probleme Création de Fonction en PHP/MVC
- Fonction si et - Guide
- Creation de site web - Guide
- Creation de compte google - Guide
- Creation compte gmail - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
3 réponses
Bonjour,
Tu dis avoir un souci ....
mais dans ton code" :
Tu ne nous montres pas ce que tu as essayé.....
Comment veux tu que l'on corrige ce qui ne va pas ?
D'ailleurs.. ton souci il est au niveau du code php à proprement parlé ... ou au niveau de la requête ???
Si c'est pour la requête... pourquoi postes tu ta question dans le forum php ?
Quoi qu'il en soit... montres nous ton code "tenté" ... et donnes nous également la structure de tes tables.
Sachant que la requête cherchée doit sûrement (et simplement) être un truc du genre :
Tu dis avoir un souci ....
mais dans ton code" :
function count_commentaires($idNews) {
$bdd = getBdd();
<bold>/** Ici j'ai tester pas mal de requete inner join et autre et rien */</bold>
}
Tu ne nous montres pas ce que tu as essayé.....
Comment veux tu que l'on corrige ce qui ne va pas ?
D'ailleurs.. ton souci il est au niveau du code php à proprement parlé ... ou au niveau de la requête ???
Si c'est pour la requête... pourquoi postes tu ta question dans le forum php ?
Quoi qu'il en soit... montres nous ton code "tenté" ... et donnes nous également la structure de tes tables.
Sachant que la requête cherchée doit sûrement (et simplement) être un truc du genre :
SELECT COUNT(C.*) as NB FROM T_COMMENTAIRE C WHERE C.BIL_ID =?
Voici la table des commentaires:
Et La Table des billet News
-- -- Structure de la table `T_COMMENTAIRE` -- CREATE TABLE IF NOT EXISTS `T_COMMENTAIRE` ( `COM_ID` int(11) NOT NULL AUTO_INCREMENT, `COM_DATE` int(20) DEFAULT NULL, `COM_AUTEUR` varchar(100) NOT NULL, `COM_CONTENU` varchar(200) NOT NULL, `BIL_ID` int(11) NOT NULL, PRIMARY KEY (`COM_ID`), KEY `fk_com_bil` (`BIL_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;
Et La Table des billet News
-- -- Structure de la table `T_BILLET` -- CREATE TABLE IF NOT EXISTS `T_BILLET` ( `BIL_ID` int(11) NOT NULL AUTO_INCREMENT, `BIL_DATE` int(20) NOT NULL, `BIL_AUTEUR` varchar(100) NOT NULL, `BIL_TITRE` varchar(100) NOT NULL, `BIL_CONTENU` longtext NOT NULL, PRIMARY KEY (`BIL_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
Bonjour, quelqu'un as t'il la solution?
Modification de la page Controleur.php pour affichage de la pagination
Modification de la page Modele.php pour ajout de la fonction paginer et comptage de commentaire, comme ceci :
Voila mes différents problèmes rencontré:
- Impossibilité d'affichage la news correspondant à la page 2 (sachant qu'il y a 3 news dans la BDD et que mon affichage est limité à 2 news par page).c'est juste pour faire des essaie des news que j'ai mis 2).
- Impossibilité de retourner le nombre de commentaires associé à une news (la valeur retourner est égale à 0). Je pense que celà viens du fait que l'id de la news n'est pas retourner.
Alors j'aimerais savoir comment faire pour résoudre tous ces problèmes, parce que la j'ai vraiment besoin que l'on m'explique.
Modification de la page Controleur.php pour affichage de la pagination
<?php
require 'Modele/Modele.php';
// Affiche la liste de tous les billets du blog
function accueil() {
$newss = getNewss();
$iNombreDeMessages = countNews();
$count_commentaires = countCommentaires();
if(!empty($_GET['Page'])
&& is_numeric($_GET['Page'])
&& ($_GET['Page']>=1))
{
// Numéro de la page courante
$iNumeroDePageCourante = 1;
$iNumeroDePageCourante = intval($_GET['Page']);
$iOffsetSelection = ($iNumeroDePageCourante - 1) * 2;
}
require 'Vue/vueAccueil.php';
}
// Affiche les détails sur un billet
function news($idNews) {
$news = getNews($idNews);
$commentaires = getCommentaires($idNews);
require 'Vue/vueBillet.php';
}
// Affiche une erreur
function erreur($msgErreur) {
require 'Vue/vueErreur.php';
}
Modification de la page Modele.php pour ajout de la fonction paginer et comptage de commentaire, comme ceci :
<?php
function countNews() {
$bdd = getBdd();
// Nombre de messages enregistrés dans la BDD
$iNombreDeMessages = 0;
$aInfos = array();
// Comptage du nombre de messages en base de données
$sql = $bdd->query('SELECT COUNT(*) AS nombreMessages FROM T_BILLET');
$sql->setFetchMode(PDO::FETCH_ASSOC);
$aInfos = $sql->fetch();
$iNombreDeMessages = intval($aInfos['nombreMessages']);
return $iNombreDeMessages;
}
// Renvoie la liste des billets du blog
function getNewss() {
$bdd = getBdd();
$iNombreDeMessages = countNews();
// Tableau stockant les messages récupérés de la BDD
$newss = array();
// Offset à partir duquel on récupère les messages dans la BDD
$iOffsetSelection = 0;
$sql = null;
// Récupération des messages en fonction de la pagination
if ($iNombreDeMessages > 0)
{
$sql = $bdd->prepare('SELECT BIL_ID as id, BIL_DATE as date, BIL_AUTEUR as auteur, BIL_TITRE as titre, BIL_CONTENU as contenu, BIL_SOURCE as source FROM T_BILLET ORDER BY BIL_ID DESC LIMIT :offset, '. 2);
$sql->bindParam(':offset', $iOffsetSelection, PDO::PARAM_INT);
$sql->execute();
// Récupération des résultats sélectionnés dans le tableau $aListeMessages
$newss = $sql->fetchAll(PDO::FETCH_ASSOC);
return $newss;
}
}
// Renvoie les informations sur un billet
function getNews($idNews) {
$bdd = getBdd();
$news = $bdd->prepare('select BIL_ID as id, BIL_DATE as date, BIL_AUTEUR as auteur, BIL_TITRE as titre, BIL_CONTENU as contenu, BIL_SOURCE as source from T_BILLET where BIL_ID=?');
$news->execute(array($idNews));
if ($news->rowCount() == 1)
return $news->fetch(); // Accès à la première ligne de résultat
else
throw new Exception("Aucun billet ne correspond à l'identifiant '$idBillet'");
}
// Renvoie la liste des commentaires associés à un billet
function getCommentaires($idNews) {
$bdd = getBdd();
$commentaires = $bdd->prepare('select COM_ID as id, COM_DATE as date, COM_AUTEUR as auteur, COM_CONTENU as contenu from T_COMMENTAIRE where BIL_ID=?');
$commentaires->execute(array($idNews));
return $commentaires;
}
function countCommentaires() {
$bdd = getBdd();
getNewss();
$idNews = $_GET['id'];
$sql = $bdd->query('SELECT COUNT(*) AS nombreCommentaire FROM T_COMMENTAIRE WHERE BIL_ID=".$idNews."');
$sql->setFetchMode(PDO::FETCH_ASSOC);
$count_commentaires = $sql->fetch();
return $count_commentaires;
}
// Fonction de pagination des résultats
// Retourne le code HTML des liens de pagination
function paginer($nb_results, $nb_results_p_page, $numero_page_courante, $nb_avant, $nb_apres, $premiere, $derniere)
{
// Initialisation de la variable a retourner
$resultat = '';
// nombre total de pages
$nb_pages = ceil($nb_results / $nb_results_p_page);
// nombre de pages avant
$avant = $numero_page_courante > ($nb_avant + 1) ? $nb_avant : $numero_page_courante - 1;
// nombre de pages apres
$apres = $numero_page_courante <= $nb_pages - $nb_apres ? $nb_apres : $nb_pages - $numero_page_courante;
// premiere page
if ($premiere && $numero_page_courante - $avant > 1)
{
$resultat .= '<span class="pagelink"><a href="'. htmlspecialchars($_SERVER['PHP_SELF']) .'?Page=1" title="Première page">««</a></span>';
}
// page precedente
if ($numero_page_courante > 1)
{
$resultat .= '<span class="pagelink"><a href="'. htmlspecialchars($_SERVER['PHP_SELF']) .'?Page='. ($numero_page_courante - 1) .'" title="Page précédente '. ($numero_page_courante - 1) . '">«</a></span>';
}
// affichage des numeros de page
for ($i = $numero_page_courante - $avant; $i <= $numero_page_courante + $apres; $i++)
{
// page courante
if ($i == $numero_page_courante)
{
$resultat .= '<span class="pagecurrent">' . $i . '</span>';
}
else
{
$resultat .= '<span class="pagelink"><a href="'. htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES) .'?Page='. $i .'" title="Consulter la page '. $i . '">' . $i . '</a></span>';
}
}
// page suivante
if($numero_page_courante < $nb_pages)
{
$resultat .= '<span class="pagelink"><a href="'. htmlspecialchars($_SERVER['PHP_SELF']) .'?Page='. ($numero_page_courante + 1) .'" title="Consulter la page '. ($numero_page_courante + 1) . ' !">»</a></span>';
}
// derniere page
if ($derniere && ($numero_page_courante + $apres) < $nb_pages)
{
$resultat .= '<span class="pagelink"><a href="'. htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES) .'?Page='. $nb_pages .'" title="Dernière page">»»</a></span>';
}
// On retourne le resultat
return $resultat;
}
// Effectue la connexion à la BDD
// Instancie et renvoie l'objet PDO associé
function getBdd() {
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root',
'', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
return $bdd;
}
Voila mes différents problèmes rencontré:
- Impossibilité d'affichage la news correspondant à la page 2 (sachant qu'il y a 3 news dans la BDD et que mon affichage est limité à 2 news par page).c'est juste pour faire des essaie des news que j'ai mis 2).
- Impossibilité de retourner le nombre de commentaires associé à une news (la valeur retourner est égale à 0). Je pense que celà viens du fait que l'id de la news n'est pas retourner.
Alors j'aimerais savoir comment faire pour résoudre tous ces problèmes, parce que la j'ai vraiment besoin que l'on m'explique.
function count_commentaires($idNews) { $bdd = getBdd(); $count_commentaire = $bdd->prepare('SELECT COUNT(C.*) as NB' . ' FROM T_COMMENTAIRE C' . ' WHERE C.BIL_ID =?'); $count_commentaire->execute(array($idNews)); return $count_commentaire; }Voila comment j'ai procéder et voila l'erreur que j'obtient :
Une erreur est survenue : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) as NB FROM T_COMMENTAIRE C WHERE C.BIL_ID =NULL' at line 1
Donc je pense que je dois avoir un probleme lors de l'envoie de l'$idnews mais je vois pas quoi.
Désolé de l'erreur syntaxique lors de mon premier poste, Merci.