Problème de pagination

Petit nouveau ! | 1 Messages

06 oct. 2009, 21:59

Bonjour à tous :)

Depuis quelques jours, je configure un site sous Drupal. Ne maîtrisant pas vraiment le PHP, j'ai récupéré un script pour la pagination, mais je ne parviens pas à le faire fonctionner correctement: Le numéro des pages est bien indiqué sous le texte, si je clique sur un numéro au hasard, ça fonctionne, mais en en sélectionnant un second dans la foulée, j'ai une page d'erreur et je m'aperçois que l'URL de la seconde page s'ajoute à l'URL de la première:
/test_cms/drupal-6.14/node/15?limit=450,30?limit=600,30
Par ailleurs, j'ai deux messages d'erreur de Drupal, mais je ne pense pas que ce CMS soit en cause:
* warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/monsite/public_html/test_cms/drupal-6.14/includes/common.inc(1685) : eval()'d code on line 55.
* warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/monsite/public_html/test_cms/drupal-6.14/includes/common.inc(1685) : eval()'d code on line 64.
Les deux lignes en question correspondent à ceci:
*   A specified region to fetch content for. If NULL, all regions will be
return implode($delimiter, $content[$region]);
Voilà ce fameux script. La ligne $url = $_SERVER['REQUEST_URI']."?limit="; est celle que j'ai rajoutée, la précédente par défaut ne fonctionnant pas du tout. Je suppose que l'erreur vient de là, mais mes connaissances sont limitées:

Code : Tout sélectionner

