problème pagination ( mysql)
Rajoute des echo $barre; à différents emplacement de ton code pour voir où ça ne fonctionne pas.
Juste un truc (oui encore un) faire echo "$barre"; c'est une mauvaise méthode.
il faut écrire echo $barre;
Les doubles guillements ne sont généralement utiliser que dans les chaines.
Par exemple echo "mon nom est $nom";
Mais de façon générale il faut bannir les doubles guillements. C'est moche et ça oblige php à faire un travail en plus.
La bonne méthode pour les chaines est echo 'mon nom est ' . $nom;
et pour des variable simple echo $mavar;
Un autre détail. Après un return il n'y a rien car comme son nom l'indique return retroune le résultat.
le 31/05/2010 à 13:04
Kniva
Je vous redonne tout le code
<?php
function barre_naviguation($nb_total, $nb_affichage_par_page, $debut, $nb_liens_ds_la_barre)
{
$barre='';
/*on récupère l'URL courante munie de ses paramètres auxquels on ajoute le paramètre 'début' qui jouera le rôle du premier élément
de notre LIMIT*/
if(htmlentities($_SERVER['QUERY_STRING'])== "")
{
$query=htmlentities($_SERVER['PHP_SELF']).'?debut=';
}
else
{
$tableau=explode("debut=", htmlentities($_SERVER['QUERY_STRING']));
$nb_element=count($tableau);
if($nb_element==1)
{
$query=htmlentities($_SERVER['PHP_SELF']).'?'.htmlentities($_SERVER['QUERY_STRING']).'&debut=';
}
else
{
if($tableau[0]=="")
{
$query=htmlentities($_SERVER['PHP_SELF']).'?debut=';
}
else
{
$query=htmlentities($_SERVER['PHP_SELF']).'?'.$tableau[0].'debut=';
}
}
}
//on calcule le numéro de la page active
$page_active=floor(($debut/$nb_affichage_par_page)+1);
//on calcule le nombre de pages totales que va prendre notre affichage
$nb_pages_tolal=ceil($nb_total/$nb_affichage_par_page);
//on calcule le premier numero qui va s'afficher, ainsi que le dernier($cpt_deb et $cpt_fin)
if($nb_liens_ds_la_barre%2==0)
{
$cpt_deb1=$page_active-($nb_liens_ds_la_barre/2)+1;
$cpt_fin1=$page_active+($nb_liens_ds_la_barre/2);
}
else
{
$cpt_deb1=$page_active-floor(($nb_liens_ds_la_barre/2));
$cpt_fin1=$page_active+floor(($nb_liens_ds_la_barre/2));
}
if($cpt_deb1<=1)
{
$cpt_deb=1;
$cpt_fin=$nb_liens_ds_la_barre;
}
elseif($cpt_deb1>1 && $cpt_fin1<$nb_pages_total)
{
$cpt_deb=$cpt_deb1;
$cpt_fin=$cpt_fin1;
}
else
{
$cpt_deb=($nb_pages_total-$nb_liens_ds_la_barre)+1;
$cpt_fin=$nb_pages_total;
}
if($nb_pages_total<=$nb_liens_ds_la_barre)
{
$cpt_deb=1;
$cpt_fin=$nb_pages_total;
}
//si les premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
if($cpt_deb!=1)
{
$cible=$query.(0);
$lien='<a href=" ' .$cible. ' "><<</a> ';
}
else
{
$lien='';
}
$barre .=$lien;
//on affiche ts les liens ds notre barre, tt en vérifiant de ne pas mettre de lien pr la page active
for($cpt=$cpt_deb;$cpt_fin;$cpt++)
{
if($cpt==$page_active)
{
if($cpt==$nb_pages_total)
{
$barre .=$cpt;
}
else
{
$barre .=$cpt.'  ';
}
}
else
{
if($cpt==$cpt_fin)
{
$barre .="<a href=' ".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .="'>".$cpt."</a> - ";
}
}
}
$fin=($nb_total-($nb_total%$nb_affichage_par_page));
if(($nb_total%$nb_affichage_par_page)==0)
{
$fin=$fin-$nb_affichage_par_page;
}
/*si $cpt_fin ne vaut pas la dernière page de la barre de naviguation, on affiche un >> qui sera un lien vers la dernière page
de naviguation.*/
if($cpt_fin!=$nb_pages_total)
{
$cible=$query.$fin;
$lien=' <a href="' .$cible. '">>></a>';
}
else
{
$lien='';
}
$barre .=$lien;
return $barre;
}
?>
<?php
include("page.inc");
include("inf.php");
//on se connecte à notre base
$base=mysql_connect(SERVER,LOGIN,MDP);
mysql_select_db(BDD,$base);
/*on prépare une requête permettant de calculer le nbre total d'éléments qu'il faudra afficher sur
nos différentes pages*/
$sql='SELECT count(*) FROM DVD';
//on exécute cette requête
$resultat=mysql_query($sql,$base) or die ('Erreur SQL!<br/>'.$sql.'<br/>'.mysql_error());
//on récupère le nombre d'élements à afficher
$nb_total=mysql_fetch_array($resultat);
//on teste si ce nombre ne vaut pas 0
if(($nb_total=$nb_total[0])==0)
{
echo"Aucune réponse trouvée";
}
else
{
// echo'<center><table border="1" width="600">
// <tr><td>dvdTitre</td><td rowspan="4">dvdImage</td></tr>
// <tr><td>dvdDate</td></tr>
// <tr><td>dvdEditeur</td></tr>
// <tr><td>dvdDescription</td></tr>
// </table></center>';
}
/*sinon, on regarde si la variable $debut ( le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on
l'initialise à 0.*/
if(!isset ($_GET['debut']))
{
$_GET['debut']=0;
$nb_affichage_par_page=2;
//preparation de la requete avec le LIMIT
$sql='SELECT dvdTitre, dvdDate, dvdEditeur, dvdDescription, dvdImage FROM DVD ORDER BY dvdDate DESC LIMIT '
. $_GET['debut'] . ','. $nb_affichage_par_page;
//on exécute la requete
$req=mysql_query($sql) or die ('Erreur SQL!<br/>' .$sql. '<br/>'. mysql_error());
//on va scanner tous les tuples un par un
while($data=mysql_fetch_array($req))
{
//on affiche les résultats ds la <table>
echo'<center><table border="1" width="600"><tr><td>'. htmlentities(trim($data['dvdTitre'])).'</td>';
echo'<td rowspan="5">'. htmlentities(trim($data['dvdImage'])).'</td></tr>';
echo'<tr><td>' . htmlentities(trim($data['dvdDate'])) .'</td></tr>';
echo'<tr><td>' . htmlentities(trim($data['dvdEditeur'])). '</td></tr>';
echo'<tr><td>' . htmlentities(trim($data['dvdDescription'])). '</td></tr>';
}
//on libere l'espace memoire alloué pour cette requete
mysql_free_result($req);
echo'</table></center><br><br>';
//on affiche enfin notre barre
echo'<span class="gras">' . barre_naviguation($nb_total,$nb_affichage_par_page, $_GET['debut'], 5,) . '</span>';
}
//on libère l'espace memoire alloué pour cette reuqête
mysql_free_result($resultat);
echo'</table><br/>';
?>
Je pensais que dans la ligne
<?php
echo'<span class="gras">' . barre_naviguation($nb_total,$nb_affichage_par_page, $_GET['debut'], 5,) . '</span>';
?>
la barre de naviguation( soit la fonction avant) allait apparaitre
Et cela n'affiche rien ?
Sinon, ta pagination ne fonctionnera pas, car tu affiches les données provenant de la base si et seulement si $_GET['debut'] n'existe pas.
Par conséquent, en page 2, ta page sera vide.
le 31/05/2010 à 14:15
Kniva
J'ai des données de ma base qui s'affiche, mais sinon, je n'ai pas la barre de navigation.
Si je veux que ma pagination fonctionne, il faut que je dise que $_GET['debut'] existe, c'est cela??
Heu non, il faut tester si il existe et si non l'initaliser, ce que tu fais déjà.
Le problème, c'est que tu as tout collé dans ton if, alors que seule l'initialisation doit se faire dedans (je parle du if : if (!isset($_GET['debut']))).
Sinon, pourquoi tu as une virgule après le 5 la ?
barre_naviguation($nb_total,$nb_affichage_par_page, $_GET['debut'], 5,).
Sincerement, tu ne voudrais pas relire le comment faire, le comprendre et nous dire ce que tu ne comprends pas ?
La, on avance à pas d'escargot, et on sent que ton niveau de PHP est plutôt faible, ie. tu ne comprends pas ce que tu fais.
le 31/05/2010 à 15:48
Kniva
Pardon pour la virgule, j'ai du faire une faute de frappe.
Je sais que mon niveau de php est très faible, j'ai compris le code. La seule seule chose que je ne comprends pas c'est pourquoi ma barre de navigation ne s'affiche pas. J'ai déjà lu plusieurs tutaux sur la pagination
Ben fais des echo de tes variables, tu verras celle qui ne contient pas une valeur "plausible".
Je suis d'accord la seule technique qui fonctionne c'est de faire des echo un peu partout et de vérifier la cohérence de tes données.
le 02/06/2010 à 17:55
Kniva
J'ai remodifié le code, et je suis allé voir sur différents site comment il faisait, et ça marche enfin. J'ai même réussi a régler mon problème, tout fonctionne correctement.
Merci pour l'aide apportée
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: