Pagination id parent

Eléphant du PHP | 65 Messages

29 janv. 2022, 11:55

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?

Mammouth du PHP | 2703 Messages

29 janv. 2022, 14:57

la fin réelle du message d'erreur nous est indispensable.
que contient la requête sql présente dans $count ?

Eléphant du PHP | 65 Messages

29 janv. 2022, 15:29

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

Mammouth du PHP | 2703 Messages

29 janv. 2022, 15:40

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.

Eléphant du PHP | 65 Messages

29 janv. 2022, 17:11

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

Mammouth du PHP | 2703 Messages

29 janv. 2022, 18:49

$id_cat = !empty($_GET['id']) ? trim($_GET['id']) : null;
http://projetsite/principales/affichage.php?page=2
forcément, cela ne fonctionne pas.

Eléphant du PHP | 65 Messages

29 janv. 2022, 19:40

Quelle pourrait être la solution?

Mammouth du PHP | 2703 Messages

29 janv. 2022, 19:43

toujours avoir l'id dans l'url

Eléphant du PHP | 65 Messages

29 janv. 2022, 20:21

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? :?

Eléphant du PHP | 65 Messages

08 févr. 2022, 20:29

Une solution,s'il vous plait?