Système de pagination

Eléphant du PHP | 65 Messages

09 janv. 2022, 02:22

Bonjour, je sollicite votre aide pour créer un système de pagination pour mes annonces. J'en ai 6 pour le moment.
Mes fonctions marchent bien ainsi que l'affichage des annonces. Pour la pagination, j'ai juste ajouté les variables $nbPage $parpage et $starter dans ma fonction getAnnonces (de la page cmdaffichage.php), et dans la page d'accueil, j'ai créé une requête $nbDePage.
J'obtiens plein d'erreurs:
Dans la page des commandes
.Undefined index: page in C
.Undefined variable: parPage in

Dans la page d'accueil:
.Undefined variable: parPage in
.Division by zero in
...

Voici la page des fonctions:

Code : Tout sélectionner

function getAnnnonces(){ global $bdd; $sql_lang = (!empty(($_SESSION['lang']) && in_array($_SESSION['lang'], ['fr','en','es']) ))? $_SESSION['lang'] : 'fr'; $nbPage= $_GET['page']; $parpage= 2; $starter= ($nbPage - 1)* $parPage; $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 ORDER BY A.created_date DESC LIMIT '.$starter.', '.$parpage.' '; try { $req = $bdd->prepare($sql); $req->execute(); $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 getImagesAnnonces(){ global $bdd; $sql = "SELECT id_annonce,filepath as IMG FROM images_annonces ORDER BY id_annonce DESC"; 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 afficherAnnonce(){ $annonces = getAnnnonces(); $images = getImagesAnnonces(); $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 accueil.php:

Code : Tout sélectionner

<? $anouncement= afficherAnnonce(); php foreach ($anouncement as $anounce) { $id= $anounce['id']; echo '<div class="annoncepubs" id= "annonce-'.$anounce['id'].'" > '; $images = !empty($anounce['images']) ? $anounce['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:135px;" src="' . $img . '">'; } echo "</div>"; // fin div slider . echo "</div>"; // fin div container } echo '<div class= "informations">'; echo '<a class="maquette" href="single.php?id='.$id.'" > '; echo "<span class='title'>" . $anounce['titre'] . "</span>"; echo "<span class='category'>" . $anounce['CATEGORIE'] . "</span>"; echo "<span class='price'>" . $anounce['prix'] . "</span>"; echo "<span class='date'>" . $anounce['created_date'] . "</span>"; echo"</div>"; //fin div informations echo "</div> </a>"; // fin div annoncepubs } $nbDePage= $bdd->query('SELECT COUNT(*) From annonces') ->fetchColumn(); for ($i=1; $i <= ceil($nbDePage /$parPage); $i++){ if ($_GET['page']== $i){ echo '<a class="active" href="?page='.$i.'">'.$i."</a>"; }else{ echo '<a href="?page='.$i.'">'.$i."</a>"; } } ?>

Eléphant du PHP | 65 Messages

10 janv. 2022, 21:48

J'ai eu une meilleure solution. Tout marche bien: l'url, l'affichage etc. Cependant, j'ai du mal à insérer les variables $debut et $nbre_de_pages en LIMIT dans ma fonction getAnnonces() sans que cela ne crée des erreurs:

Voici le code:

Code : Tout sélectionner

... include 'cmdaffichage.php'; //On récupère le nombre d'enregistrements $count= "SELECT COUNT(id) AS cpt FROM annonces"; $stmt= $bdd->prepare($count); $stmt->execute(); $tstmt=$stmt->fetchAll(); //Pagination @$page=$_GET["page"]; if(empty($page)) $page=1; $nbr_elements_par_page=3; $nbre_de_pages=ceil($tstmt[0]["cpt"]/$nbr_elements_par_page); $debut=($page-1)*$nbr_elements_par_page; //On récupére les annonces $anouncement= afficherAnnonce(); $villesm= getVilles();
Page cmdaffichage:

Code : Tout sélectionner

function getAnnnonces(){ global $bdd; $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 ORDER BY A.created_date DESC'; try { $req = $bdd->prepare($sql); $req->execute(); $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; } //...suite function afficherAnnonce(){ $annonces = getAnnnonces(); $images = getImagesAnnonces(); //...suite
Auriez-vous une idée, please?