Faire une recherche de texte dans un champ mysql v1.0beta

Contenu du snippet

Pratique quand on veut rechercher des liens ou des sujets dans les forums.
C'est un formulaire pour rechercher dans un champ X de MYSQL au moins un des mots ou tous les mots qu'a rentré l'utilisateur dans la case recherche.
Postée à l'initiative de Drazounet, ça permettera d'améliorer mon code s'il y a des problèmes ^^

Source / Exemple :


//-----------------------------------------
//   CONFIG
//----------------------------------------

<?

  $sql_serveur = ""; // Serveur MYSQL
  $sql_user = ""; // Login MYSQL
  $sql_pass = ""; // Mot de passe MYSQL
  $sql_database = ""; // Nom de votre base de données
  
  $table = ""; // Table dans laquelle vous faites la recherche
  $couleur_motscles = "#FFFF00"; // Couleur de surlignement des mots clés dans les résultats. Par défaut : jaune
?>

//-------------------------------------
//  GENERALITES
//-------------------------------------

<html>
<head>
  <style type="text/css">
    .motscles{background:<?=$couleur_motscles?>}; 
  </style>
</head>
<body>

//------------------------------------------
//   LE FORMULAIRE (recherche.php)
//------------------------------------------

<?
if (empty($_GET["op"])
 {
?>
<br><br><font size="5"><b><center>La sécurité routière sur le Web</center></b></font><br><br>

<center>
<form method="post" action="recherche.php?op=search">
 <input type="text" name="request">
 <input type="submit" value="Rechercher!"><br><br>
  Rechercher avec au moins un des mots :<input type="radio" value="or" name="et_ou" checked> &nbsp; Rechercher avec tous les mots : <input type="radio" name="et_ou" value="and">
</form>
</center>
<?
  }

//------------------------------------------------------------
//  TRAITEMENT RECHERCHE (suite de recherche.php)
//------------------------------------------------------------

elseif (isset($_GET["op"] && $_GET["op"]="search")
 {
   @ $connect = mysql_connect($sql_serveur,$sql_user,$sql_pass) or die ("Impossible de se connecter à la base de données"); // connection classique
      mysql_select_db($sql_database);
    if (!isset($_POST["request"])) // Si l'utilisateur n'a rien rentré
   echo "<font color=\"#FF0000\" face=\"Arial\"><center>Veuillez entrer vos mots-clés pour la recherche</center></font>";	 
   else 
     {   
      $request = trim($_POST["request"]); // On supprime les espaces vides en début et fin de chaîne
       if (strstr($request, " ")) // Si il y a des espaces = plusieurs mots
       {
         $plusieurs_mots = 1;
         $mots=explode(" ",$request);  // On sectionne en tableau tous les mots
         $nombre_mots=count($mots);
				  
         $z=0;
         $texte="Liens contenant <b>&quot;$mots[0]&quot;</b>";
         $phrase="description like('%$mots[$z]%')"; // On initialise le premier mot
         $z=1;
         $motif = $mots[0];
          while($z<$nombre_mots) // démarrage de la boucle
            {
            $motif = "|".$mots[$z];
            $phrase.=" ".$_POST["et_ou"]." description like('%$mots[$z]%')";
            $texte.=" ";
             if($_POST["et_ou"]=="and"){$texte.="et";}else{$texte.="ou";} // C'est là où on met "recherche avec au moins 1 des mots" ou "avec tous les mots"
            $texte.=" <b>&quot;$mots[$z]&quot;</b>";
	$z++;
       }
        $z=0;
     }
     else  // sinon : 1 seul mot
     {
      $plusieurs_mots = 0;
      $phrase = "description like('%$request%')"; // recherche simple ^^
      $texte = "Enregistrement(s) contenant <b>&quot;$request&quot;</b>";
      }
				   
     $query="select * from ".$table." where ".$phrase.";
     $result_recherche = mysql_query($query);
     @ $num_liens_rech = mysql_num_rows($result_recherche);
       if ($num_liens_rech==0) // Si il n'a rien trouvé
         {
      echo "<center><font color=\"#FF0000\" face=\"Arial\">Aucun enregistrement ne correspond à votre recherche !</font></center>"; 
          }
       else
         {
         ?>
   <center><font face="Arial">Résultat de votre recherche :</font></center>
  <br><br>
         <?
   echo "<center><font face=\"Arial\">".$texte."</font></center>"; // Affiche "
   echo "<br><br>"; 
   echo "&nbsp; &nbsp; &nbsp; Nous avons trouvé ".$num_liens_rech." enregistrement(s) correspondant à votre recherche. <br><br>";
   echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"540\" align=\"center\">\n";
   while ($tableau_rech=$BDD->enTableauTXT($result_recherche))
       {
        if ($plusieurs_mots==1)
         {
         $new_description = $tableau_rech["description"];	
            for ($z=0; $z<$nombre_mots; $z++)	
                 {							$mots[$z] = strtolower($mots[$z]);
                $new_description = str_replace (strtolower($mots[$z]), "<span class=\"motscles\">".strtolower($mots[$z])."</span>", $new_description);
								$new_description = str_replace (strtoupper($mots[$z]), "<span class=\"motscles\">".strtoupper($mots[$z])."</span>", $new_description);
								$new_description = str_replace (ucfirst($mots[$z]), "<span class=\"motscles\">".ucfirst($mots[$z])."</span>", $new_description);
       }
    }
   else
   {
     $new_description = str_replace (strtolower($request), "<span class=\"motscles\">".strtolower($request)."</span>", $tableau_rech["description"]);

     $new_description = str_replace (strtoupper($request), "<span class=\"motscles\">".strtoupper($request)."</span>", $new_description);
				
     $new_description = str_replace (ucfirst($request), "<span class=\"motscles\">".ucfirst($request)."</span>", $new_description);
    }
    echo "<tr>\n";
    echo "<td colspan=\"2\">";
    echo "<a href=\"redir.php?id=".$tableau_rech["Lid"]."\" target=\"_blank\"><font color=\"#000090\"><b>".$tableau_rech["nom"]."</b></font></a>"." - <font color=\"#BD33B2\"><i>".$tableau_rech["adresse"]."</i></font>";
    echo "<td>";
    echo "</tr>\n";
    echo "<tr>\n";
    echo "<td width=\"30\">&nbsp;</td>\n";
    echo "<td width=\"472\">";
    echo "<font color=\"#828282\">".$new_description."</font>";
    echo "<br><br>";
    echo "</td>\n</tr>\n";
    }	  
    echo "</table>";  
   } 
 }
?>
</body>
</html>

Conclusion :


Voilà, testez, prévevez des bugs, j'améliore, tout le monde est content (^^) !!
Bon programming, vive le PHP !

A voir également

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.