Se connecter avec
S'enregistrer | Connectez-vous

Limite de page

Dernière réponse : dans Programmation
Expert Programmation

Bonjour,

Je voudrais savoir comment afficher une table sql sur une page php en faisant en sorte que une seule ligne de la page s'affiche et que les autres ligne de la table s'affiche en dessous de celle ci...

genre:

mysql_query('SELECT * FROM la_table ORDER BY id DESC LIMIT 0,1');

Donc ca affichera la dernière ligne ajouté. Comment afficher les ancienne sur une page différente?

J'èspère que j'ai été assez claire, j'arrive pas bien à expliquer. Merci d'avance

Autres pages sur : limite page

Lassé par la pub ? Créez un compte
Expert Programmation

Bah c'est de la pagination classique quoi.
Tu regardes n'importe quel script de pagination il te donnera ce que tu veux, tu auras juste besoin de changer le nombre de réponses par page.

Ca reviendrait à une requête du type :
  1. mysql_query('SELECT * FROM la_table ORDER BY id DESC LIMIT '.($page-1).',1');
Expert Programmation

Bah c'est simple...

1) Tu comptes le nombre d'éléments dans ta bdd, ce qui sera le nombre de pages que tu auras
2) tu passes un paramètre $_GET['page'] avec le numéro de la page que tu veux avoir. Si ce paramètre n'existe pas, tu mets $page = 0. Si ce paramètre est plus grand que le nombre de pages que tu as, tu le mets égal au nombre de pages que tu as.
3) tu fais le mysql_query() que je t'ai donné plus haut, avec la variable $_GET['page'], ce qui va te retourner le "$_GET['page']"ième élément (moins un, vu que ça commence à 0) de ta base.
4) les boutons suivants et précédents seront égaux à $_GET['page']+1 et $_GET['page']-1

C'est un algo tout con il me semble :) 
Expert Programmation

Oui je sais quand on connais on dirais que les autres son idiot de pas comprendre... :D 

  1. <?php
  2.  
  3. require ('../config.php');
  4. mysql_connect ("$host", "$bdd", "$pass");
  5. mysql_select_db ("$bdd");
  6.  
  7. $retour = mysql_query('SELECT * FROM kit_animaux ORDER BY id DESC LIMIT 0,1');
  8.  
  9. while ($donnees = mysql_fetch_array($retour))
  10. {
  11. echo '...';
  12. }
  13. mysql_close();
  14. ?>


Donc:

Citation :
1) Tu comptes le nombre d'éléments dans ta bdd, ce qui sera le nombre de pages que tu auras


  1. $row = mysql_num_rows($retour);


Citation :
2) tu passes un paramètre $_GET['page'] avec le numéro de la page que tu veux avoir. Si ce paramètre n'existe pas, tu mets $page = 0. Si ce paramètre est plus grand que le nombre de pages que tu as, tu le mets égal au nombre de pages que tu as.


  1. $_GET['page'] = $row;
  2. if ($page == 0) {
  3. echo "0";
  4. }
  5. else {
  6.  
  7. if ($row > &page) {
  8. echo $row;
  9. }
  10. else {


Citation :
3) tu fais le mysql_query() que je t'ai donné plus haut, avec la variable $_GET['page'], ce qui va te retourner le "$_GET['page']"ième élément (moins un, vu que ça commence à 0) de ta base.


  1. $retour = mysql_query('SELECT * FROM kit_animaux ORDER BY id DESC LIMIT '.($page-1).',1');


Citation :
4) les boutons suivants et précédents seront égaux à $_GET['page']+1 et $_GET['page']-1


  1. $suivant = $_GET['page']+1;
  2. $precedent = $_GET['page']-1;
  3.  
  4. echo "<a href=\"$suivant\">Page suivante</a>";


Bon dois avoir des méchante faute mais comme j'ai dis plus haut je suis pas expert! Merci de ton aide omar!
Expert Programmation

