Pagination selon résultat moteur de recherche
Résolu/Fermé
A voir également:
- Pagination selon résultat moteur de recherche
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Lexer resultat - Télécharger - Sport
- Moteur de recherche sans censure - Accueil - Services en ligne
- Installer qwant moteur de recherche - Télécharger - Navigateurs
14 réponses
jypyx
Messages postés
683
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
28 novembre 2012
107
28 déc. 2010 à 14:33
28 déc. 2010 à 14:33
Souhaites-tu une pagination normal ou une pagination en Ajax ?
jypyx
Messages postés
683
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
28 novembre 2012
107
28 déc. 2010 à 14:50
28 déc. 2010 à 14:50
Que ca soit en normal ou en Ajax ca reste du PHP, juste que l'appel de la fonction pagination se fera en Javascript.
On reste donc sur du PHP pur sans javascript?
On reste donc sur du PHP pur sans javascript?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jypyx
Messages postés
683
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
28 novembre 2012
107
28 déc. 2010 à 15:22
28 déc. 2010 à 15:22
En fait, je suis en train de voir que ta fonction pagination est déjà complète... Tu as tout ce qu'il faut sous la main.
oui c'est ça le pire mais lorsque j'intègre la requête du moteur de recherche ça ne fonctionne pas. J'ai un message d'erreur qui me dit que la division est à zéro... ce qui peut paraître normal étant donné qu'il faut insérer qqch dans le formulaire... je ne sais plus comment faire :-(
jypyx
Messages postés
683
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
28 novembre 2012
107
28 déc. 2010 à 15:39
28 déc. 2010 à 15:39
Si tu attends un peu, je te donne une fonction pagination toute faite avec ta fonction dedans, tu auras juste a copier/coller. C'est mon jour de bonté :D
alors c'est même bien plus que ce que j'attendais à vrai dire!
ou juste un indice me suffirait aussi :-)
ou juste un indice me suffirait aussi :-)
jypyx
Messages postés
683
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
28 novembre 2012
107
28 déc. 2010 à 15:53
28 déc. 2010 à 15:53
function paginate($url, $param, $total, $current, $adj=3) { /* Déclaration des variables */ $prev = $current - 1; // numéro de la page précédente $next = $current + 1; // numéro de la page suivante $n2l = $total - 1; // numéro de l'avant-dernière page (n2l = next to last) /* Initialisation : s'il n'y a pas au moins deux pages, l'affichage reste vide */ $pagination = ''; /* Sinon ... */ if ($total > 1){ /* Concaténation du <div> d'ouverture à $pagination */ $pagination .= "<div class=\"pagination\">\n"; /* ////////// Début affichage du bouton [précédent] ////////// */ if ($current == 2) // la page courante est la 2, le bouton renvoit donc sur la page 1, remarquez qu'il est inutile de mettre ?p=1 $pagination .= " <a href=\"{$url}\">Précédent</a> "; elseif ($current > 2) // la page courante est supérieure à 2, le bouton renvoit sur la page dont le numéro est immédiatement inférieur $pagination .= " <a href=\"{$url}{$param}{$prev}\">Précédent</a> "; else // dans tous les autres, cas la page est 1 : désactivation du bouton [précédent] $pagination .= "<span class=\"inactive\"> Précédent </span>"; /* Fin affichage du bouton [précédent] */ /* /////////////// Début affichage des pages, l'exemple reprend le cas de 3 numéros de pages adjacents (par défaut) de chaque côté du numéro courant - CAS 1 : il y a au plus 12 pages, insuffisant pour faire une troncature - CAS 2 : il y a au moins 13 pages, on effectue la troncature pour afficher 11 numéros de pages au total /////////////// */ /* CAS 1 */ if ($total < 7 + ($adj * 2)){ /* Ajout de la page 1 : on la traite en dehors de la boucle pour n'avoir que index.php au lieu de index.php?p=1 et ainsi éviter le duplicate content */ $pagination .= ($current == 1) ? '<span class="active">1</span>' : "<a href=\"{$url}\">1</a>"; // Opérateur ternaire : (condition) ? 'valeur si vrai' : 'valeur si fausse' /* Pour les pages restantes on utilise une boucle for */ for ($i = 2; $i<=$total; $i++){ if ($i == $current) // Le numéro de la page courante est mis en évidence (cf fichier CSS) $pagination .= "<span class=\"active\"> {$i} </span>"; else // Les autres sont affichés normalement $pagination .= " <a href=\"{$url}{$param}{$i}\">{$i}</a> "; } } /* CAS 2 : au moins 13 pages, troncature */ else{ /* Troncature 1 : on se situe dans la partie proche des premières pages, on tronque donc la fin de la pagination. l'affichage sera de neuf numéros de pages à gauche ... deux à droite (cf figure 1) */ if ($current < 2 + ($adj * 2)){ /* Affichage du numéro de page 1 */ $pagination .= ($current == 1) ? "<span class=\"active\"> 1 </span>" : " <a href=\"{$url}\">1</a> "; /* puis des huit autres suivants */ for ($i = 2; $i < 4 + ($adj * 2); $i++){ if ($i == $current) $pagination .= "<span class=\"active\"> {$i} </span>"; else $pagination .= " <a href=\"{$url}{$param}{$i}\">{$i}</a> "; } /* ... pour marquer la troncature */ $pagination .= ' ... '; /* et enfin les deux derniers numéros */ $pagination .= " <a href=\"{$url}{$param}{$n2l}\">{$n2l}</a> "; $pagination .= " <a href=\"{$url}{$param}{$total}\">{$total}</a> "; } /* Troncature 2 : on se situe dans la partie centrale de notre pagination, on tronque donc le début et la fin de la pagination. l'affichage sera deux numéros de pages à gauche ... sept au centre ... deux à droite (cf figure 2) */ elseif ( (($adj * 2) + 1 < $current) && ($current < $total - ($adj * 2)) ){ /* Affichage des numéros 1 et 2 */ $pagination .= " <a href=\"{$url}\">1</a> "; $pagination .= " <a href=\"{$url}{$param}2\">2</a> "; $pagination .= ' ... '; /* les septs du milieu : les trois précédents la page courante, la page courante, puis les trois lui succédant */ for ($i = $current - $adj; $i <= $current + $adj; $i++){ if ($i == $current) $pagination .= "<span class=\"active\"> {$i} </span>"; else $pagination .= " <a href=\"{$url}{$param}{$i}\">{$i}</a> "; } $pagination .= ' ... '; /* et les deux derniers numéros */ $pagination .= " <a href=\"{$url}{$param}{$n2l}\">{$n2l}</a> "; $pagination .= " <a href=\"{$url}{$param}{$total}\">{$total}</a> "; } /* Troncature 3 : on se situe dans la partie de droite, on tronque donc le début de la pagination. l'affichage sera deux numéros de pages à gauche ... neuf à droite (cf figure 3) */ else{ /* Affichage des numéros 1 et 2 */ $pagination .= " <a href=\"{$url}\">1</a> "; $pagination .= " <a href=\"{$url}{$param}2\">2</a> "; $pagination .= ' ... '; /* puis des neufs dernières */ for ($i = $total - (2 + ($adj * 2)); $i <= $total; $i++){ if ($i == $current) $pagination .= "<span class=\"active\"> {$i} </span>"; else $pagination .= " <a href=\"{$url}{$param}{$i}\">{$i}</a> "; } } } /* Fin affichage des pages */ /* ////////// Début affichage du bouton [suivant] ////////// */ if ($current == $total) $pagination .= "<span class=\"inactive\"> Suivant </span>\n"; else $pagination .= " <a href=\"{$url}{$param}{$next}\">Suivant</a> \n"; /* Fin affichage du bouton [suivant] */ /* </div> de fermeture */ $pagination .= "</div>\n"; } /* Fin de la fonction, renvoi de $pagination au programme */ return ($pagination); } ?> <html> <form method="POST" action="#"> Rechercher un mot : <input type="text" name="recherche"> <input type="SUBMIT" value="recherche"> </form> </html> <?php /* Calcul du nombre total d'entrées $total dans la table posts */ $res = mysql_query("SELECT COUNT(*) AS nbr FROM liste_salons WHERE nom LIKE '%$recherche%'"); $row = mysql_fetch_row($res); $total = $row[0]; /* Libération du résultat */ mysql_free_result($res); /* Déclaration des variables */ $epp = 5; // nombre d'entrées à afficher par page (entries per page) $countp = ceil($total/$epp); // calcul du nombre de pages $countp (on arrondit à l'entier supérieur avec la fonction ceil() ) /* Récupération du numéro de la page courante depuis l'URL avec la méthode GET */ if(!isset($_GET['p']) || !is_numeric($_GET['p']) ) // si $_GET['p'] n'existe pas OU $_GET['p'] n'est pas un nombre (petite sécurité supplémentaire) $current = 1; // la page courante devient 1 else { $page = intval($_GET['p']); // stockage de la valeur entière uniquement if ($page < 1) $current=1; // cas où le numéro de page est inférieure 1 : on affecte 1 à la page courante elseif ($page > $countp) $current=$countp; //cas où le numéro de page est supérieur au nombre total de pages : on affecte le numéro de la dernière page à la page courante else $current=$page; // sinon la page courante est bien celle indiquée dans l'URL } /* $start est la valeur de départ du LIMIT dans notre requête SQL (est fonction de la page courante) */ $start = ($current * $epp - $epp); ?> // Récupère la variable $recherche = isset($_POST['recherche']) ? $_POST['recherche'] : ''; // la requete mysql $sql = mysql_query("SELECT nom, adresse, localite, id FROM liste_salons WHERE nom LIKE '%$recherche%' LIMIT $start, $epp" . " OR localite LIKE '%$recherche%'" . " OR adresse LIKE '%$recherche%'") or die (mysql_error()); // affichage du résultat while(list($nom, $adresse, $localite)=mysql_fetch_array($sql)) { echo ''.$nom.', '.$adresse.' à '.$localite.' <br />'; } <?php /* Appel de la fonction */ echo paginate('index.php?page=compteur', '&p=', $countp, $current); ?> </div> </div> </div>
jypyx
Messages postés
683
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
28 novembre 2012
107
28 déc. 2010 à 15:54
28 déc. 2010 à 15:54
Toute la fonction paginate() n'est pas as modifier. Normalement cela devrait marcher. Mais si ce n'est pas le cas, la structure est correcte.
merci c'est super, par contre je n'ai plus qu'un seul message d'erreur:
Notice: Undefined variable: recherche in C:\wamp\www\test\forumsolution.php on line 146
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR localite LIKE '%ada%' OR adresse LIKE '%ada%'' at line 1
La ligne 146 est celle-ci:
$res = mysql_query("SELECT COUNT(*) AS nbr FROM liste_salons WHERE nom LIKE '%$recherche%'");
j'avais aussi eu ce souci avant, et je ne comprends pas pourquoi ça ne fonctionne pas!
Notice: Undefined variable: recherche in C:\wamp\www\test\forumsolution.php on line 146
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR localite LIKE '%ada%' OR adresse LIKE '%ada%'' at line 1
La ligne 146 est celle-ci:
$res = mysql_query("SELECT COUNT(*) AS nbr FROM liste_salons WHERE nom LIKE '%$recherche%'");
j'avais aussi eu ce souci avant, et je ne comprends pas pourquoi ça ne fonctionne pas!
jypyx
Messages postés
683
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
28 novembre 2012
107
28 déc. 2010 à 16:15
28 déc. 2010 à 16:15
Pour le SELECT essaye ca :
"SELECT nom, adresse, localite, id FROM liste_salons WHERE nom LIKE '%$recherche%' OR localite LIKE '%$recherche%' OR adresse LIKE '%$recherche%' LIMIT $start, $epp"
"SELECT nom, adresse, localite, id FROM liste_salons WHERE nom LIKE '%$recherche%' OR localite LIKE '%$recherche%' OR adresse LIKE '%$recherche%' LIMIT $start, $epp"
jypyx
Messages postés
683
Date d'inscription
dimanche 28 octobre 2007
Statut
Membre
Dernière intervention
28 novembre 2012
107
28 déc. 2010 à 17:26
28 déc. 2010 à 17:26
Pas de problème, heureux d'avoir rendu service :D