Bonjour,

J'obtiens l'erreur suivante :
Fatal error: Call to a member function fetch_object() on a non-object in ...\projet_son\pages\articles.php on line 76
par rapport au code ci-dessous:

<?php 
   require "includes/connect_db.php";
        $req = $db->query('SELECT id FROM lisy_posts');
   $nbre_total_articles = $req->rowCount();
   $nbre_articles_par_page = 12;
   $nbre_pages_max_gauche_et_droite = 4;
   $last_page = ceil($nbre_total_articles / $nbre_articles_par_page);
   if(isset($_GET['page']) && is_numeric($_GET['page'])){
      $page_num = $_GET['page'];
   } else {
      $page_num = 1;
   }
   if($page_num < 1){
      $page_num = 1;
   } else if($page_num > $last_page) {
      $page_num = $last_page;
   }
   $limit = 'LIMIT'.($page_num - 1) * $nbre_articles_par_page. ',' . $nbre_articles_par_page;
   //Cette requête sera utilisée plus tard
   $sql = "SELECT *
                FROM lisy-posts ORDER BY id DESC $limit";
   $pagination = '';
   if($last_page != 1){
      if($page_num > 1){
         $previous = $page_num - 1;
         $pagination .= '<a href="index.php?page='.$previous.'">Précédent</a>    ';
         for($i = $page_num - $nbre_pages_max_gauche_et_droite; $i < $page_num; $i++){
            if($i > 0){
               $pagination .= '<a href="index.php?page='.$i.'">'.$i.'</a>  ';
            }
         }
      }
      $pagination .= '<span class="active">'.$page_num.'</span> ';
      for($i = $page_num+1; $i <= $last_page; $i++){
         $pagination .= '<a href="index.php?page='.$i.'">'.$i.'</a> ';

         if($i >= $page_num + $nbre_pages_max_gauche_et_droite){
            break;
         }
      }
      if($page_num != $last_page){
         $next = $page_num + 1;
         $pagination .= '<a href="index.php?page='.$next.'">Suivant</a> ';
      }
   }
        ?>
<!-- Blog Content
    ================================================== --> 
    <div class="row">
        <!-- Blog Posts
        ================================================== --> 
        <div class="span8 blog">
            <!-- Blog Post 1 -->
            <?php 
          echo "<p><strong>($nbre_total_articles)</strong> articles au total !<br/>";
         echo "Page <b>$page_num</b> sur <b>$last_page</a>";
         $req = $db->query($sql);
         while($data = $req->fetch_object()){
            echo '<div class="post"><b>'.$data['title'].'</b><br/>'.$data['content'].'<br/>Publié le '.$data['date'].'</div>';
         }

         echo '<div id="pagination">'.$pagination.'</div>';
         $req->closeCursor();
      ?>

La connexion à la BDD est bien établie par

<?php 
   try{   
      $db = new PDO('mysql:host=******;dbname=*****', '****', '*****');
   } catch(PDOException $e){
      die('Erreur: '.$e->getMessage());
   }
?>

les étoiles ne sont, bien entendu, pas dans mon code...
Merci d'avance pour votre aide

6 réponses


Cyrille Mbia
Auteur
Réponse acceptée

