Page 1 sur 1

Pagination id parent

Posté : 29 janv. 2022, 11:55
par max303
Bonjour, j'ai un problème au niveau de la pagination pour compter les annonces selon l'id parent.
 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...
...

La partie pagination dans une autre page:
    $id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
        $anouncement = affichageAnnonce($id_cat);
$count= "SELECT COUNT(id) AS cpt FROM annonces WHERE id=$id_cat";
$stmt= $bdd->prepare($count);
$stmt->execute();
$tstmt=$stmt->fetchAll();
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;
J'ai fait un vardump $tsmt et voici le résulat:
array (size=1)
  0 => 
    array (size=1)
      'cpt' => string '1' (length=1)
Je suis sensé obtenir 2 pages et quand je clique sur la page 1 j'ai l'erreur suivante:
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près .
Il s'agit de
$stmt->execute();
Auriez-vous-une idée?

Re: Pagination id parent

Posté : 29 janv. 2022, 14:57
par or 1
la fin réelle du message d'erreur nous est indispensable.
que contient la requête sql présente dans $count ?

Re: Pagination id parent

Posté : 29 janv. 2022, 15:29
par max303
Bonjour or1, merci pour ta réponse.
La fin réelle du message d'erreur est la suivante:
) Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de '' à la ligne 1 in C:\wamp64\www\Projetsite\principales\affichage.php on line 11
( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de '' à la ligne 1 in C:\wamp64\www\Projetsite\principales\affichage.php on line 11

La ligne 11 correspond à celle là
$stmt->execute();
Et le vardump de count pour la cat principale dont id_parent =0:
C:\wamp64\www\Projetsite\principales\affichage.php:10:string 'SELECT COUNT(id) AS cpt FROM annonces WHERE id=1' (length=48)

=>Donc l'id parent.
Pour les sous-catégories, le vardump:
C:\wamp64\www\Projetsite\principales\affichage.php:10:string 'SELECT COUNT(id) AS cpt FROM annonces WHERE id=101' (length=50)]
Ici c'est la première sous-categorie.

J'espère que ça répondà tes questions

Re: Pagination id parent

Posté : 29 janv. 2022, 15:40
par or 1
SELECT COUNT(id) AS cpt FROM annonces WHERE id=1
exécutée dans phpmyadmin doit retourner le même type de message d'erreur. la raison ne me saute pas aux yeux. tant que cela ne fonctionnera pas dans phpmyadmin, ça ne fonctionnera pas avec le code php.

Re: Pagination id parent

Posté : 29 janv. 2022, 17:11
par max303
On y est presque... ça affiche les annonces lorsqu'on clique sur une cat ou sous-cat, mais quand on clique sur une page, j'ai l'erreur en haut: Fatal error: Uncaught PDOException: SQLST...
Ma requête a été la suivante:
$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 C.id_parent=$id_cat";

//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;

Je pense que la numérotation est bien:
    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
Le vardump de count quand on clique sur la page 2:
C:\wamp64\www\Projetsite\principales\affichage.php:14:string 'SELECT COUNT(A.id) AS cpt
FROM annonces A
LEFT JOIN categories C ON C.id = A.id_categorie
WHERE C.id_parent=' (length=111)
Et l'url de la page 2:
http://projetsite/principales/affichage.php?page=2

L'url lorsqu'on clique sur une catégorie ou sous cat sans choisir la page: http://projetsite/principales/affichage.php?id=1

Re: Pagination id parent

Posté : 29 janv. 2022, 18:49
par or 1
$id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
http://projetsite/principales/affichage.php?page=2
forcément, cela ne fonctionne pas.

Re: Pagination id parent

Posté : 29 janv. 2022, 19:40
par max303
Quelle pourrait être la solution?

Re: Pagination id parent

Posté : 29 janv. 2022, 19:43
par or 1
toujours avoir l'id dans l'url

Re: Pagination id parent

Posté : 29 janv. 2022, 20:21
par max303
Là je l'ai fait, mais le problème c'est toujours l'id=1 qui s'affiche dans l'url.
Voici le code dans la pagination:
     
        echo"<div class='pagination'>";
        for($i=1;$i<=$nbre_de_pages;$i++){
        

        
        echo "<a class='paginationlien' href='/principales/affichage.php?id=".$id_cat."&page=$i'>$i</a>" ;
        
        
        
        
        }
        echo"</div>"; //fin div pagination
Exemple, on est sur une catégorie dont l'id =2, et lorsqu'on clique sur une page, voici l'url: http://projetsite/principales/affichage.php?id=1&page=1
On voit bien que c'est l'id 1 et pas le 2.
Où serait l'erreur? :?

Re: Pagination id parent

Posté : 08 févr. 2022, 20:29
par max303
Une solution,s'il vous plait?