Afficher sur pllusieurs page les données d'une base mysql
cs_romega
Messages postés32Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention20 avril 2008
-
10 nov. 2007 à 21:26
cs_romega
Messages postés32Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention20 avril 2008
-
11 nov. 2007 à 12:24
Bonjour a tous,
Alors pour faire un blog, j'ai une base de donnée contenant des titres, des billets, des dates, etc... Et j'ai besoin d'afficher ce que contient cette base sur plusieurs pages, en piochant et jonglant avec le php j'ai un petit script qui est sencé faire ca, on remplie une variable qui idique le nombre de billets par page avec un petit calcul on calcul le nombre de page et on les crées dynamiquement. Seuleument il y a un problème, pour la premiere page pas de problème (3 billet en reglant sur 3), mais pour la seconde page, j'ai 5 billets au lieux de 3. Quel que soit le réglage j'ai 2 billets en plus sur les pages supèrieurs a 1. Voila le script, si vous pouvez m'aider ce serait sympa, j'ai passé ma journée a cherché partout et j'ai rien trouvé.
Je vous remercie d'avance pour votre aide
<?php
mysql_connect("adresse", "log", "pass"); // Connexion à MySQL
mysql_select_db("base"); // Sélection de la base coursphp
$sql = "SELECT COUNT(*) FROM billets";
$res = mysql_query($sql);
$nbbillet = mysql_result($res,0); //nombre de billet total
$nbbilletpage = 3 ; // nombre de billets par page
$pasround = $nbbillet / $nbbilletpage ;//nombre de page arrondie a la décimal supèrieur
$np = 1;
$nbpage = ceil($pasround);
if (empty($_GET['page'])){$_GET['page'] = 1;} //initialisation du nombre de page lors de la premiere venu sur la page
mysql_connect("ad", "log", "pas"); // Connexion à MySQL
mysql_select_db("base"); // Sélection de la base coursphp
$billetsup = ($_GET['page'] * $nbbilletpage ) ; //Calcul des limite de la base de donnée
$billetinf = $billetsup - $nbbilletpage ;
$reponse = mysql_query("SELECT * FROM billets ORDER BY id DESC LIMIT $billetinf,$billetsup"); // Requête SQL avec limite
while ($donnees = mysql_fetch_array($reponse))// boucle pour afficher la base de donnée, ici 3 billets par page
{
?>
<?php
echo $donnees['titre'];
?>
<?php
echo $donnees['date'];
?>
<?php
echo '
';
echo $donnees['billet'];
echo '
';
echo '
';}
while ($np <= $nbpage)//boucle pour générer les pages qui affiche les billets
{
echo '<center>[index2.php?page='.$np.' Page '.$np.' ]</center>';
$np++;
}
mysql_close(); // Déconnexion de MySQL
?>
A voir également:
Afficher sur pllusieurs page les données d'une base mysql
cs_romega
Messages postés32Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention20 avril 2008 10 nov. 2007 à 23:42
Je crois que le problème se pose dans la boucle par rapport a avec l'array par rapport a la base de donnée mais quel est le problème ?
Ou alors le LIMIT de mysql fonctionne mal ?
Je ne sais pas trop
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 11 nov. 2007 à 00:32
Salut,
La clause LIMIT de MySQL fonctionne très bien... Aucun soucis de ce côté là.
Il faut juste savoir s'en servir correctement ;)
Toi, tu passes le décalage du premier et du dernier billet en argument.
C'est de là que vient l'erreur.
Le premier argument correspond effectivement au décalage du premier enregistrement à retourner (pour retourner le premier enregistrement, il faut mettre 0, puisque c'est un décalage, pas une position).
Le deuxième argument correspond au nombre d'enregistrement maximum à retourner.
Autrement dit, ta requête n'est pas correcte. Elle devrait être comme ça :
$reponse = mysql_query("SELECT * FROM billets ORDER BY id DESC LIMIT $billetinf,$nbbilletsup");
Du coup, change ton calcul.
Supprime la ligne qui calcule $billetsup.
Modifie celle qui calcule $billetinf comme ça :
$billetinf = $nbbilletpage * ($_GET['page'] - 1);
J'en profite pour attirer ton attention sur deux petits détails.
- Evite d'utiliser la balise ouvrante courte <? et utilise plutôt <?php
La différence vient du fait que la balise courte ne fonctionne QUE si la configuration l'y autorise, ce qui N'EST PAS toujours le cas... La balise <?php est la seule qui soit toujours valide.
- Fais quelques tests sur $_GET['page'], parce que là, je peux y passer n'importe quelle valeur, quitte à faire planter ton script, en passant simplement page=-12 ou page=coucou-c-moi dans l'url
Par exemple, assure toi que c'est un entier, avec is_int, converti en entier si besoin avec (integer) ou intval(), assure toi que la valeur passée est positive...
cs_romega
Messages postés32Date d'inscriptionjeudi 8 novembre 2007StatutMembreDernière intervention20 avril 2008 11 nov. 2007 à 12:24
Enorme merci qui sauve mes cheveux, en effet je n'avais pas bien compris le fonctionnement de LIMIT, maintenant tout fonctionne nickel, les ligne de $billetsup et $billetinf que j'ai fais sont :