problème sql

Ce topic a été résolu
lecteursdb

lecteursdb Le 19 août 2016 à 13:59 (Édité le 25 janvier 2019 à 17:52)

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
TheOldNoob

TheOldNoob Le 19 août 2016 à 18:27

Salut Lecteursdb,

Essais ça pour afficher plus d'erreur :

$db = new PDO('mysql:host=******;dbname=*****', '****', '*****', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

lecteursdb

lecteursdb Le 19 août 2016 à 18:42

Voici ce que ça donne après rajout du code:

TheOldNoob

TheOldNoob Le 19 août 2016 à 19:03

opk, et tu a quoi sur ta ligne 74?
lecteursdb

lecteursdb Le 19 août 2016 à 23:27

Exactement cette même ligne de code qui est déjà sur la ligne 57 de mon précédent code:
 
$req = $db->query($sql);
TheFlameflo

TheFlameflo Le 20 août 2016 à 00:13

Salut !

Tu peux toujours essayer un try/catch sur la requête.
Sinon, j'ai regardé la variable $limit et on dirait que la contenu est celui-ci : LIMITunNombre,deuxiemeNombre.
Je ne sais pas s'il y a un lien entre le faire qu'il n'y a pas d'espace entre le LIMIT et le premier nombre, mais tu peux toujours essayer.
Si ça ne fonctionne pas, essaye quand même le try/catch, ça pourrait donner la raison de l'erreur ! 😄

J’espère t'avoir aidé !
Bonne chance ! 😉
TheOldNoob

TheOldNoob Le 20 août 2016 à 00:15 (Édité le 20 août 2016 à 00:26)

Salut TheFlameflo,
Je viens de voir la même chose, je me demande si ça vien pas juste de la.

Normalement tu doit écrire 'LIMITE 10,20' pour afficher les resultat de 10 a 20, la tu dit 'LIMIT10,20', ça va forcement créer une erreur

Jeannot avait eu la même erreur dans son systeme de pagination.
lecteursdb

lecteursdb Le 20 août 2016 à 14:35

Salut ! 

'Pouvez-vous m'indiquer svp comment utiliser ce try/catch cas le cas présent ? avec ou sans espace au niveau du $limit le problème reste le même...
lecteursdb

lecteursdb Le 23 août 2016 à 14:06

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
lecteursdb

lecteursdb Le 31 août 2016 à 09:10

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
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte