Accueil > > > MOTEUR DE RECHERCHE SUR BASE MYSQL FULLTEXT ET BOOLEAN AVEC PAGINATION DES RESULTATS
MOTEUR DE RECHERCHE SUR BASE MYSQL FULLTEXT ET BOOLEAN AVEC PAGINATION DES RESULTATS
Information sur la source
Description
BONJOUR Un moteur de recherche basique qui pourra s'intégrer dans un site d'annonces ou un blog. Le but du script est pédagogique pour présenter aux débutants un modèle j'ai pas vraiment chercher à compliquer donc on pourra utiliser PDO ... je met dans la source une table bidon pour essayer, taper Leblanc ou street ou street avenue en mode normal en mode boolean on peut faire des comparaisons, lire les articles ... ma requête est faite sur les champs 'adresse' et 'prenom' en lisant les requêtes vous comprendrez comment changer //ARTICLES et BASES //http://francois.kubler.org/tuto/2-mysql-ut iliser-les-index-fulltext/ //http://www.elliptic.f r/doc/mysql/string-comparison-functions.html //htt p://www.od2dev.be/lang/en/mysql-fulltext-search/ A++
Source
- <?php
- /*coloration resultat*/
- function replaceColor($str,$searchtxt){
- $str = str_replace('\"', '"',
- substr(@preg_replace('#(\>(((([^><]+|(?R)))*)\<))#se',
- "@preg_replace('#\b(" . str_replace('\\', '\\\\',
- addslashes($searchtxt)) . ")\b#i',
- '<span style=\"color:#FF0000\"><strong>\\\\1</strong></span>', '\\0')", '>' . $str . '<'), 1, -1));
- return $str;
- }
- ?>
- <?php
- //ARTICLES et BASES
- //http://francois.kubler.org/tuto/2-mysql-utiliser-les-index-fulltext/
- //http://www.elliptic.fr/doc/mysql/string-comparison-functions.html
- //http://www.od2dev.be/lang/en/mysql-fulltext-search/
-
- function searchForm(){
- //form
- echo '<div id="maincol" style="background-color: #fedcba;"><h1>MOTEUR SUR BASE MYSQL</h1>';
- $searchwords = (isset($_POST['words']) ? htmlspecialchars(stripslashes($_POST['words'])) : '');
- $normal = (isset($_POST['mode']) && $_POST['mode'] == 'normal') ? ' selected="selected"' : '' ;
- $boolean = (isset($_POST['mode']) && $_POST['mode'] == 'boolean') ? ' selected="selected"' : '' ;
- echo '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
- echo '<input type="hidden" name="cmd" value="search" />';
- echo 'Rechercher : <input type="text" name="words" value="'.$searchwords.'" /> ';
- echo 'Mode: ';
- echo '<select name="mode">';
- echo '<option value="normal"'.$normal.'>Normal</option>';
- echo '<option value="boolean"'.$boolean.'>Boolean</option>';
- echo '</select> ';
- echo '<input type="submit" name="sub" value="GO" />';
- echo '</form>';
- echo '</div>';
- }
-
- searchForm();
-
- if(isset($_POST['sub'])){
- $mode = $_POST['mode'];
- $searchstring = $_POST['words'];
- $limit='';
- }
-
- elseif(isset($_GET['mode']) && isset($_GET['words'])){
- $mode = $_GET['mode'];
- $searchstring = urldecode($_GET['words']);
- }
-
- else{
- $searchstring=null;
- $mode=null;
- }
-
- $num_per_page=3;
-
- if(isset($_GET['p'])){
- $start=(int)$_GET['p'];
- $x=($start*$num_per_page);
- $y=$num_per_page;
- $limit='limit '.$x.','.$y;
- }else{
- $x=0;
- $limit='';
- }
-
- //à personnaliser
- $host='localhost';
- $user='root';
- $pass='';
- $base='a';
- $table='mytable';
- mysql_connect($host,$user,$pass);
- mysql_select_db($base);
- //
-
- switch($mode){
-
- case "normal":
- echo '<h3>Mode normal :</h3>';
-
- $searchstring=mysql_real_escape_string($searchstring);
-
- $totalsql = "SELECT *, MATCH (prenom,adresse)
- AGAINST ('".$searchstring."') as Score
- FROM ".$table."
- WHERE MATCH (prenom,adresse)
- AGAINST ('".$searchstring."')
- ORDER BY Score DESC";
-
- $sql = "SELECT *, MATCH (prenom,adresse)
- AGAINST ('".$searchstring."') as Score
- FROM ".$table."
- WHERE MATCH (prenom,adresse)
- AGAINST ('".$searchstring."')
- ORDER BY Score DESC $limit";
-
- break;
-
- case "boolean":
- echo '<h3>Mode boolean :</h3>';
- $totalsql = "SELECT *, MATCH (prenom,adresse)
- AGAINST ('".$searchstring."' IN BOOLEAN MODE) as Score
- FROM ".$table."
- WHERE MATCH (prenom,adresse)
- AGAINST ('+".$searchstring."' IN BOOLEAN MODE)
- ORDER BY Score DESC";
-
-
- $sql = "SELECT *, MATCH (prenom,adresse)
- AGAINST ('+".$searchstring."' IN BOOLEAN MODE) as Score
- FROM ".$table."
- WHERE MATCH (prenom,adresse)
- AGAINST ('".$searchstring."' IN BOOLEAN MODE)
- ORDER BY Score DESC $limit";
- break;
-
- }
-
- if(isset($sql) && !empty($sql)){
- $result = mysql_query($sql) or die (mysql_error());
- $total = mysql_query($totalsql) or die (mysql_error());
- echo $num=mysql_num_rows($total);
- echo ' resultat(s) <br />';
- $r=array();
- while($row = mysql_fetch_object($result)){
- $r[]=$row;
- }
-
- mysql_close();
-
- //on borne ou pas
- $borne=200;
- if($num<$borne){
- $num_pages=ceil($num/$num_per_page);
- }else{
- $num_pages=ceil($borne/$num_per_page);
- }
-
- $pageur=Array();
-
- for ($i=0;$i<$num_pages;$i++){
- if ($mode == 'normal') {
- $pageur[]='<a href="?cmd=search&words='.urlencode($searchstring).'&mode=normal&p='.$i.'" > ['.($i+1).'] </a>';
- }else{
- $pageur[]='<a href="?cmd=search&words='.urlencode($searchstring).'&mode=boolean&p='.$i.'" > ['.($i+1).'] </a>';
- }
- }
-
- }else{
- }
-
- //les resultats PAGINATION
- if(!empty($pageur)){
- echo implode($pageur);
- }else{
- //rien
- }
-
- //les resultats de la REQUETE
- if(isset($r) && !empty($r)){
-
- echo '<pre>';
- //print_r($r); //tout
- echo '</pre>';
-
- //nb records found sur la page
- //echo $c=count($r);
-
- echo '<div style="background-color: #ddddff;">';
- echo '<pre>';
-
-
- //3 par page
-
- $b=3;
-
- for($i=0;$i<$b;$i++){
-
- if(isset($r[$i])){
-
- echo replaceColor($r[$i]->adresse,$searchstring).'<br />';
- echo replaceColor($r[$i]->prenom,$searchstring).'<br />';
-
- print_r($r[$i]); /*on formate comme on veut ...*/
-
- }else{
- }
-
- }
-
- echo '</pre>';
- echo '</div>';
-
- }else{
- //rien
- }
- ?>
<?php
/*coloration resultat*/
function replaceColor($str,$searchtxt){
$str = str_replace('\"', '"',
substr(@preg_replace('#(\>(((([^><]+|(?R)))*)\<))#se',
"@preg_replace('#\b(" . str_replace('\\', '\\\\',
addslashes($searchtxt)) . ")\b#i',
'<span style=\"color:#FF0000\"><strong>\\\\1</strong></span>', '\\0')", '>' . $str . '<'), 1, -1));
return $str;
}
?>
<?php
//ARTICLES et BASES
//http://francois.kubler.org/tuto/2-mysql-utiliser-les-index-fulltext/
//http://www.elliptic.fr/doc/mysql/string-comparison-functions.html
//http://www.od2dev.be/lang/en/mysql-fulltext-search/
function searchForm(){
//form
echo '<div id="maincol" style="background-color: #fedcba;"><h1>MOTEUR SUR BASE MYSQL</h1>';
$searchwords = (isset($_POST['words']) ? htmlspecialchars(stripslashes($_POST['words'])) : '');
$normal = (isset($_POST['mode']) && $_POST['mode'] == 'normal') ? ' selected="selected"' : '' ;
$boolean = (isset($_POST['mode']) && $_POST['mode'] == 'boolean') ? ' selected="selected"' : '' ;
echo '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';
echo '<input type="hidden" name="cmd" value="search" />';
echo 'Rechercher : <input type="text" name="words" value="'.$searchwords.'" /> ';
echo 'Mode: ';
echo '<select name="mode">';
echo '<option value="normal"'.$normal.'>Normal</option>';
echo '<option value="boolean"'.$boolean.'>Boolean</option>';
echo '</select> ';
echo '<input type="submit" name="sub" value="GO" />';
echo '</form>';
echo '</div>';
}
searchForm();
if(isset($_POST['sub'])){
$mode = $_POST['mode'];
$searchstring = $_POST['words'];
$limit='';
}
elseif(isset($_GET['mode']) && isset($_GET['words'])){
$mode = $_GET['mode'];
$searchstring = urldecode($_GET['words']);
}
else{
$searchstring=null;
$mode=null;
}
$num_per_page=3;
if(isset($_GET['p'])){
$start=(int)$_GET['p'];
$x=($start*$num_per_page);
$y=$num_per_page;
$limit='limit '.$x.','.$y;
}else{
$x=0;
$limit='';
}
//à personnaliser
$host='localhost';
$user='root';
$pass='';
$base='a';
$table='mytable';
mysql_connect($host,$user,$pass);
mysql_select_db($base);
//
switch($mode){
case "normal":
echo '<h3>Mode normal :</h3>';
$searchstring=mysql_real_escape_string($searchstring);
$totalsql = "SELECT *, MATCH (prenom,adresse)
AGAINST ('".$searchstring."') as Score
FROM ".$table."
WHERE MATCH (prenom,adresse)
AGAINST ('".$searchstring."')
ORDER BY Score DESC";
$sql = "SELECT *, MATCH (prenom,adresse)
AGAINST ('".$searchstring."') as Score
FROM ".$table."
WHERE MATCH (prenom,adresse)
AGAINST ('".$searchstring."')
ORDER BY Score DESC $limit";
break;
case "boolean":
echo '<h3>Mode boolean :</h3>';
$totalsql = "SELECT *, MATCH (prenom,adresse)
AGAINST ('".$searchstring."' IN BOOLEAN MODE) as Score
FROM ".$table."
WHERE MATCH (prenom,adresse)
AGAINST ('+".$searchstring."' IN BOOLEAN MODE)
ORDER BY Score DESC";
$sql = "SELECT *, MATCH (prenom,adresse)
AGAINST ('+".$searchstring."' IN BOOLEAN MODE) as Score
FROM ".$table."
WHERE MATCH (prenom,adresse)
AGAINST ('".$searchstring."' IN BOOLEAN MODE)
ORDER BY Score DESC $limit";
break;
}
if(isset($sql) && !empty($sql)){
$result = mysql_query($sql) or die (mysql_error());
$total = mysql_query($totalsql) or die (mysql_error());
echo $num=mysql_num_rows($total);
echo ' resultat(s) <br />';
$r=array();
while($row = mysql_fetch_object($result)){
$r[]=$row;
}
mysql_close();
//on borne ou pas
$borne=200;
if($num<$borne){
$num_pages=ceil($num/$num_per_page);
}else{
$num_pages=ceil($borne/$num_per_page);
}
$pageur=Array();
for ($i=0;$i<$num_pages;$i++){
if ($mode == 'normal') {
$pageur[]='<a href="?cmd=search&words='.urlencode($searchstring).'&mode=normal&p='.$i.'" > ['.($i+1).'] </a>';
}else{
$pageur[]='<a href="?cmd=search&words='.urlencode($searchstring).'&mode=boolean&p='.$i.'" > ['.($i+1).'] </a>';
}
}
}else{
}
//les resultats PAGINATION
if(!empty($pageur)){
echo implode($pageur);
}else{
//rien
}
//les resultats de la REQUETE
if(isset($r) && !empty($r)){
echo '<pre>';
//print_r($r); //tout
echo '</pre>';
//nb records found sur la page
//echo $c=count($r);
echo '<div style="background-color: #ddddff;">';
echo '<pre>';
//3 par page
$b=3;
for($i=0;$i<$b;$i++){
if(isset($r[$i])){
echo replaceColor($r[$i]->adresse,$searchstring).'<br />';
echo replaceColor($r[$i]->prenom,$searchstring).'<br />';
print_r($r[$i]); /*on formate comme on veut ...*/
}else{
}
}
echo '</pre>';
echo '</div>';
}else{
//rien
}
?>
Conclusion
Ce script et largement améliorable soyez indulgent
Historique
- 17 juillet 2011 21:39:06 :
- Ajout de la coloration du résultat
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
moteur de recherche [ par fatNugly ]
Bonjour, j'ai des petites questionsle quel des languages suivant php, c, est il le plus adequat pour faire un moteur de recherche dans une page?? la c
moteur de recherche [ par fatNugly ]
Bonjour, j'ai des petites questionsle quel des languages suivant php, c, est il le plus adequat pour faire un moteur de recherche dans une page??la cr
excuser moi vous avez une idee ?. [ par flashx ]
flashxsalut ya t'il quelqu'un qui a une idee pour faire un robot de moteur de recherche car je sais pas comment ca marche de trop la je vais cree un m
moteur de recherche alphabétique [ par princeg ]
Quelqu'un peut-il m'aider, please? je voudrais créer un moteur de recherche alphabétique comme celui présent sur le site www.zouklist.fr.st et en plu
amélioration d'un moteur de recherche [ par Coundelitch ]
bonjour !J'aimerai savoir quelles sont les solutions envisagable, afin d'améliorer mon moteur de recherche.Pour info c'est un moteur de recherche en P
Requete sur moteur de recherche [ par sana72 ]
Bonjour, Je voudrais creer un script qui me permettrait de savoir a quelle position se trouve mon site sur un ou des moteur de recherche, Voila l'idée
Ajouter la troncature dans un moteur de recherche [ par baboun ]
Bonjour, je viens crier au secours.Je tente d'insérer un système de troncature dans mon moteur de recherche php sur base de donnée MySQL.(Sans vouloir
moteur de recherche PHP [ par MARJORIE59 ]
Pouvez vous m'expliquer comment fonctionne PHP et comment créer un moteur de recherche pour mon site internet svp!! Cette activité est pour mon BTS do
Moteur de recherche: afficher résultats [ par djit ]
Bonjour a tous,Je veux créer une base de données contenant l'équivalent d'un livre de lois et règlements. Cette base de données sera accompagnée d'un
moteur de recherche [ par rastafarye ]
salut je suis a la recherche de code source ou d'aide sur des moteurs de recherche de type web (com google par ex bien sur je ne demande pas le code s
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|