begin process at 2012 05 27 19:23:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > 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

Note :
Aucune note
Catégorie :Base de données Classé sous :moteur, recherche, fulltext, boolean, pagination Niveau :Débutant Date de création :17/07/2011 Date de mise à jour :17/07/2011 21:39:06 Vu / téléchargé :4 504 / 538

Auteur : cod57

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

17 juillet 2011 21:39:06 :
Ajout de la coloration du résultat

 Sources du même auteur

Source avec Zip Source avec une capture GENERATEUR DE BOUTONS DE PARTAGES POUR RESEAUX SOCIAUX
Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ...
Source avec Zip Source avec une capture PAGINATION JAVASCRIPT PHP MYSQL
Source avec Zip Source avec une capture GESTIONNAIRE DE NEWS BASIQUE AVEC UPLOAD D'IMAGES
Source avec Zip Source avec une capture GESTIONNAIRE D'ELEVES OU CARNET D'ADRESSE AVEC EXPORT XLS

 Sources de la même categorie

Source avec Zip ORM : DAO, ACTIVERECORD ET DBLIST par Reldan
Source avec une capture CET EXTRAIT PERMET D'AJOUTER DANS UN TABLEAU UNE AGRÉGATION ... par Denis007
EXPORT DE BASE AU FORMAT CSV par remib74
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier

 Sources en rapport avec celle ci

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
SEARCHMOTS par boscoauhunier
GOOGLE SEARCH PARSER par caviar
MOTEUR DE RECHERCHE DANS UNE BDD par HenvimaL
Source avec Zip Source avec une capture MOTEUR DE RECHERCHE TRÈS SOFISTIQUÉ par papipsycho

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales