problème pagination ( mysql)

Répondre
Kniva
le 29/05/2010 à 14:16
Kniva
Pourtant j'ai marqué le calcul pour la pagination:
<?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($_SERVER['QUERY_STRING']== "")
{
$query=$_SERVER['PHP_SELF'].'?debut=';
}
else
{
$tableau=explode("debut=", $_SERVER['SUERY_STRING']);
$nb_element=count($tableau);
if($nb_element==1)
{
$query=$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
}
else
{
if($tableau[0]=="")
{
$query=$_SERVER['PHP_SELF'].'?debut=';
}
else
{
$query=$_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. ' ">&lt;&lt;</a>&nbsp;&nbsp;';
}
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.'&nbsp;&nbsp';
}
}
else
{
if($cpt==$cpt_fin)
{
$barre .="<a href=' ".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .="'>".$cpt."</a>&nbsp;-&nbsp;";
}
}
}
$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='&nbsp;&nbsp;<a href="' .$cible. '">&gt;&gt;</a>';
}
else
{
$lien='';
}
$barre .=$lien;
return $barre;
}
?>
dark_nemo
le 29/05/2010 à 14:44
dark_nemo
Ligne 14 c'est pas $_SERVER['SUERY_STRING'] mais $_SERVER['QUERY_STRING']

Tiens un conseil au passage. Les données $_SERVER ne sont pas protégées de base par php donc pour il faut le faire car sinon tu risques d'avoir des soucis.

htmlentities($_SERVER['QUERY_STRING']);
Pareil pour htmlentities($_SERVER['PHP_SELF']);
Je le répète souvent mais en php il faut sécuriser les applications
dark_nemo
le 29/05/2010 à 14:48
dark_nemo
Si je peux te donner un autre conseil qui évite d'être bloqué, c'est de tester toutes les 5 minutes.
Je fais un truc. Je test pour voir si ça fonctionne. Je fais un autre truc. Je test pour voir si ça focntionne.
Après lorsque tu vas prendre de l'assurance, tu vas voir tes erreurs plus rapidement donc tu vas pourvoir tester l'ensemble de ton script mais au début il faut faire des tests très souvent.
Step by step ;)
Kniva
le 29/05/2010 à 15:02
Kniva
Tout d'abord merci beaucoup pour toutes ses réponses et de passer du temps sur mon problème. Je débute, enfin, ça fait un moment que j'apprends le php, mais on va dire que j'ai le niveau d'un débutant.

J'ai corrigé cette faute de frappe, suivi tes conseils, tout s'affiche normalement ( enfin, j'ai encore le détail de l'image a régler). J'ai mes tableaux et mes informations qui s'affichent, mais je n'ai pas mes onglets pour passer à la page suivante, et il n'y a pas de ligne d'erreur qui s'affiche
Kniva
le 31/05/2010 à 10:33
Kniva
J'ai essayé de voir ce qui clochait dans mon code, mais je ne vois pas pourquoi la première partie du code gérant plus ou moins la pagination ( passer d'une page à une autre) ne s'affiche pas, ou ne fonctionne pas sur ma page.
Kniva
le 31/05/2010 à 11:39
Kniva
Si je ne remets pas le code aussi que j'ai fait pour cette partie, ça ne va pas aller, enfin, y a pas un gros changement, j'ai mis le echo, mais surement à la mauvaise place:

<?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. ' ">&lt;&lt;</a>&nbsp;&nbsp;';
}
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.'&nbsp;&nbsp';
}
}
else
{
if($cpt==$cpt_fin)
{
$barre .="<a href=' ".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .="'>".$cpt."</a>&nbsp;-&nbsp;";
}
}
}
$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='&nbsp;&nbsp;<a href="' .$cible. '">&gt;&gt;</a>';
}
else
{
$lien='';
}
$barre .=$lien;
return $barre;
echo "$barre";
}
?>
LA GLOBULE
le 31/05/2010 à 12:04
LA GLOBULE
Ben le but, ce n'est pas de le faire dans la fonction, mais lors de l'appel à la fonction.
Kniva
le 31/05/2010 à 12:08
Kniva
Mais la ligne
<?php
echo'<span class="gras">' . barre_naviguation($nb_total,$nb_affichage_par_page, $_GET['debut'], 5,) . '</span>';
?>

appelle la fonction barre_naviguation, non?
Répondre
LoadingChargement en cours