Ok. Désolé de dire que ça me semble simple... mais bon, voilà... quand je vois que tu aides quand même quelques personnes, je trouve ça bizarre que tu ne fasses pas ça (pas pour te dénigrer hein, y'a des choses toutes connes que je ne sais pas faire...) j'ai appris récemment que tu pouvais utiliser { } dans une chaine de caractère pour délimiter une variable.

Exemple :
  1. <? $tab[1]['toto'] = 'tata';
  2. echo "ma variable : {$tab[1]['toto']}"; ?>


Bref, revenons en à nos moutons :D 
Sans tester, j'aurais dit quelque chose du genre :
  1. <?php
  2.  
  3. require ('../config.php');
  4. mysql_connect ("$host", "$bdd", "$pass");
  5. mysql_select_db ("$bdd");
  6.  
  7. $retour = mysql_query('SELECT * FROM kit_animaux ORDER BY id DESC'); // tu peux arranger la requête, on veut juste retourner le nombre d'éléments, pas besoin d'order by, et de select *
  8. $nb_elts = mysql_num_rows($retour); // on récupère le nombre d'éléments
  9.  
  10. if(isset($_GET['page']) && isnumeric($_GET['page']) && $_GET['page'] >= 1) { // on regarde si la variable get page est définie et si c'est un nombre supérieur à 1
  11. // si la valeur est supérieure à la valeur maximale (le nombre d'éléments retourné par la requête divisé par le nombre d'éléments par page (dans ton cas le nombre d'éléments par page est égal à 1, donc ça ne sert pas de le mettre, mais c'est un bout de l'algo si un jour tu veux passer à 2 par page, ou plus)) alors on met la valeur maximale, sinon la valeur passée en GET
  12. $page = ($_GET['page'] > ($nb_elts /1) ? $nb_elts : $_GET['page'];
  13. } else {
  14. $page = 1;
  15. }
  16.  
  17. // maintenant tu as le numéro de page que tu veux, donc tu récupères l'élément de cette page dans la base de données :
  18. $retour = mysql_query('SELECT * FROM kit_animaux ORDER BY id DESC LIMIT '.($page-1).', 1'); // on prend $page-1, comme ça, si le numéro de page est 1, on retourne 0, soit la première ligne, etc...
  19. $row = mysql_fetch_array($retour);
  20.  
  21. // tu as maintenant dans ta variable (de type array) $row toutes les données retournées (une ligne SQL quoi)
  22.  
  23.  
  24. mysql_close();
  25.  
  26. // tu peux afficher ta pagination après :
  27.  
  28. if($page > 1) {
  29. echo '<a href="?page='.$page-1.'">Page précédente</a>';
  30. }
  31.  
  32. if($nb_elts > $page) {
  33. echo '<a href="?page='.$page+1.'">Page suivante</a>';
  34. }
  35.  
  36. ?>


(désolé s'il manque une parenthèse ou un crochet ou que y'a une erreur, mais là j'ai que le bloc notes sous la main, c'est difficile pour se rendre compte)

Et ça devrait le faire théoriquement ^^
Expert Programmation

Merci :ange: 

Y'a un ptit problème avec cette ligne

  1. if(isset($_GET['page']) && isnumeric($_GET['page']) && $_GET['page'] >= 1)) {
  2.  
  3. $page = $_GET['page'] > ($nb_elts /1) ? $nb_elts:$_GET['page'];
  4. }
  5. else {
  6. $page = 1;
  7. }


Tu vois une faute?

$nb_elts car j'ai fais un echo et il m'affiche bien le nombr de ligne dans ma table.
Expert Programmation

y'a pas une parenthèse en trop ? >= 1)) enlève une des deux.

Edit: doit y avoir une autre erreur, ça doit être ça :

  1. if(isset($_GET['page']) && isnumeric($_GET['page']) && $_GET['page'] >= 1) {
  2.  
  3. $page = ($_GET['page'] > ($nb_elts /1)) ? $nb_elts : $_GET['page'];
  4. }
  5. else {
  6. $page = 1;
  7. }
Expert Programmation

Bah c'est du PHP, et $row est un array.

Donc, si par exemple dans ta base de données tu as 4 colonnes :
id / nom / toto / tata

Ca donnera :
$row['id'] / $row['nom'] / $row['toto'] / $row['tata']

Et tu utiliseras toutes les données.
Expert Programmation

Bah oui $page n'a pas de valeur...

  1. <?php
  2.  
  3. require ('../config.php');
  4. mysql_connect ("$host", "$bdd", "$pass");
  5. mysql_select_db ("$bdd");
  6.  
  7. $retour = mysql_query('SELECT * FROM kit_animaux');
  8.  
  9. $nb_elts = mysql_num_rows($retour);
  10.  
  11.  
  12. if(isset($_GET['page']) && isnumeric($_GET['page']) && $_GET['page'] >= 1) {
  13.  
  14. $page = ($_GET['page'] > ($nb_elts /1)) ? $nb_elts : $_GET['page'];
  15. }
  16. else {
  17. $page = 1;
  18. }
  19.  
  20.  
  21. $retour2 = mysql_query('SELECT * FROM kit_animaux ORDER BY id DESC LIMIT '.($page-1).', 1');
  22.  
  23. while ($donnees = mysql_fetch_array($retour2))
  24. {
  25. echo '...';
  26. }
  27. mysql_close();
  28.  
  29. if($page > 1) {
  30. echo '<a href="?page=$page-1">Page précédente</a>';
  31. }
  32.  
  33. if($nb_elts > $page) {
  34. echo '<a href="?page=$page+1">Page suivante</a>';
  35. }
  36.  
  37.  
  38. ?>
Expert Programmation

c'est pas que $page n'a pas de valeur, c'est que $page devrait être interprété par PHP, or vu que tu n'as pas mis ce que j'avais mis pour précédent et suivant, (fallait peut-être ajouter des () pour que ça fonctionne), la variable n'est pas parsée.

Fais des echo de $page pour voir la valeur qu'elle a pris après le else { $page = 1; }
Affiche ta requête aussi, qu'on puisse voir où ça bug.
Expert Programmation

Quand je fais echo '$page';

Il m'affiche $page

  1. <?php
  2.  
  3. require ('../config.php');
  4. mysql_connect ("$host", "$bdd", "$pass");
  5. mysql_select_db ("$bdd");
  6.  
  7. $retour = mysql_query('SELECT * FROM kit_animaux');
  8.  
  9. $nb_elts = mysql_num_rows($retour);
  10.  
  11.  
  12. if(isset($_GET['page']) && isnumeric($_GET['page']) && $_GET['page'] >= 1) {
  13.  
  14. $page = ($_GET['page'] > ($nb_elts /1)) ? $nb_elts : $_GET['page'];
  15. }
  16. else {
  17. $page = 1;
  18.  
  19. }
  20.  
  21.  
  22. $retour2 = mysql_query('SELECT * FROM kit_animaux ORDER BY id DESC LIMIT '.($page-1).', 1');
  23.  
  24. while ($donnees = mysql_fetch_array($retour2))
  25. {
  26. echo '<table width="100%">
  27.  
  28. <tr>
  29. <td align="center" colspan="2"><h2>'.$donnees['titre'].'</h2></td>
  30. </tr>
  31. <tr>
  32. <td id="col1"><a href="'.$donnees['img'].'" target="_blank"><img src="'.$donnees['img'].'" width="150px" heigth="112px" alt="'.$donnees['titre'].'" /></a></td>
  33. <td id="col2">'.$donnees['description'].'<br />
  34. <span style="color: #0aaafd">Auteur</span>: '.$donnees['auteur'].'</td>
  35. </tr>
  36. <tr>
  37. <td align="center" colspan="2"><a href="../achat.php?id='.$donnees['id'].'" onclick="window.open(this.href, \'Commentaire\', \'height=500, width=600, top=100, left=100, toolbar=no, menubar=yes, location=no, resizable=no, scrollbars=yes, status=no\'); return false;"><img src="../images/achat.png" width="110px" height="30px" alt="Acheter" /></a></td>
  38. </tr>
  39. </table>
  40. </div>
  41. <div class="meta">
  42. <p class="date">Ajouté le '.$donnees['timestamp'].'</p>
  43. <p class="file"><a href="../comment/add_com.php?id='.$donnees['id'].'" onclick="window.open(this.href, \'Commentaire\', \'height=400, width=500, top=100, left=100, toolbar=no, menubar=yes, location=no, resizable=no, scrollbars=no, status=no\'); return false;">Posté un commentaire</a> | <a href="../comment/view_com.php?id='.$donnees['id'].'" onclick="window.open(this.href, \'Commentaire\', \'height=400, width=500, top=100, left=100, toolbar=no, menubar=yes, location=no, resizable=no, scrollbars=no, status=no\'); return false;">28 Commentaires</a></p>';
  44. }
  45.  
  46. mysql_close();
  47.  
  48. if($page > 1) {
  49. echo '<a href="?page=$page-1">Page précédente</a>';
  50. }
  51.  
  52. if($nb_elts > $page) {
  53. echo '<a href="?page=$page+1">Page suivante</a>';
  54. }
  55.  
  56. ?>
  57. </p>
Expert Programmation

Bah non pas la peine ! :o 
Affiche la valeur de $page une fois qu'il est traité par
  1. # if(isset($_GET['page']) && isnumeric($_GET['page']) && $_GET['page'] >= 1) {
  2. #
  3. # $page = ($_GET['page'] > ($nb_elts /1)) ? $nb_elts : $_GET['page'];


qu'on puisse voir la valeur qu'il prend en fonction du paramètre $_GET['page']. C'est bizarre qu'il ne fonctionne pas !
Lassé par la pub ? Créez un compte
Tom's guide dans le monde