Yuushi_Sato
Messages postés104Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention18 février 2021
-
Modifié par Yuushi_Sato le 13/06/2016 à 17:43
Yuushi_Sato
Messages postés104Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention18 février 2021
-
20 juin 2016 à 07:58
Bonjour, quelqu'un as t'il la solution?
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;
}
Ainsi que index.php
<?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 News non valide");
}
else
throw new Exception("Identifiant de News 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());
}
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.
Yuushi_Sato
Messages postés104Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention18 février 20211 16 juin 2016 à 08:46
Bonjour,
Personne pour me donner un pitit coup de main!
S'il vous plait je besoin de votre aide.
Reivax962
Messages postés3671Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention11 février 20211 011 16 juin 2016 à 11:19
Bonjour,
// Offset à partir duquel on récupère les messages dans la BDD
$iOffsetSelection = 0;
Tu remets toujours à 0 la valeur de ton offset dans la fonction getNewss
Xavier
Yuushi_Sato
Messages postés104Date d'inscriptionmardi 1 décembre 2009StatutMembreDernière intervention18 février 20211 20 juin 2016 à 07:58
Bonjour Reivax
Merci de ta réponse j'ai fais mes modification.
Pour la pagination et le nombres de commentaires par news, j'ai fais les modification directement dans mon fichier de vue (VueAccueil.php).
Mais impossible de créer la fonction.
Je laisse pour le moment comme sa, le temps de finir un autre projet.
16 juin 2016 à 11:19
Tu remets toujours à 0 la valeur de ton offset dans la fonction getNewss
Xavier
20 juin 2016 à 07:58
Merci de ta réponse j'ai fais mes modification.
Pour la pagination et le nombres de commentaires par news, j'ai fais les modification directement dans mon fichier de vue (VueAccueil.php).
Mais impossible de créer la fonction.
Je laisse pour le moment comme sa, le temps de finir un autre projet.
Merci de ta remarque. (Vue et corriger)