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 :

Comment faire pour avoir un lien sur les pages suivantes/précédentes


Sujet :

PHP & Base de données

  1. #1
    Meewix
    Invité(e)
    Par défaut Comment faire pour avoir un lien sur les pages suivantes/précédentes
    Bonjour,

    Voilà, j'aimerais afficher X annnonces sur une page et les autres X annonces sur les pages suivantes avec un lien du style :
    page : 1-2-3-4 et mieux si je peux mettre un lien suivante / précédente.

    Je ne trouve pas l'info sur le Forum malgré ma recherche, si vous pouviez m'aiguiller. :o)

    Marci

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Le mot clé qui tue : pagination

  3. #3
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    C'est tout à fait et il y a des tonnes de sujet dans le forum SGBD (qui est fait pour tout ce qui est relation BDD. et de plus tu as un exemple concret sur la page sources PHP (lien en haut)

  4. #4
    Membre averti
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Points : 313
    Points
    313
    Par défaut
    Bonjour,

    Il y a par exemple ce topic où j'ai apporté une proposition de solution. En espérant que ça t'aide.
    N'oubliez pas le tag .
    Merci de ne pas envoyer de MP pour des problèmes techniques.

  5. #5
    Meewix
    Invité(e)
    Par défaut
    Merci pour l'aide, j'ai réussi à faire presque se que je veux mais j'ai un pb.
    Bon il compte bien le nb d'enregistrement (j'en ai 7 dans la table), je donne une limite de 5 par page et il m'affiche bien les 5 avec un lien pour les pages suivantes, mais il ne génère pas les liens suivant MAIS il m'affiche tout de même :
    "Page : 1 2 3" alors que logiquement il devrait juste mettre la 1 et la 2 pour les 2 derniers enregistrements et là il me met 3 pages le bougre !

    VOici le code :
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="/style/styleadmin.css" media="all" />
    </head>
     
    <body>
    <div align="center">[ <a href="index.php">Accueil</a> ] [ <a href="ann_ajout.php">Ajouter</a> ]</div><br>
    <?php
    require("./../pass/config.inc.php");
    require("./../admin/fonction.php");
     
     
     
    // connexion à la base
    $db = mysql_connect($HostName, $UserName, $UserPass) or die ('Erreur de connexion '.mysql_error());
     
    // sélection de la base  
    mysql_select_db($MysqlBdd,$db) or die ('Erreur de selection '.mysql_error());
     
    // on va afficher 5 résultats par page
    $userperpage = 5;
    //Nombre indiquant le départ de la requete
    $start = isset($_GET['start'])?$_GET['start']:0;
    // Nom de la page
    $page = basename(__FILE__);
    // Compte les enregistrements
    $select = 'SELECT count(*) as total FROM annonces';
    $result = mysql_query($select,$db) or die ('Erreur : '. mysql_error());
    $row = mysql_fetch_array($result);
    $total = $row['total'];
     
    if($total > 0) {
        // début du tableau
        	echo '
    		  <table width="95%" border="0" align="center" cellpadding="0" cellspacing="0" bordercolor="#666666" bgcolor="#EEEEEE">
    		    <tr>
    				<td>
    					<table cellspacing="1" cellpadding="1" width="100%">
    						<tr bgcolor="#FFCC00" align="center">
    						  <td colspan="9"><strong><font color="#FFFFFF">Terrains</font></strong></td>
    						</tr>
    						<tr bgcolor="#666666" align="center">
    						<td><font color="#FFFFFF"><b>N°Ref</b></font></td>
    <!--						<td><font color="#FFFFFF"><b>Date d\'inser.</b></font></td>
    						<td><font color="#FFFFFF"><b>Date de modif.</b></font></td>-->
    						<td><font color="#FFFFFF"><b>Publier</b></font></td>
    						<td><font color="#FFFFFF"><b>Statut</b></font></td>
    						<td><font color="#FFFFFF"><b>Surf. Terrain</b></font></td>
    						<td><font color="#FFFFFF"><b>Prix</b></font></td>
    						<td><font color="#FFFFFF"><b>Vendu</b></font></td>
    						<td><font color="#FFFFFF"><b>Stats</b></font></td>
    						<td><font color="#FFFFFF"><b>Photos</b></font></td>
    						<td align="center"><font color="#FFFFFF"><b>Actions</b></font></td>
    						</tr>';
    	// requête SQL qui récupère tous les enregistrements
    	$select = 'SELECT * FROM annonces,liste_statut WHERE type="Terrain" AND annonces.statut=liste_statut.id_statut ORDER BY publi DESC LIMIT '.$start.','.$userperpage;
    	$result = mysql_query($select,$db) or die ('Erreur : '.mysql_error() );
     
    					while($row = mysql_fetch_array($result))
    						{
    						$color = line2color('#EEEEEE','#FFFFFF');
    						echo'
    						<tr align="center">
    						<td bgcolor='.$color.'><a href="voir.php?id_annonce='.$row['id_annonce'].'">'.$row['ref'].'</a></td>
    <!--						<td bgcolor='.$color.'>'.$row['date_ins'].'</td>
    						<td bgcolor='.$color.'>'.$row['date_up'].'</td>-->
    						<td bgcolor='.$color.'>';
    						if ($row['publi'] == 'oui'){
    						echo'<b><font color="green">'.$row['publi'].'</font></b>'; }
    						else echo'<b><font color="red">'.$row['publi'].'</font></b>';
    						echo'</td>
    						<td bgcolor='.$color.'>'.$row['nom_statut'].'</td>
    						<td bgcolor='.$color.'>'.$row['surf_terr'].'</td>
    						<td bgcolor='.$color.'>'.$row['prix'].'</td>
    						<td bgcolor='.$color.'>';
    						if ($row['vendu'] == 'oui'){
    						echo'<b><font color="green">'.$row['vendu'].'</font></b>'; }
    						else echo'<b><font color="red">'.$row['vendu'].'</font></b>';
    						echo'</td>
    						<td bgcolor='.$color.'>'.$row['stats'].'</td>
    						<td bgcolor='.$color.'><a href="ann_up_photo01.php?id_annonce='.$row['id_annonce'].'&photo01='.$row['photo01'].'"">N°1</a> | <a href="ann_up_photo02.php?id_annonce='.$row['id_annonce'].'&photo02='.$row['photo02'].'"">N°2</a> | <a href="ann_up_photo03.php?id_annonce='.$row['id_annonce'].'&photo03='.$row['photo03'].'"">N°3</a> | <a href="ann_up_photo04.php?id_annonce='.$row['id_annonce'].'&photo04='.$row['photo04'].'"">N°4</a></td>
    						<td bgcolor='.$color.' align="center"><a href="ann_update.php?id_annonce='.$row['id_annonce'].'"><img src="/img/edit.gif" border="0" alt="Editer" title="Editer"></a> <a href="ann_del.php?id_annonce='.$row['id_annonce'].'&photo01='.$row['photo01'].'&photo02='.$row['photo02'].'&photo03='.$row['photo03'].'&photo04='.$row['photo04'].'"><img src="/img/delete.gif" border="0" alt="Supprimer" title="Supprimer"></a></td>
    						';
    						}
    						echo'</table></td></tr></table>';
    					// fin du tableau.
     
    // Génération des liens pour l'affichage des pages
    	echo 'Page : ';
    	$genestart = 0;
    	for($i = 1; $i <= ceil( $total / $userperpage ); $i++)
    	{
    		echo '<a '.(((floor($start/$userperpage)+1)==$i)?('href="'.$page.'?start='.$genestart.'"'):('')).'>'.$i.'</a>&nbsp;';
    		$genestart += $userperpage;
    	}
    }
    	else
    		echo '
    			<html>
    			<head>
    			<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    				<style type="text/css" media="all">
    				@import "/style/styleadmin.css";
    				</style>
    			</head>
    			<body>
    				<div align="center"><b><font color="red">Aucun enregistrements !</font></b></td>
    			</body>
    			</html>
    		';
     
     
    // on libère le résultat
    mysql_free_result($result);
    ?>
    </body>
    </html>
    Si vous avez une piste !

    Merci

  6. #6
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for($i = 1; $i < ceil( $total / $userperpage ); $i++)
        {
            echo '<a href="'.$page.'?start='.$genestart.'">'.$i.'</a>&nbsp;';
            $genestart += $userperpage;
        }
    Déjà comme ça. J'ai pas regardé le reste mais de ce cote ca devrait aller

  7. #7
    Meewix
    Invité(e)
    Par défaut
    Kerod, ça fonctionne bien avec ta modif mais il me rajoute un lien de page en plus : si j'ai deux pages il va me coller une 3ème page mais vide car forcément j'ai pas d'autres enregistement.
    C'et comme si il faisait +1 sur la dernière page...

  8. #8
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Hum si je me resitue bien le code que tu as et qui sort d'un thread de ce forum.

    Il vaut mieux laisser comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for($i = 1; $i <= ceil( $total / $userperpage ); $i++)
        {
            echo '<a '.(((floor($start/$userperpage)+1)==$i)?('href="'.$page.'?start='.$genestart.'"'):('')).'>'.$i.'</a>&nbsp;';
            $genestart += $userperpage;
        }
    Et si tu peux pas avoir les liens c'est qu'il y a un problème du coté de $total ou autres variables qui sont comprises dans le calcul.

    Ce qu'il faudrait c'est vérifié leur valeur respective. Teste avec un echo pour voir ce que ca donne dans la boucle. Par exemple pour le $total, et userperpage (qu'il faudrait modifier plus tard en postperpage), les différents calculs

  9. #9
    Meewix
    Invité(e)
    Par défaut
    hum hum

    Bon déjà en affichant le Nb d'annonces je m'apperçoi qu'il me compte 10 alors qu'il n'y a que 9 enregistrements.
    Ensuite le pb reste tjs là pour le lien de page qui ne génère pas.

    Je continue, mais demain car là j'ai plus les yeux en fac des trous...

    merci pour l'aide

  10. #10
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ben ca vient de ton nombre total regle ce problème apres ce sera bon

  11. #11
    Meewix
    Invité(e)
    Par défaut
    Citation Envoyé par Kerod
    Ben ca vient de ton nombre total regle ce problème apres ce sera bon
    Yo du matin (avant de partir au chagrin)

    Hiers soir j'étais fatigué, j'ai bien 10 enregistrements et il me compte bien 10, donc le Total via le Count fonctionne bien.... et zut... c'est autre chose donc !

    Donc il me met bien page 1 et 2 mais pas de lien sur la deux, il affiche que le N° de la page le bougre Grrrrrrr !

  12. #12
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ca ne résoudra pas ton problème mais tu as une faille de sécurité concernant $start dans ta requete. Comme tu es sous mysql, tu dois utiliser http://php.net/mysql_real_escape_string

  13. #13
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Et pour résoudre ton problème je te suggère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Génération des liens pour l'affichage des pages
    echo 'Page : ';
    $nb_pages = ceil( $total / $userperpage );
    for($i = 0 ; $i < $nb_pages ; $i++)
    {
        if ($start != $i * $userperpage) {
            echo '<a href="?start='. ($i * $userperpage) .'">'. ($i + 1) .'</a>&nbsp;';
        } else {
            echo ($i + 1) .'&nbsp;';
        }
    }

    Démonstration par l'exemple :
    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
    <?php
    // on va afficher 5 résultats par page
    $userperpage = 5;
    //Nombre indiquant le départ de la requete
    $start = isset($_GET['start'])?$_GET['start']:0;
     
    $rows = array(
        array('ref' => 'A'),
        array('ref' => 'B'),
        array('ref' => 'C'),
        array('ref' => 'D'),
        array('ref' => 'E'),
        array('ref' => 'F'),
        array('ref' => 'G'),
        array('ref' => 'H'),
        array('ref' => 'I'),
        array('ref' => 'J'),
    );
    $total = count($rows);
     
    $rows = array_slice($rows, $start, $userperpage);
    echo '<table border="1">';
    foreach($rows as $row)
    {
        echo '<tr><td>'.$row['ref'].'</td></tr>';
    }
    echo '</table>';
     
    // Génération des liens pour l'affichage des pages
    echo 'Page : ';
    $nb_pages = ceil( $total / $userperpage );
    for($i = 0 ; $i < $nb_pages ; $i++)
    {
        if ($start != $i * $userperpage) {
            echo '<a href="?start='. ($i * $userperpage) .'">'. ($i + 1) .'</a>&nbsp;';
        } else {
            echo ($i + 1) .'&nbsp;';
        }
    }
     
    ?>

  14. #14
    Meewix
    Invité(e)
    Par défaut
    Yes !

    Thank you Mr N. is all ready to start !

    Merci la faille, j'apprend une truc ce matin :o)
    J'ai rectifier le code en prenant l'exemple le plus rapide fourni :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $select = 'SELECT count(*) as total FROM annonces WHERE type="Terrain"';
    // DEBUT > Protection des caractères spéciaux d'une commande SQL
    mysql_real_escape_string($annonces);
    mysql_real_escape_string($type);
    // FIN > Protection des caractères spéciaux d'une commande SQL
    Pour la pagination c'est ok aussi, et en prime je prend.

    En vous souhaitant un bon WE. De mon côté je viens de me faire "bouffer" par un virus sur mon Forum IPB V1.3 ... pas glop pour moi et mes +4000 membres...

    Ciao

    Meewix

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2013, 19h36
  2. Réponses: 12
    Dernier message: 14/04/2009, 20h10
  3. Réponses: 1
    Dernier message: 23/07/2007, 11h00
  4. Réponses: 3
    Dernier message: 01/07/2006, 14h04
  5. Réponses: 7
    Dernier message: 21/04/2005, 15h55

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