LIMIT $nb_debut, $nb_fin

LIMIT $nb_debut, $nb_fin - PHP - Programmation

Marsh Posté le 12-09-2005 à 15:23:02    

Bonjour,  
 
C'est de nouveau moi, avec encore un petit problème.. Je pense que c'est tout bête, mais ça commence à faire presque une heure que je tourne en rond là dessus, donc peut-être qu'un oeil extérieur pourra m'aider.
 
Voilà : je veux afficher en gros des messages sur un forum.
Ce que je veux, c'est par exemple que si je décide qu'il y a 20 pages par forum, ma requete fasse un "LIMIT 0,20" pour la page 1, un "LIMIT 21,40" pour la page 2, et ainsi de suite.
Seulement, avec le code suivant, ça ne veut absolument pas marcher.
 

$nombre_de_messages_par_pages = 20;  
   
//une fonction ceil calcule le nb de pages qu'il y a en tout
$nombre_de_pages = ceil ($total['nombre_total_messages'] / $nombre_de_messages_par_pages);
   
//on fixe ensuite les varibles $nb_debut et $nb_fin qui vont servir pour savoir quels messages on doit afficher en fonction de la page qu'on veut
 
if (isset ($_GET['page']))
{
 $nb_debut = 0 + $nombre_de_messages_par_pages * ( $_GET['page']-1 ) + 1;
 $nb_fin = $nombre_de_messages_par_pages + $nombre_de_messages_par_pages * ( $_GET['page']- 1 ) ;
}
   
else //si la personne arrive sur la page pour la première fois, on affiche les messages les plus récents
{
 $nb_debut = 0 ;
 $nb_fin = 20 ;
}
 
 
mysql_connect (************);
mysql_select_db (**************) ;
$recuperation_messages = mysql_query("SELECT * FROM forum WHERE rubrique='" . $_GET['rubrique'] . "' ORDER BY timestamp desc LIMIT $nb_debut,$nb_fin" ) or die(mysql_error());
mysql_close () ;


 
Si je clique sur le lien pour lequel la variable $_GET['page'] aura une valeur de :
(note, pour les $nb_debut et $nb_fin, les valeurs que je donne là, ça vient d'un echo, donc c'est ce que c'est, et non pas ce que ça devrait être)
 
- page 1 ; j'ai $nb_debut = 1 et $nb_fin = 20 (il faudrait un $nb_debut = 0, je suis d'accord)
 -> je vois 20 messages...
 
- page 2 ; j'ai $nb_debut = 21 et $nb_fin = 40
 -> je vois 40 messages...
 
- page 3 ; j'ai $nb_debut = 41 et $nb_fin = 60
 -> je vois 22 messages...
 
Je suis un peu perplexe là j'avoue... c'est le nombre de messages que ça me renvoie qui me trouble, je vois pas du tout d'où ça sort...

Reply

Marsh Posté le 12-09-2005 à 15:23:02   

Reply

Marsh Posté le 12-09-2005 à 15:28:28    

Faut revoir la syntaxe de LIMIT...
 
Le premier nombre est le numéro d'ordre du premier enregistrement (donc pour toi 0 pour la page 1, 20 pour la page 2, 40, etc), le deuxième c'est le nombre d'enregistrements que tu veux, donc dans ton cas c'est constant et ça reste à 20.
 
Ton LIMIT doit donc être de la forme :
LIMIT ($page - 1) * 20, 20


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 12-09-2005 à 15:33:20    

Rhô purée ce que je me sens bête...  
J'aurais du vérifier ça en premier... j'étais tellement en train de me dire que c'était le début et la fin que je me suis pris la tête une heure sur mes calculs en me disant que je savais plus compter....
 
Merci beaucoup en tout cas... C'est une bonne leçon pour moi, la prochaine fois je m'acharnerai moins comme ça, je vérifierai mes bases avant tout :$

Reply

Marsh Posté le 12-09-2005 à 15:35:28    

Slt je suppose que tu utilise un requète sql du typ SELECT * FROM table LIMIT $nb_debut ,$nb_fin ;
 
si c le cas je dirais juste une chose RTFM(Read the fucking manual).
la fonction LIMIT de mysql recoit un valeur de depart et unh offset et non pas un valeur de fin ... je sais pas si tu me cromprend
 
pour ètre claire tu devrai plutot avoir comme valeur de page ::
 
 
page 1 ; j'ai $nb_debut = 1 et $nb_fin = 20 (il faudrait un $nb_debut = 0, je suis d'accord)  
 -> je vois 20 messages...  
 
- page 2 ; j'ai $nb_debut = 21 et <b>$nb_fin = 20 </b>
 -> je vois 40 messages...  
 
- page 3 ; j'ai $nb_debut = 41 et  <b>$nb_fin = 20</b>  
 -> je vois 22 messages...


Message édité par DEns91 le 12-09-2005 à 15:37:11
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed