Pagination des catégories et sous-catégories

Résolu
max30_3775 Messages postés 185 Statut Membre -  
max30_3775 Messages postés 185 Statut Membre -
Bonjour, je sollicite votre aide car j'ai un problème au niveau de la pagination pour compter les annonces. Si vous avez une solution ... :)
Voici l'url quand je clique sur la page 2 par exemple: http://projetsite/principales/affichage.php?page=2
Les erreurs que j'obtiens sont les suivantes:
) Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de '' à la ligne 5 in C:\wamp64\www\Projetsite\principales\affichage.php on line 16
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de '' à la ligne 5 in C:\wamp64\www\Projetsite\principales\affichage.php on line 16

Le code de la page des fonctions:
function getAnnonceCategorie($id_cat){
      global $bdd;
      $page = (!empty($_GET["page"]) )? intval($_GET["page"]) : 1;
      $nbr_elements_par_page=5;
      $debut=($page-1)*$nbr_elements_par_page;
          
     $sql = ' SELECT  A.*
                      ,C.nom_'.$sql_lang.' AS CATEGORIE
                      ,V.ville_'.$sql_lang.' AS VILLE
               FROM annonces A
               LEFT JOIN categories C ON C.id = A.id_categorie
               LEFT JOIN villes V ON V.id = A.id_ville
               WHERE A.id_categorie = :id_cat
               OR C.id_parent = :id_cat
               ORDER BY A.created_date DESC
               LIMIT '.$debut.','.$nbr_elements_par_page.' ';
      try {
//suite...
...
function affichageAnnonce($id_cat){
    global $bdd;
    $annonces = getAnnonceCategorie($id_cat);
    $images = getPhotosAnnonces($annonces);
  
//suite...


Le code dans la page affichage.php:
$id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;

$anouncement = affichageAnnonce($id_cat);

//On récupère le nombre d'enregistrements
$count= "SELECT COUNT(A.id) AS cpt
FROM annonces A
LEFT JOIN categories C ON C.id = A.id_categorie
WHERE C.id_parent=$id_cat";
$stmt= $bdd->prepare($count);
$stmt->execute();
$tstmt=$stmt->fetchAll();  //La ligne 16 de l'erreur

//Pagination
$page = (!empty($_GET["page"]) )? intval($_GET["page"]) : 1;
$nbr_elements_par_page=5;
$nbre_de_pages=ceil($tstmt[0]["cpt"]/$nbr_elements_par_page);
$debut=($page-1)*$nbr_elements_par_page;[/code]

Je pense que la numérotation est bien:
[code=php]    echo"<div class='pagination'>";
        for($i=1;$i<=$nbre_de_pages;$i++){
   echo "<a class='paginationlien' href='?page=$i'>$i</a>" ;
        
     
        }
        echo"</div>"; //fin div pagination


Configuration: Windows / Chrome 98.0.4758.82

12 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,

    Fais donc un echo de ta variable $sql et montre nous ce que ça donne.
    0
  2. max30_3775 Messages postés 185 Statut Membre
     
    Bonjour Jordane,
    Un echo de la variable $tstmt donne l'erreur suivante:
    Notice: Array to string conversion in C:\wamp64\www\Projetsite\principales\affichage.php on line 18
    Array

    et un vardump:
    C:\wamp64\www\Projetsite\principales\affichage.php:19:
    array (size=1)
      0 => 
        array (size=1)
          'cpt' => string '15' (length=2)
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour,
      as-tu essayé la variable $sql?
      0
  3. max30_3775 Messages postés 185 Statut Membre
     
    Bonjour yg_be,
    Pour la variable $sql voici l'echo:
    SELECT A.* ,C.nom_fr AS CATEGORIE ,V.ville_fr AS VILLE FROM annonces A LEFT JOIN categories C ON C.id = A.id_categorie LEFT JOIN villes V ON V.id = A.id_ville WHERE A.id_categorie = :id_cat OR C.id_parent = :id_cat ORDER BY A.created_date DESC LIMIT 0,5


    Je pensais à $count, dont l'echo et le vardump sont les suivants:
    SELECT COUNT(A.id) AS cpt FROM annonces A LEFT JOIN categories C ON C.id = A.id_categorie WHERE A.id_categorie = 1 OR C.id_parent=1


    C:\wamp64\www\Projetsite\principales\affichage.php:16:string 'SELECT COUNT(A.id) AS cpt
    FROM annonces A
    LEFT JOIN categories C ON C.id = A.id_categorie
    WHERE A.id_categorie = 1
    OR C.id_parent=1' (length=135)
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Peux-tu nous montrer le code complet (de la première à la dernière ligne) c'est-à-dire y compris avec les balise PHP tel qu'il est écrit...
      De ton fichier
      C:\wamp64\www\Projetsite\principales\affichage.php
      0
  4. max30_3775 Messages postés 185 Statut Membre
     
    La page des fonctions cmdaffichage.php dans le dossier control:

    function getAnnonceCategorie($id_cat){
          global $bdd;
          $sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : 'fr';
          $page = (!empty($_GET["page"]) )? intval($_GET["page"]) : 1;
          $nbr_elements_par_page=5;
          $debut=($page-1)*$nbr_elements_par_page;
         
         
         
         $sql = ' SELECT  A.*
                          ,C.nom_'.$sql_lang.' AS CATEGORIE
                          ,V.ville_'.$sql_lang.' AS VILLE
                   FROM annonces A
                   LEFT JOIN categories C ON C.id = A.id_categorie
                   LEFT JOIN villes V ON V.id = A.id_ville
                   WHERE A.id_categorie = :id_cat
                   OR C.id_parent = :id_cat
                   ORDER BY A.created_date DESC
                   LIMIT '.$debut.','.$nbr_elements_par_page.' ';
    
                   echo $sql;
                   var_dump($sql);
          try {
            $req = $bdd->prepare($sql);
            $req->execute( array('id_cat'=>$id_cat) );
            $res = $req->fetchAll(PDO::FETCH_ASSOC);
          
          } catch (Exception $e) {
            echo "Erreur dans la requête " . $sql;
          }
          // le temps des tests pour voir le résultat
          return $res;
        }
    
    
    
    
    
        function getPhotosAnnonces($annonces) {
          global $bdd;
        
          $sql = 'SELECT id_annonce,filepath as IMG
          FROM images_annonces
          WHERE id_annonce IN (' . implode(',', array_column($annonces, 'id')) . ')';
    
          try {
            $req = $bdd->prepare($sql);
            $req->execute();
            $res = $req->fetchAll(PDO::FETCH_GROUP);
    
          } catch (Exception $e) {
            echo "Erreur dans la requête " . $sql;
          }
          // le temps des tests pour voir le résultat
          return $res;
        }
    
     
    
      function affichageAnnonce($id_cat){
        global $bdd;
        $annonces = getAnnonceCategorie($id_cat);
        $images = getPhotosAnnonces($annonces);
      
        $res = [];
        foreach ($annonces as $R) {
          $res[$R['id']] = $R;
          $imgs = !empty($images[$R['id']]) ? $images[$R['id']] : NULL;
          if(!empty($imgs)){
            foreach($imgs as $I){
              $res[$R['id']]['images'][] = !empty($I['IMG']) ? $I['IMG'] : null;
            }
          }else{
              $res[$R['id']]['images'] = null;
          }
         
        }
        return $res;
          
      }
    
    


    Et la page d'affichage.php dans le dossier principales

    <?php
    include "../cnx.php";
    include "../control/cmdaffichage.php";
    include "../header.php";
    
    
    $id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
    //On récupère le nombre d'enregistrements
    $count= "SELECT COUNT(A.id) AS cpt
    FROM annonces A
    LEFT JOIN categories C ON C.id = A.id_categorie
    WHERE A.id_categorie = $id_cat
    OR C.id_parent=$id_cat";
    
    echo $count;
    var_dump($count);
    
    $stmt= $bdd->prepare($count);
    $stmt->execute();
    $tstmt=$stmt->fetchAll();
    echo $tstmt;
    var_dump($tstmt);
    
    
    
    //Pagination
    $page = (!empty($_GET["page"]) )? intval($_GET["page"]) : 1;
    $nbr_elements_par_page=5;
    $nbre_de_pages=ceil($tstmt[0]["cpt"]/$nbr_elements_par_page);
    $debut=($page-1)*$nbr_elements_par_page;
    
    
     
    
    //On récupére les annonces
    
     
    
    ?>
    
    
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <link rel="stylesheet" href="/style.css">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
    </head>
    <body>
    <div class="conteneur-annonce">
    
    <div class="tri">
    				<span>trier</span>
      <?php if(($id_cat==1) || ($id_cat==5) || ($id_cat >=101 && $id_cat <=106) || ($id_cat >=501 && $id_cat <=504))
      {
    
        echo "
        <select onchange='trier(this.value)' id='prix-superficie'>
        <option value=''>Default</option>
        <option value='price|1'>Prix croissants </option>
    <option value='price|-1'>Prix décroissants</option>
    
      <option value='superficie|1'>Surface croissantes </option>
      <option value='superficie|-1'>Surface décroissantes </option>
    </select>";
    
      } else{
        echo "
        <select onchange='trier(this.value)' id='prix-superficie'>
        <option value=''>Default</option>
        <option value='price|1'>Prix croissants </option>
    <option value='price|-1'>Prix décroissants</option>
    </select>";
      }
    
      ?>
    		
    </div>
    
    <p class="toutes">
            <?php
    if(isset($_GET['id'])){
    
            $id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
            $anouncement = affichageAnnonce($id_cat);
           
    
            foreach ($anouncement as $a) {
    
              $id= $a['id'];
            
              $images = !empty($a['images']) ? $a['images'] : ['no_image.png']; // array
            
              if (!empty($images)) {
                //boucle sur les images
                echo'<div class="container">';
            
                 
                echo ' <div class="slider" >';
                foreach ($images as $img) {
                 
                  echo '<img class ="active" style="width:240px; height:170px;" src="/' . $img . '">';
            
                }
                echo "</div>"; // fin div slider . 
              }
              echo '<div class= "informations">';
              echo '<a class="maquette" href="/principales/single.php?id='.$id.'"  > '; 
              echo "<p class='title'>" . $a['titre'] . "</p>";
              echo "<p class='category'><i class='fa fa-list-alt'></i> " . $a['CATEGORIE'] . "</p>";
              echo "<p class='price'><span class='mru'>".$lang['prix']." :</span><span class='valeur'>".$a['prix']."</span></p>";
    
    if(($id_cat==1) || ($id_cat==5) || ($id_cat >=101 && $id_cat <=106) || ($id_cat >=501 && $id_cat <=504)){
              
      echo "<p class='superficie'> <i class='fas fa-chart-area'></i> <span class='valeur'>".$a['superficie']."</span>  ". $a['unite'] . "</p>";
    }
    
    
    
    
    echo "<p class='date'> <i class='fa fa-calendar'></i> " . $a['created_date'] . "</p>";
              echo'</a>';
            
              echo"</div>"; //fin div informations
              echo "</div>"; // fin div container
            
            }
          }
             ?> 
    </div>
    
    <?php
            echo"<div class='pagination'>";
            for($i=1;$i<=$nbre_de_pages;$i++){
            
    
            
            echo "<a class='paginationlien' href='?page=$i'>$i</a>" ;
            
            
            
            
            }
            echo"</div>"; //fin div pagination
        
           ?>
    
    
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Il serait bien de respecter la même "forme" pour ton code ...
      En t'inspirant des codes que je t'ai déjà fourni et donc.. en créant des fonctions...

      Donc :

      Dans la page des fonctions: cmdaffichage.php

      function getNbAnnonceByCategorie($id_cat){
        global $bdd;
        
        $sql= "SELECT COUNT(A.id) AS cpt
               FROM annonces A
               LEFT JOIN categories C ON C.id = A.id_categorie
               WHERE A.id_categorie = :id_cat
                  OR C.id_parent = :id_cat ";
      
        $datas = array(':id_cat'=>$id_cat);          
        try {
          $req = $bdd->prepare($sql);
          $req->execute($datas);
          $res = $req->fetchColumn(); //https://www.php.net/manual/fr/pdostatement.fetchcolumn.php
        
        } catch (Exception $e) {
          echo "<br>Erreur dans la requête " . $sql . '<br>';
          echo $e->getMessage();
          var_dump($datas);
        }
        // le temps des tests pour voir le résultat
        return $res;
      
      }
      
      


      Et dans la page affichage.php

      <?php
      include "../cnx.php";
      include "../control/cmdaffichage.php";
      include "../header.php";
      
      $id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
      $NB = getNbAnnonceByCategorie($id_cat);
      
      //Pagination
      $page = (empty($_GET["page"]) ? intval($_GET["page"]) : 1;
      $nbr_elements_par_page = 5;
      $nbre_de_pages = ceil($NB/$nbr_elements_par_page);
      $debut=($page-1)*$nbr_elements_par_page;
      
      
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. max30_3775 Messages postés 185 Statut Membre
     
    Il n' a plus d'erreur, sauf que lorsqu'on clique sur une page, celle-ci est vide.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Quand tu cliques sur une page.... C'est-à-dire ?
      0
  7. max30_3775 Messages postés 185 Statut Membre
     
    Par exemple, je clique sur le menu et tombe sur la première page. Son Url: http://projetsite/principales/affichage.php?id=1

    ==>En cliquant sur la page 1 par exemple, il ne reste que le header et le footer. L'annonce a disparu. Même chose pour les autres page. Pour la page 1, L'url est le suivant:
    http://projetsite/principales/affichage.php?page=1

    Est-ce à cause de cette fonction:
    function getAnnonceCategorie($id_cat){
          global $bdd;
          $sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : 'fr';
          $page = (!empty($_GET["page"]) )? intval($_GET["page"]) : 1;
          $nbr_elements_par_page=5;
          $debut=($page-1)*$nbr_elements_par_page;
         
         
         
         $sql = ' SELECT  A.*
                          ,C.nom_'.$sql_lang.' AS CATEGORIE
                          ,V.ville_'.$sql_lang.' AS VILLE
                   FROM annonces A
                   LEFT JOIN categories C ON C.id = A.id_categorie
                   LEFT JOIN villes V ON V.id = A.id_ville
                   WHERE A.id_categorie = :id_cat
                   OR C.id_parent = :id_cat
                   ORDER BY A.created_date DESC
                   LIMIT '.$debut.','.$nbr_elements_par_page.' ';
    0
  8. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Tu es sûr d'avoir tout ton code ?
    Je ne t'ai donné que le début de ton fichier j'ai pas remis tout ce qu'il y avait en dessous...
    0
  9. max30_3775 Messages postés 185 Statut Membre
     
    Je pense que j'ai tout le code. Dans la page cmdaffichage:
    //pour afficher les categories du Menu
    
         function getAnnonceCategorie($id_cat){
          global $bdd;
          $sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : 'fr';
          $page = (!empty($_GET["page"]) )? intval($_GET["page"]) : 1;
          $nbr_elements_par_page=5;
          $debut=($page-1)*$nbr_elements_par_page;
         
         
         
         $sql = ' SELECT  A.*
                          ,C.nom_'.$sql_lang.' AS CATEGORIE
                          ,V.ville_'.$sql_lang.' AS VILLE
                   FROM annonces A
                   LEFT JOIN categories C ON C.id = A.id_categorie
                   LEFT JOIN villes V ON V.id = A.id_ville
                   WHERE A.id_categorie = :id_cat
                   OR C.id_parent = :id_cat
                   ORDER BY A.created_date DESC
                   LIMIT '.$debut.','.$nbr_elements_par_page.' ';
    
          try {
            $req = $bdd->prepare($sql);
            $req->execute( array('id_cat'=>$id_cat) );
            $res = $req->fetchAll(PDO::FETCH_ASSOC);
          
          } catch (Exception $e) {
            echo "Erreur dans la requête " . $sql;
          }
          // le temps des tests pour voir le résultat
          return $res;
        }
    
    
    
        function getPhotosAnnonces($annonces) {
          global $bdd;
        
          $sql = 'SELECT id_annonce,filepath as IMG
          FROM images_annonces
          WHERE id_annonce IN (' . implode(',', array_column($annonces, 'id')) . ')';
    
          try {
            $req = $bdd->prepare($sql);
            $req->execute();
            $res = $req->fetchAll(PDO::FETCH_GROUP);
    
          } catch (Exception $e) {
            echo "Erreur dans la requête " . $sql;
          }
          // le temps des tests pour voir le résultat
          return $res;
        }
    
     
    
      function affichageAnnonce($id_cat){
        global $bdd;
        $annonces = getAnnonceCategorie($id_cat);
        $images = getPhotosAnnonces($annonces);
      
        $res = [];
        foreach ($annonces as $R) {
          $res[$R['id']] = $R;
          $imgs = !empty($images[$R['id']]) ? $images[$R['id']] : NULL;
          if(!empty($imgs)){
            foreach($imgs as $I){
              $res[$R['id']]['images'][] = !empty($I['IMG']) ? $I['IMG'] : null;
            }
          }else{
              $res[$R['id']]['images'] = null;
          }
         
        }
        return $res;
          
      }
    
    
      //Pour compter le nombre d'annonce dans la page d'affichage
    
      function getNbAnnonceByCategorie($id_cat){
        global $bdd;
        
        $sql= "SELECT COUNT(A.id) AS cpt
               FROM annonces A
               LEFT JOIN categories C ON C.id = A.id_categorie
               WHERE A.id_categorie = :id_cat
                  OR C.id_parent = :id_cat ";
      
        $datas = array(':id_cat'=>$id_cat);          
        try {
          $req = $bdd->prepare($sql);
          $req->execute($datas);
          $res = $req->fetchColumn(); //https://www.php.net/manual/fr/pdostatement.fetchcolumn.php
        
        } catch (Exception $e) {
          echo "<br>Erreur dans la requête " . $sql . '<br>';
          echo $e->getMessage();
          var_dump($datas);
        }
        // le temps des tests pour voir le résultat
        return $res;
    
    
      }
    
    0
    1. max30_3775 Messages postés 185 Statut Membre
       
      Et la page affichage.php:
      <?php
      include "../cnx.php";
      include "../control/cmdaffichage.php";
      include "../header.php";
      
      
      $id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
      $NB = getNbAnnonceByCategorie($id_cat);
      
      //Pagination
      $page = (!empty($_GET["page"])) ? intval($_GET["page"]) : 1;
      $nbr_elements_par_page= 5;
      $nbre_de_pages = ceil($NB/$nbr_elements_par_page);
      $debut=($page-1)*$nbr_elements_par_page;
      
      
       
      ?>
      
      
      <!DOCTYPE html>
      <html lang="fr">
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Document</title>
          <link rel="stylesheet" href="/style.css">
          <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
      </head>
      <body>
      <div class="conteneur-annonce">
      
      <div class="tri">
      				<span>trier</span>
        <?php if(($id_cat==1) || ($id_cat==5) || ($id_cat >=101 && $id_cat <=106) || ($id_cat >=501 && $id_cat <=504))
        {
      
          echo "
          <select onchange='trier(this.value)' id='prix-superficie'>
          <option value=''>Default</option>
          <option value='price|1'>Prix croissants </option>
      <option value='price|-1'>Prix décroissants</option>
      
        <option value='superficie|1'>Surface croissantes </option>
        <option value='superficie|-1'>Surface décroissantes </option>
      </select>";
      
        } else{
          echo "
          <select onchange='trier(this.value)' id='prix-superficie'>
          <option value=''>Default</option>
          <option value='price|1'>Prix croissants </option>
      <option value='price|-1'>Prix décroissants</option>
      </select>";
        }
      
        ?>
      		
      </div>
      
      <p class="toutes">
              <?php
      if(isset($_GET['id'])){
      
              $id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
              $anouncement = affichageAnnonce($id_cat);
             
      
              foreach ($anouncement as $a) {
      
                $id= $a['id'];
              
                $images = !empty($a['images']) ? $a['images'] : ['no_image.png']; // array
              
                if (!empty($images)) {
                  //boucle sur les images
                  echo'<div class="container">';
              
                   
                  echo ' <div class="slider" >';
                  foreach ($images as $img) {
                   
                    echo '<img class ="active" style="width:240px; height:170px;" src="/' . $img . '">';
              
                  }
                  echo "</div>"; // fin div slider . 
                }
                echo '<div class= "informations">';
                echo '<a class="maquette" href="/principales/single.php?id='.$id.'"  > '; 
                echo "<p class='title'>" . $a['titre'] . "</p>";
                echo "<p class='category'><i class='fa fa-list-alt'></i> " . $a['CATEGORIE'] . "</p>";
                echo "<p class='price'><span class='mru'>".$lang['prix']." :</span><span class='valeur'>".$a['prix']."</span></p>";
      
      if(($id_cat==1) || ($id_cat==5) || ($id_cat >=101 && $id_cat <=106) || ($id_cat >=501 && $id_cat <=504)){
                
        echo "<p class='superficie'> <i class='fas fa-chart-area'></i> <span class='valeur'>".$a['superficie']."</span>  ". $a['unite'] . "</p>";
      }
      
      
      
      
      echo "<p class='date'> <i class='fa fa-calendar'></i> " . $a['created_date'] . "</p>";
             
                echo'</a>';
              
                echo"</div>"; //fin div informations
                echo "</div>"; // fin div container
              
              }
            }//fin accolade isset
               ?> 
      </div>
      
      <?php
              echo"<div class='pagination'>";
              for($i=1;$i<=$nbre_de_pages;$i++){
              
      
              
              echo "<a class='paginationlien' href='?page=$i'>$i</a>" ;
              
              
              
              
              }
              echo"</div>"; //fin div pagination
          
             ?>
      
      0
  10. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Essayes ça et dis nous ce que ça t'affiche
    <?php
    
    //affichage des erreurs php
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE
    
    
    require_once  "../cnx.php";
    require_once  "../control/cmdaffichage.php";
    require_once  "../header.php";
    
    
    $id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
    $NB = getNbAnnonceByCategorie($id_cat);
    $anouncement = affichageAnnonce($id_cat);
    
    //Pagination
    $page = (!empty($_GET["page"])) ? intval($_GET["page"]) : 1;
    $nbr_elements_par_page= 5;
    $nbre_de_pages = ceil($NB/$nbr_elements_par_page);
    $debut=($page-1)*$nbr_elements_par_page;
    
    
    
    //---  DEBUG -----//
    function debug($var,$title=""){
     echo "<div class='debug'><br>".$title."</br>";
     echo "<pre>";
     var_dump($var);
     echo "</pre>";
     echo "<hr></div>";
    }  
    
    
    debug($id_cat,"id_cat");
    debug($NB,"NB");
    debug($nbre_de_pages,"nbre_de_pages");
    debug($debut,"debut");
    debug($page,"page");
    debug($anouncement,"anouncement");
    //---- FIN DU DEBUG ----------//
    
    ?>
    
    
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <link rel="stylesheet" href="/style.css">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
    </head>
    <body>
    <div class="conteneur-annonce">
    
    <div class="tri">
      <span>trier</span>
      <?php 
      if( $id_cat==1 || $id_cat==5 || ($id_cat >=101 && $id_cat <=106) || ($id_cat >=501 && $id_cat <=504)) {
    
        echo "
        <select onchange='trier(this.value)' id='prix-superficie'>
          <option value=''>Default</option>
          <option value='price|1'>Prix croissants </option>
          <option value='price|-1'>Prix décroissants</option>
          <option value='superficie|1'>Surface croissantes </option>
          <option value='superficie|-1'>Surface décroissantes </option>
        </select>";
    
      } else{
        echo "
        <select onchange='trier(this.value)' id='prix-superficie'>
          <option value=''>Default</option>
          <option value='price|1'>Prix croissants </option>
          <option value='price|-1'>Prix décroissants</option>
        </select>";
      }
    
      ?>
    		
    </div>
    <p class="toutes">
       <?php
      if($id_cat){
        foreach ($anouncement as $a) {
    
          $id= $a['id'];
          $images = !empty($a['images']) ? $a['images'] : ['no_image.png']; // array
        
         //boucle sur les images
          echo'<div class="container">';
         
            if (!empty($images)) {
              echo ' <div class="slider" >';
                foreach ($images as $img) {
                  echo '<img class ="active" style="width:240px; height:170px;" src="/' . $img . '">';
                }
              echo "</div>"; // fin div slider . 
            }
            echo '<div class= "informations">';
              echo '<a class="maquette" href="/principales/single.php?id='.$id.'"  > '; 
              echo "<p class='title'>" . $a['titre'] . "</p>";
              echo "<p class='category'><i class='fa fa-list-alt'></i> " . $a['CATEGORIE'] . "</p>";
              echo "<p class='price'><span class='mru'>".$lang['prix']." :</span><span class='valeur'>".$a['prix']."</span></p>";
    
              if(($id_cat==1) || ($id_cat==5) || ($id_cat >=101 && $id_cat <=106) || ($id_cat >=501 && $id_cat <=504)){     
                echo "<p class='superficie'> <i class='fas fa-chart-area'></i> <span class='valeur'>".$a['superficie']."</span>  ". $a['unite'] . "</p>";
              }
    
              echo "<p class='date'> <i class='fa fa-calendar'></i> " . $a['created_date'] . "</p>";
              echo'</a>';
            echo"</div>"; //fin div informations
          echo "</div>"; // fin div container
        
        }
      }//fin accolade isset
      else{
        echo "id_cat est vide !";
      }
      ?> 
    </div>
    <?php
    echo"<div class='pagination'>";
    for($i=1;$i<=$nbre_de_pages;$i++){
      echo "<a class='paginationlien' href='?page=$i'>$i</a>" ;
    }
    echo"</div>"; //fin div pagination
    
    ?>
    

    0
  11. max30_3775 Messages postés 185 Statut Membre
     
    Voici le résultat si on clique sur la page 1:
    Erreur dans la requête SELECT id_annonce,filepath as IMG FROM images_annonces WHERE id_annonce IN ()
    Notice: Undefined variable: res in C:\wamp64\www\Projetsite\control\cmdaffichage.php on line 204

    Il s'agit de cette fonction:
        function getPhotosAnnonces($annonces) {
          global $bdd;
        
          $sql = 'SELECT id_annonce,filepath as IMG
          FROM images_annonces
          WHERE id_annonce IN (' . implode(',', array_column($annonces, 'id')) . ')';
    
          try {
            $req = $bdd->prepare($sql);
            $req->execute();
            $res = $req->fetchAll(PDO::FETCH_GROUP);
    
          } catch (Exception $e) {
            echo "Erreur dans la requête " . $sql;
          }
          // le temps des tests pour voir le résultat
          return $res;
        }


    Suite des erreurs:

    id_cat
    C:\wamp64\www\Projetsite\principales\affichage.php:30:null
    NB
    C:\wamp64\www\Projetsite\principales\affichage.php:30:string '0' (length=1)

    nbre_de_pages
    C:\wamp64\www\Projetsite\principales\affichage.php:30:float 0

    debut
    C:\wamp64\www\Projetsite\principales\affichage.php:30:int 0

    page
    C:\wamp64\www\Projetsite\principales\affichage.php:30:int 1

    anouncement
    C:\wamp64\www\Projetsite\principales\affichage.php:30:
    array (size=0)
    empty

    id_cat est vide !
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Le plus important c'est la dernière ligne
      id_cat est vide !
      Quel est l' url afficher dans ton navigateur ?
      0
  12. max30_3775 Messages postés 185 Statut Membre
     
    Quand on clique sur une catégorie dans le menu (immobilier par exemple), l'url est le suivant: http://projetsite/principales/affichage.php?id=1

    Mais en cliquant sur une page 1, ou 2, 3.. l'url: http://projetsite/principales/affichage.php?page=2

    Et si id_cat est vide, peut être que l'erreur dans cette ligne:
    $id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      L'erreur est plutôt dans le lien qui est généré pour changer de page il faut y remettre l'id de la catégorie ....(en plus du numéro de page qui s'y trouve déjà)
      1
  13. max30_3775 Messages postés 185 Statut Membre
     
    Tu avais raison, l'erreur était dans le lien. Il fallait ajouter l'id de la catégorie:

     echo "<a class='paginationlien' href='?id=$id_cat&page=$i'>$i</a>" ;


    Et pour la barre de recherche dans une autre page, j'ai fait ainsi et ça marché:
    echo "<a class='paginationlien' href='?q=$q&categorie=$categorie&villes=$villes&page=$i'>$i</a>" ;


    Merci encore Jordane :)
    0