IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Réaliser une pagination


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Archéologue
    Inscrit en
    Mars 2019
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Archéologue
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 134
    Par défaut Réaliser une pagination
    Bonjour à vous,
    je suis un peu (beaucoup) débutant en code, mais j'aimerais faire un tableau avec pagination.
    Du coup, j'ai essayé d'adapter un code à mon tableau généré à partir d'une requête SQL. J'arrive bien à n'afficher que les 10 premiers éléments de mon tableau avec ce code, mais ce sont toujours les mêmes 10 premiers éléments qui s'affichent sur toutes les pages et le lien "page précédente" ne s'affiche jamais.
    En regardant ce bout de code, est-ce que quelqu'un pourrait m'aider ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    	//connexion au serveur
    	$serveur = "localhost";
    	$login = "root";
    	$pass = "";
    	$dbname = "archeodunum_local";
    	$chemin_image="http://archeodunum/";
    	$hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); }; // échappement des caractères dangereux
    	try{
    		$connexion = new PDO("mysql:host=$serveur;dbname=$dbname;charset=UTF8",$login,$pass);
    		$connexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    				}
    	catch(PDOException $e){
    		echo 'Echec : ' .$e->getMessage();
    	}
    	//requête SQL et mise en forme en tableau
    	$page = (!empty($_GET['page']) ? $_GET['page'] : 1);
    	$limite=10;
    	$debut = ($page -1) * $limite;
    	$sql2="SELECT SQL_CALC_FOUND_ROWS * from site LEFT JOIN auteur ON site.ID_RO=auteur.ID_Auteur ORDER BY LTRIM(UPPER(site.Commune)) ASC LIMIT :limite OFFSET :debut";
    	$sql2 = $connexion->prepare($sql2);
    	$sql2->bindValue('debut', $debut,PDO::PARAM_INT);
    	$sql2->bindValue('limite',$limite,PDO::PARAM_INT);
     
    $sql2->execute();
    $resultFoundRows = $connexion->query('SELECT found_rows()');
    $nombredElementsTotal = $resultFoundRows->fetchColumn();
    ?>
    <style>
    th{
    	text-align: center;
    }
    td{
    	border: 1px solid lightgrey;
    	padding: 5px !important;
    	vertical-align: middle;
    }
    </style>
     
    <table class="table table-hover" >
    		<thead>
    			<tr>
    				<th width=25%> Commune - Lieu-dit </th>
    				<th width=10%> Département </th>
    				<th width=5%> Année </th>
    				<th width= 15%> Type de site </th>
    				<th width=10%> Etat d'avancement </th>
    				<th width=15%> RO </th>
    				<th width=5%> Latitude </th>
    				<th width=5%> Longitude </th>
    				<th width=5%> Notice </th>
    				<th width= 10%> </th>
    			</tr>
    		</thead>
     
    <?php
        while ($row = $sql2->fetch())
     
    {
    	$row  = array_map($hsc, $row); // échappement de toutes les valeurs
    $notice = (!empty($row['Notice']))? '<a href='.$row['Notice'].'><img src='.$chemin_image.'lien alt=notice width=30% /></a>' : '';
    $fiche_RO = (!empty($row['Fiche']))? '<a href='.$chemin_image.'collaborateur/'.$row['Nom'].'-'.$row['Prénom'].'>'.$row['Nom_Auteur'].'</a>' : ''.$row['Nom_Auteur'].'';
    echo "<tr>
    		<td>".$row['Commune']." - ".$row['Lieu_dit']."</td>
    		<td>".$row['Departement']."</td>
    		<td>".$row['Annee']."</td>
    		<td>".$row['Type']."</td>
    		<td>".$row['Etat_fouille']."</td>
    		<td>".$fiche_RO."</td>
    		<td>".$row['Lat']."</td>
    		<td>".$row['Lon']."</td>
    		<td Style='text-align:center !important'>".$notice."</td>
    		<td><a href='modifier_site?id=".$row['ID_Site']."&o=u'>Modifier</a></td>
    	</tr>\n";
    }
     
    ?>
    </table>
    <?php
    $nombreDePages = ceil($nombredElementsTotal / $limite);
     
     
    if ($page > 1):
        ?><a href="?page=<?php echo $page - 1; ?>">Page précédente</a> — <?php
    endif;
     
     
    for ($i = 1; $i <= $nombreDePages; $i++):
        ?><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php
    endfor;
     
     
    if ($page < $nombreDePages):
        ?>— <a href="?page=<?php echo $page + 1; ?>">Page suivante</a><?php
    endif;
    ?>
    merci d'avance !
    Clément

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 563
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 563
    Par défaut
    affichez le contenu des variables $page et $debut pour vérifier qu'elles contiennent bien ce que vous souhaitez lors d'un changement de page.

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    pour ce qui est des calculs pour une pagination, j'ai fait un article de blog qui factorise tout ça : par ici

  4. #4
    Membre confirmé
    Homme Profil pro
    Archéologue
    Inscrit en
    Mars 2019
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Archéologue
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 134
    Par défaut ça ne s'incrémente pas
    effectivement, si j'affiche $debut et $page, c'est toujours respectivement 0 et 1.
    ça ne se déroule pas, mais je n'arrive pas à voir d'où ça peut venir

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il y a 2 requêtes à faire :

    Voir :

  6. #6
    Membre confirmé
    Homme Profil pro
    Archéologue
    Inscrit en
    Mars 2019
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Archéologue
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 134
    Par défaut
    merci pour ton lien rawsrc, mais je ne vois pas comme l'appliquer à mon cas

  7. #7
    Invité
    Invité(e)
    Par défaut
    La LOGIQUE de ton code n'est pas correct.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombredElementsTotal = $resultFoundRows->fetchColumn();
    • Ici, tu récupères le nombre de résultats de la requête AVEC le "LIMIT...". Donc toujours 10.
    • PAS le nombre TOTAL (SANS le "LIMIT...").

    Comme je l'ai écrit (mais l'as-tu lu ?), il faut 2 requêtes.


    [EDIT] Je n'avais pas vu le "SELECT SQL_CALC_FOUND_ROWS ...".

    SQL_CALC_FOUND_ROWS permet effectivement d'obtenir le nombre TOTAL, SANS le LIMIT.
    Dernière modification par Invité ; 22/10/2019 à 11h53.

  8. #8
    Membre confirmé
    Homme Profil pro
    Archéologue
    Inscrit en
    Mars 2019
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Archéologue
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 134
    Par défaut
    j'avoue m'être basé sur un tuto, je vois bien le souci, mais j'ai un peu de mal à le corriger

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Réaliser une pagination PHP ( PDO )
    Par reverb94 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 09/05/2013, 14h34
  2. comment réaliser une pagination avec zend
    Par aziza_1989 dans le forum Autres composants
    Réponses: 3
    Dernier message: 04/06/2012, 18h37
  3. [SQL] Réaliser une pagination comme dans le forum
    Par 12_darte_12 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/06/2006, 18h04
  4. [MySQL] Réaliser une pagination sur un forum
    Par maroweb dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/02/2006, 12h39
  5. question pour réaliser une pagination
    Par vbcasimir dans le forum Langage
    Réponses: 1
    Dernier message: 13/10/2005, 08h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo