Tom's Guide > Forum > Programmation > Limite de page

Limite de page

Forum Programmation : Limite de page

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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

Répondre à hinkz

C'est aussi simple que cela?

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

Tu veux faire une pagination classique ?
Ou juste la première page qui contient 1 news (ou je sais pas ce que tu veux), et la 2ème page qui contient tout le reste ?

Répondre à OmaR

La dernière ajouter sur la première page les autres sur des autres pages (une par parge) et chaque fois en dessous le numéro de la page avec "précédente" "suivante".

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

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 :

Code :
  1. mysql_query('SELECT * FROM la_table ORDER BY id DESC LIMIT '.($page-1).',1');

Répondre à OmaR

Le truc c'est que sur les script de pagination ils font casi 2 pages et je pige pas grand chose. Y'a pas un truc tout simple?

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

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

Répondre à OmaR

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

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



Donc:

Citation :

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



Code :
  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.



Code :
  1. $_GET['page'] = $row;
  2. if ($page == 0) {
  3.   echo "0";
  4. }
  5. else {
  6. if ($row > &page) {
  7.   echo $row;
  8. }
  9. 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.



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



Code :
  1. $suivant = $_GET['page']+1;
  2. $precedent = $_GET['page']-1;
  3. 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!

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

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 :

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

Code :
  1. <?php
  2. require ('../config.php');
  3. mysql_connect ("$host", "$bdd", "$pass" );
  4. mysql_select_db ("$bdd" );
  5. $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 *
  6. $nb_elts = mysql_num_rows($retour); // on récupère le nombre d'éléments
  7. 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
  8.     // 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
  9.     $page = ($_GET['page'] > ($nb_elts /1) ? $nb_elts : $_GET['page'];
  10. } else {
  11.     $page = 1;
  12. }
  13. // 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 :
  14. $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...
  15. $row = mysql_fetch_array($retour);
  16. // tu as maintenant dans ta variable (de type array) $row toutes les données retournées (une ligne SQL quoi)
  17. mysql_close();
  18. // tu peux afficher ta pagination après :
  19. if($page > 1) {
  20.     echo '<a href="?page='.$page-1.'">Page précédente</a>';
  21. }
  22. if($nb_elts > $page) {
  23.     echo '<a href="?page='.$page+1.'">Page suivante</a>';
  24. }
  25. ?>
 

(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 ^^


Message édité par OmaR le 15-10-2007 à 21:37:45
Répondre à OmaR

Merci :ange:

Y'a un ptit problème avec cette ligne

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



Tu vois une faute?

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

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

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 :

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


Message édité par OmaR le 15-10-2007 à 23:01:29
Répondre à OmaR

Plus de page blanche mais ma table s'affiche pas... :??:

Je vois juste page suivante..


Message édité par Allstar27 le 16-10-2007 à 00:08:53
------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

Est-ce que tu as ajouter l'affichage de tes données ? Car je l'ai pas mis moi dans mon code...
T'as tout ce qu'il te faut dans la variable $row

Répondre à OmaR

Donc je fais un while ($row)


???

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

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.

Répondre à OmaR

Bon bah voilà le résultat... :??:

http://www.allstar27.123.fr/kits/animaux.php

J'ai deux ligne dans ma table. test 1 et test 2

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

Y' apas quelque chose qui te choque dans l'URL ?
animaux.php?page=$page+1

 

Edit: même en entrant une valeur correcte, ça foire hmm...
Fais voir ton code final


Message édité par OmaR le 16-10-2007 à 22:07:28
Répondre à OmaR

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

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


Message édité par Allstar27 le 16-10-2007 à 23:17:08
------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

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.

Répondre à OmaR

Quand je fais echo '$page';

Il m'affiche $page

Code :
  1. <?php
  2. require ('../config.php');
  3. mysql_connect ("$host", "$bdd", "$pass" );
  4. mysql_select_db ("$bdd" );
  5. $retour = mysql_query('SELECT * FROM kit_animaux');
  6. $nb_elts = mysql_num_rows($retour);
  7. if(isset($_GET['page']) && isnumeric($_GET['page']) && $_GET['page'] >= 1) {
  8.     $page = ($_GET['page'] > ($nb_elts /1)) ? $nb_elts : $_GET['page'];
  9. }
  10. else {
  11.     $page = 1;
  12. }
  13. $retour2 = mysql_query('SELECT * FROM kit_animaux ORDER BY id DESC LIMIT '.($page-1).', 1');
  14. while ($donnees = mysql_fetch_array($retour2))
  15.     {
  16.     echo '<table width="100%">
  17.         <tr>
  18.         <td align="center" colspan="2"><h2>'.$donnees['titre'].'</h2></td>
  19.         </tr>
  20.         <tr>
  21.         <td id="col1"><a href="'.$donnees['img'].'" target="_blank"><img src="'.$donnees['img'].'" width="150px" heigth="112px" alt="'.$donnees['titre'].'" /></a></td>
  22.         <td id="col2">'.$donnees['description'].'<br />
  23.         <span style="color: #0aaafd">Auteur</span>: '.$donnees['auteur'].'</td>
  24.         </tr>
  25.         <tr>
  26.         <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>
  27.         </tr>
  28.         </table>
  29.             </div>
  30.             <div class="meta">
  31.                 <p class="date">Ajouté le '.$donnees['timestamp'].'</p>
  32.                 <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>';
  33. }
  34. mysql_close();
  35. if($page > 1) {
  36.     echo '<a href="?page=$page-1">Page précédente</a>';
  37. }
  38. if($nb_elts > $page) {
  39.     echo '<a href="?page=$page+1">Page suivante</a>';
  40. }
  41. ?>
  42. </p>

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

Bah c'est normal que quand tu fasses echo '$page' il te donne
$page, vu que les simples quotes ne parsent pas les variables...
Il faut faire echo $page ou encore echo "$page"...

Répondre à OmaR

echo $page; m'affiche 1

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

Ouais, normal.
Et quand tu passes "page" en argument, faudrait voir quelle valeur ça prend, car ça bug.
ça affiche plus rien

Répondre à OmaR

Bon bah je crois que je vais devoir créer une page pour chaque entrée... :(

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

Bah non pas la peine ! :o
Affiche la valeur de $page une fois qu'il est traité par

Code :
  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 !

Répondre à OmaR

Il n'affiche rien...

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

il faut que tu passes le paramètre page dans l'URL.
tonsite.com?page=1 par exemple

Répondre à OmaR
- 0 +

Oui j'avais remarqué.
Quelle est la valeur de $page dans ce cas là ? C'est bizarre que ça ne fonctionne pas...

Répondre à OmaR

Valeur de page => rien

------------------------------ Rémunère ton site
Hosting Favicon
Clic pas ici
Répondre à Allstar27
- 0 +

bizarre... :(
je comprend pas...

Répondre à OmaR
Tom's Guide > Forum > Programmation > Limite de page
Aller à :

Il y a 283 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens