Pagination des catégories et sous-catégories

Résolu/Fermé
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022 - 11 févr. 2022 à 19:32
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022 - 12 févr. 2022 à 14:41
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

jordane45 Messages postés 38305 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
11 févr. 2022 à 20:11
Bonjour,

Fais donc un echo de ta variable $sql et montre nous ce que ça donne.
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
11 févr. 2022 à 20:37
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
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550
11 févr. 2022 à 21:08
bonjour,
as-tu essayé la variable $sql?
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
11 févr. 2022 à 21:19
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
jordane45 Messages postés 38305 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
11 févr. 2022 à 22:00
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
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
11 févr. 2022 à 22:07
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
jordane45 Messages postés 38305 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
11 févr. 2022 à 22:30
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
11 févr. 2022 à 22:57
Il n' a plus d'erreur, sauf que lorsqu'on clique sur une page, celle-ci est vide.
0
jordane45 Messages postés 38305 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
11 févr. 2022 à 23:19
Quand tu cliques sur une page.... C'est-à-dire ?
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
11 févr. 2022 à 23:28
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
jordane45 Messages postés 38305 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
11 févr. 2022 à 23:40
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
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
11 févr. 2022 à 23:57
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
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
11 févr. 2022 à 23:57
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
jordane45 Messages postés 38305 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
12 févr. 2022 à 00:47
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
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
12 févr. 2022 à 01:04
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
jordane45 Messages postés 38305 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
12 févr. 2022 à 09:13
Le plus important c'est la dernière ligne
id_cat est vide !
Quel est l' url afficher dans ton navigateur ?
0
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
12 févr. 2022 à 14:11
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
jordane45 Messages postés 38305 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 novembre 2024 4 705
12 févr. 2022 à 14:14
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
max30_3775 Messages postés 178 Date d'inscription jeudi 4 novembre 2021 Statut Membre Dernière intervention 18 mars 2022
12 févr. 2022 à 14:41
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