// Connexion à la base de données include ("include/dbconnect.inc.php"); $liendb = mysql_connect($bddserver, $bddlogin, $bddpassword); mysql_select_db ("$bdd"); // Paramétrage de la requête (ne pas modifier le nom des variable) $table = "Chansons"; // Table à sélectionner dans la base $champ = "Nom"; // Champ de la table à afficher pour tester ce script $sql = "SELECT * FROM $table"; // Requête initiale (à compléter si nécessaire) $parpage = 30; // Nombre d'enregistrements par page à afficher //============================================================================== // Déclaration et initialisation des variables (ici ne rien modifier) //============================================================================== // On définit le suffixe du lien url qui affichera les pages // $_SERVEUR['PHP_SELF'] donne l'arborescence de la page courante //$url = $_SERVER['PHP_SELF']."?limit="; $url = $_SERVER['REQUEST_URI']."?limit="; $total = mysql_query($sql); // Résultat total de la requête $sql $nblignes = mysql_num_rows($total); // Nbre total d'enregistrements // On calcule le nombre de pages à afficher en arrondissant // le résultat au nombre supérieur grâce à la fonction ceil() $nbpages = ceil($nblignes/$parpage); //============================================================================== // Exemple d'affichage HTML //============================================================================== // On teste en affichant la valeur des variables (facultatif) echo "<p>La table <b>".$table."</b> compte ".$nblignes." <b>".$champ."</b>."; echo "<br />\n"."On affiche <b>".$parpage." enregistrements</b> par page, "; echo "soit un total de <b>".$nbpages." pages</b>.</p>\n"; // Si une valeur 'limit' est passée par url, on vérifie la validité de // cette valeur par mesure de sécurité avec la fonction validlimit() // cette fonction retourne automatiquement le résultat de la requête $result = validlimit($nblignes,$parpage,$sql); // On affiche le résultat de la requête // On crée donc ici son propre tableau pour lequel on souhaite une pagination while ($ligne = mysql_fetch_array($result)) { echo $ligne[$champ]."<br />\n"; } // Menu de pagination que l'on place après la requête echo "<div class='pagination'>"; echo pagination($url,$parpage,$nblignes,$nbpages); echo "</div>"; mysql_free_result($result); // Libère le résultat de la mémoire //============================================================================== // Fonctions à copier de préférence dans un fichier 'include/fonctions.inc.php' //============================================================================== function pagination($url,$parpage,$nblignes,$nbpages) { // On crée le code html pour la pagination $html = precedent($url,$parpage,$nblignes); // On crée le lien precedent // On vérifie que l'on a plus d'une page à afficher if ($nbpages > 1) { // On boucle sur les numéros de pages à afficher for ($i = 0 ; $i < $nbpages ; ++$i) { $limit = $i * $parpage; // On calcule le début de la valeur 'limit' $limit = $limit.",".$parpage; // On fait une concaténation avec $parpage // On affiche les liens des numéros de pages $html .= "<a href=".$url.$limit.">".($i + 1)."</a> | " ; } } // Si l'on a qu'une page on affiche rien else { $html .= ""; } $html .= suivant($url,$parpage,$nblignes); // On crée le lien suivant // On retourne le code html return $html; } function validlimit($nblignes,$parpage,$sql) { // On vérifie l'existence de la variable $_GET['limit'] // $limit correspond à la clause LIMIT que l'on ajoute à la requête $sql if (isset($_GET['limit'])) { $pointer = split('[,]', $_GET['limit']); // On scinde $_GET['limit'] en 2 $debut = $pointer[0]; $fin = $pointer[1]; // On vérifie la conformité de la variable $_GET['limit'] if (($debut >= 0) && ($debut < $nblignes) && ($fin == $parpage)) { // Si $_GET['limit'] est valide on lance la requête pour afficher la page $limit = $_GET['limit']; // On récupère la valeur 'limit' passée par url $sql .= " LIMIT ".$limit.";"; // On ajoute $limit à la requête $sql $result = mysql_query($sql); // Nouveau résultat de la requête } // Sinon on affiche la première page else { $sql .= " LIMIT 0,".$parpage.";"; // On ajoute la valeur LIMIT à la requête $result = mysql_query($sql); // Nouveau résultat de la requête } } // Si la valeur 'limit' n'est pas connue, on affiche la première page else { $sql .= " LIMIT 0,".$parpage.";"; // On ajoute la valeur LIMIT à la requête $result = mysql_query($sql); // Nouveau résultat de la requête } // On retourne le résultat de la requête return $result; } function precedent($url,$parpage,$nblignes) { // On vérifie qu'il y a au moins 2 pages à afficher if ($nblignes > $parpage) { // On vérifie l'existence de la variable $_GET['limit'] if (isset($_GET['limit'])) { // On scinde la variable 'limit' en utilisant la virgule comme séparateur $pointer = split('[,]', $_GET['limit']); // On récupère le nombre avant la virgule et on soustrait la valeur $parpage $pointer = $pointer[0]-$parpage; // Si on atteint la première page, pas besoin de lien 'Précédent' if ($pointer < 0) { $precedent = ""; } // Sinon on affiche le lien avec l'url de la page précédente else { $limit = "$pointer,$parpage"; $precedent = "<a href=".$url.$limit."><</a> | "; } } else { $precedent = ""; // On est à la première page, pas besoin de lien 'Précédent' } } else { $precedent = ""; // On a qu'une page, pas besoin de lien 'Précédent' } return $precedent; } function suivant($url,$parpage,$nblignes) { // On vérifie qu'il y a au moins 2 pages à afficher if ($nblignes > $parpage) { // On vérifie l'existence de la variable $_GET['limit'] if (isset($_GET['limit'])) { // On scinde la variable 'limit' en utilisant la virgule comme séparateur $pointer = split('[,]', $_GET['limit']); // On récupère le nombre avant la virgule auquel on ajoute la valeur $parpage $pointer = $pointer[0] + $parpage; // Si on atteint la dernière page, pas besoin de lien 'Suivant' if ($pointer >= $nblignes) { $suivant = ""; } // Sinon on affiche le lien avec l'url de la page suivante else { $limit = "$pointer,$parpage"; $suivant = "<a class='pagination' href=".$url.$limit.">></a>"; } } // Si pas de valeur 'limit' on affiche le lien de la deuxième page if (@$_GET['limit']== false) { $suivant = "<a href=".$url.$parpage.",".$parpage.">></a>"; } } else { $suivant = ""; // On a qu'une page, pas besoin de lien 'Suivant' } return $suivant; } // Fin du script ?>
Merci pour votre aide, en espérant avoir été clair et pas trop long quand même...