Soyez le premier à donner votre avis sur cette source.
Vue 17 395 fois - Téléchargée 3 237 fois
<?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 } ?>
1 juin 2017 à 11:48
Je vous propose deux petits tuto pour implémenter une recherche FULLTEXT avec InnoDB en mode NATURAL ou BOOLEAN :
http://blog.axe-net.fr/recherche-pertinence-mysql-fulltext/
http://blog.axe-net.fr/tuto-mysql-fulltext-in-boolean-mode/
20 avril 2017 à 13:00
4 févr. 2013 à 23:22
La coloration syntaxique ne fonctionne pas en cas de saut de mots :
recherche => voiture moto
Résultat 1=> voiture moto (les deux mots sont coloré)
Résultat 2=> voiture camion moto (seul voiture est coloré, moto est resté noir)
Comment résoudre ce problème ?
Merci encore.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.