Bonjour
Problème résolu (solution trouvée dans un autre forum...Dans la structure de mon site, j'ai une page index dans laquelle j'ai défini des feuilles de style et qui inclus les autres pages de mon site avec du php.
La seule page que devrait voir le navigateur, c'est donc ma page index (avec les paramètres nécessaires pour inclure les contenus à afficher).

Si dans mon lien j'indique au navigateur d'ouvrir ma page article, le navigateur va l'ouvrir directement sans passer par ma page index et donc sans effectuer les traitements de cette dernière.

Mon lien devrait être quelque chose du genre <a href=\"indexphp?page=articles&num=$i\">$i</a>. j'appelerais ainsi la page index.php en lui demandant d'ouvrir / inclure le contenu de articles.php, ce script ayant alors accès à $_GET['num'] pour savoir quel numéro de page afficher. Si cela pourrait aider d'autres...cordialement

Bonjour, c'est simple, la méthode fetch_object n'existe pas pour l'object PDO. Il faut utiliser

$req->fetch(PDO::FETCH_OBJ);
//ou
$req->fetchObject();

Ensuite, il manque une espace après LIMIT lors de la déclaration de la variable $limit
ce qui fausse la reqûete SQL.
Voilà tout.

salut 'tete0148',

Merci déjà de m'avoir répondu

J'ai effectué les modifications sur les lignes mais jusque là toujours pas de changement

Voici les lignes qui ont été modifiées

$limit = 'LIMIT ' . ($page_num - 1) * $nbre_articles_par_page. ',' . $nbre_articles_par_page;

et

$req = $db->query($sql);
         while($data = $req->fetch(PDO::FETCH_OBJ)){
            echo '<div class="post"><b>'.$data['title'].'</b><br/>'.$data['content'].'<br/>Publié le '.$data['date'].'</div>';
         }

J'obtiens ces nouvelles erreurs ci

Fatal error: in C:\wamp\www\projet_son\pages\articles.php on line 58
( ! ) PDOException: in C:\wamp\www\projet_son\pages\articles.php on line 58

et ma ligne 58 la voici

$req = $db->query($sql);

Hello,
Je suppose que c'est déjà essayé etc mais as tu fais un var_dump($limit) et un var_dump($req) pour voir ce que cela te retourne? As tu testé sur phpmyadmin (ou équivalent, je sais pas ce que tu utilise) pour voir ce que tu retourne la requête si tu la fait à la main?

Sinon essaye de rajouter un PDO error info dans ton catch de connexion à PDO ça peut parfois aider

http://php.net/manual/fr/pdo.errorinfo.php

Bonjour,

Ce que j'ai fais c'est modifier ma requete après le "$limit"
$sql = "SELECT * FROM lisy-posts ORDER BY id DESC $limit";
en

$sql = "SELECT id, title, content, DATE_FORMAT(date,'%d/%m/%Y à %Hh%imin%ss') as date FROM lisy_posts ORDER BY id DESC $limit";

et également le

$req->fetch_object()
en
$req->fetch()

et ma pagination s'est affichée normalement sans erreurs...

Voici le nouveau code:

<?php 
   require "includes/f-connect.php";
        $req = $db->query('SELECT id FROM lisy_posts');
   $nbre_total_articles = $req->rowCount();
   $nbre_articles_par_page = 2;
   $nbre_pages_max_gauche_et_droite = 4;
   $last_page = ceil($nbre_total_articles / $nbre_articles_par_page);
   if(isset($_GET['page']) && is_numeric($_GET['page'])){
      $page_num = $_GET['page'];
   } else {
      $page_num = 1;
   }
   if($page_num < 1){
      $page_num = 1;
   } else if($page_num > $last_page) {
      $page_num = $last_page;
   }
   $limit = 'LIMIT '.($page_num - 1) * $nbre_articles_par_page. ',' . $nbre_articles_par_page;

   //Cette requête sera utilisée plus tard
   $sql = "SELECT id, title, content, DATE_FORMAT(date,'%d/%m/%Y à %Hh%imin%ss') as date FROM lisy_posts ORDER BY id DESC $limit";
   $pagination = '';
   if($last_page != 1){
      if($page_num > 1){
         $previous = $page_num - 1;
         $pagination .= '<a href="articles.php?page='.$previous.'">Précédent</a>    ';
         for($i = $page_num - $nbre_pages_max_gauche_et_droite; $i < $page_num; $i++){
            if($i > 0){
               $pagination .= '<a href="articles.php?page='.$i.'">'.$i.'</a>  ';
            }
         }
      }
      $pagination .= '<span class="active">'.$page_num.'</span> ';
      for($i = $page_num+1; $i <= $last_page; $i++){
         $pagination .= '<a href="articles.php?page='.$i.'">'.$i.'</a> ';

         if($i >= $page_num + $nbre_pages_max_gauche_et_droite){
            break;
         }
      }
      if($page_num != $last_page){
         $next = $page_num + 1;
         $pagination .= '<a href="articles.php?page='.$next.'">Suivant</a> ';
      }
   }
        ?>
<!-- Blog Content
    ================================================== --> 
    <div class="row">
        <!-- Blog Posts
        ================================================== --> 
        <div class="span8 blog">
            <!-- Blog Post 1 -->
            <?php 
          echo "<p><strong>($nbre_total_articles)</strong> articles au total !<br/>";
         echo "Page <b>$page_num</b> sur <b>$last_page</a>";
         $req = $db->query($sql);

         while($data = $req->fetch()){
            echo '<div class="post"><b>'.$data['title'].'</b><br/>'.$data['content'].'<br/>Publié le '.$data['date'].'</div>';
         }

         echo '<div id="pagination">'.$pagination.'</div>';
         $req->closeCursor();
      ?>

Cependant je rencontre un nouveau problème avec les liens de ma pagination, ils

ne me renvoient pas à la page désirée.

Par exemple si je suis à la page 1, je clique sur la page 2 mais je suis renvoyé vers une page qui n'existe pas. Idem pour les autres pages

Je rappelle que je travail suivant une architecture MVC basique. Ma page articles.php se situe dans un dossier pages, qui lui même est situé dans le dossier principal de mon site, au même
niveau de ce dossier pages se trouve mon dossier index.php par lequel toutes les autres pages du site sont générées. Exemple:

dossier_du_site(
index.php
dossier pages(

                articles.php)
                )

                  Merci de votre aide

hello personne pour m'aider ?