Affichage page par page avec une barre de navigation
Posté : 26 févr. 2010, 09:34
Bonjour,
J'ai un niveau moyen en php. J'essaie de faire un petit dictionnaire sous php. Lorsque je tape la lettre "a" ou "b" ou "c" dans un formulaire, le script affiche par douze tous les mots commençant par un "a" ou "b" ou "c" dans la base de donnée de mon dictionnaire avec une barre de navigation en bas.
Tout marche très bien pour la première page mais la deuxième page et la suite reste vide.
Est-ce que quelqu'un peut corriger mon code et surtout ???
M'expliquer l'erreur dans mon script ???
Merci de votre réponse
Voici le premier code qui est la barre de navigation (ça marche très bien avec mon mini-livre d'or et forum):
J'ai un niveau moyen en php. J'essaie de faire un petit dictionnaire sous php. Lorsque je tape la lettre "a" ou "b" ou "c" dans un formulaire, le script affiche par douze tous les mots commençant par un "a" ou "b" ou "c" dans la base de donnée de mon dictionnaire avec une barre de navigation en bas.
Tout marche très bien pour la première page mais la deuxième page et la suite reste vide.
Est-ce que quelqu'un peut corriger mon code et surtout ???
M'expliquer l'erreur dans mon script ???
Merci de votre réponse
Voici le premier code qui est la barre de navigation (ça marche très bien avec mon mini-livre d'or et forum):
<?php
// fonction barre de navigation qui marche très bien parce que je l'ai déjà utilisé sur un mini-livre d'or
function barre_navigation ($nb_total,
$nb_affichage_par_page,
$debut,
$nb_liens_dans_la_barre) {
$barre = '';
// on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
if ($_SERVER['QUERY_STRING'] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$tableau = explode ("debut=", $_SERVER['QUERY_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 calcul le numéro de la page active
$page_active = floor(($debut/$nb_affichage_par_page)+1);
// on calcul le nombre de pages total que va prendre notre affichage
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
// on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
// exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
if ($nb_liens_dans_la_barre%2==0) {
$cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
$cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
}
else {
$cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
$cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
}
if ($cpt_deb1 <= 1) {
$cpt_deb = 1;
$cpt_fin = $nb_liens_dans_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_dans_la_barre)+1;
$cpt_fin = $nb_pages_total;
}
if ($nb_pages_total <= $nb_liens_dans_la_barre) {
$cpt_deb=1;
$cpt_fin=$nb_pages_total;
}
// si le 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 tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
for ($cpt = $cpt_deb; $cpt <= $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>";
}
else {
$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 navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
if ($cpt_fin != $nb_pages_total) {
$cible = $query.$fin;
$lien = ' <A HREF="'.$cible.'">>></A>';
}
else {
$lien='';
}
$barre .= $lien;
return $barre;
}
?>
Voici le code qui doit afficher le dictionnaire 12 entrées par page et qui est vide à partir de la deuxième page :<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
</head>
<body>
<?php
if (isset($_POST['submit']) && $_POST['submit']=='Ok') {
if ((isset($_POST['entree']))) {
// si le variable n'est pas vide alors, et seulement dans ce cas, on fera la suite de la requête
if ((!empty($_POST['entree']))) {
include ('../../include/configuration.php');
//On se connecte à la base
$base = mysql_connect ($host, $user,$passwd) or die ("erreur de connexion au serveur");
mysql_select_db ($bdd , $base) or die ("erreur de connexion a la base de donnees");
// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = 'SELECT count(*) FROM dictionnaire WHERE entree LIKE "'.$_POST['entree'].'%" ORDER BY entree ASC';
// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);
// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
echo '<p align="center">Ce mot n\'existe pas dans le dictionnaire !</p>';
}
else {
// 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 = 12;
// on prépare notre requête avec le LIMIT
$sql = 'SELECT entree, categorie, definition, etymologie, sens, figee, voir FROM dictionnaire WHERE entree LIKE
"'.$_POST['entree'].'%" ORDER BY entree ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$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
echo '<table class="dictionnaire" border="1"><tr><td width="130">';
echo htmlentities(trim($data['entree']));
echo ' ',htmlentities(trim($data['categorie'])),'</td>';
echo '<td width="270">',htmlentities(trim($data['definition']));
echo ' ',htmlentities(trim($data['etymologie']));
echo ' ',htmlentities(trim($data['sens']));
echo ' ',htmlentities(trim($data['figee']));
echo ' ',htmlentities(trim($data['voir']));
echo '</td></tr></table><br />';
}
// on libère l'espace mémoire alloué pour cette reqête
mysql_free_result ($req);
// on affiche enfin notre barre de navigation
echo '<div class="nbr_pages">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 5).'</div>';
}
// on libère l'espace mémoire alloué pour cette reqête
mysql_free_result ($resultat);
// on ferme la connection à la base de données.
mysql_close ();
}
else{
echo '<p align="center">Le formulaire est vide !!!</p>';
}
}
else {
$erreur = '<p align="center">Les variables nécessaires au script ne sont pas définies.</p>';
}
}
?>
</body>
</html>