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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 567 fois - Téléchargée 28 fois

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

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
23 décembre 2007

ok
Messages postés
239
Date d'inscription
jeudi 21 juillet 2005
Statut
Membre
Dernière intervention
1 juillet 2007

Mal foutu ce script , serieux faut que tu rectifie ca ! meme si ca date... verifie ce que tu met on pe pa non plus tjs deviner
Messages postés
32
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
3 avril 2015

Bon, je débute je débute, j'espère ne pas faire de bétises...

Pour éviter une parse error, j'ai modifié la ligne query en
$query= "select * from ".".$table."." where ".".$phrase.";

Ceci dit, j'ai encore une parse error $

Ne manque t'il pas une } dans la phase de constitution de la phrase de recherche ?

Merci beaucoup !
Messages postés
69
Date d'inscription
mercredi 18 février 2004
Statut
Membre
Dernière intervention
6 décembre 2007

J'ai une erreur:
Parse error: parse error, unexpected '{' in c:\program files\easyphp\www\perso_sql2\database.php on line 34.

Plutôt étrange n'est-ce pas?
Quelqu'un peut m'aider? Merci et bonne fin d'aprés-midi
Messages postés
1
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
24 février 2004

Après quelques modifications, j'arrive enfin à faire foctionner une partie du code me permettant d'obtenir le nombre d'enregistrements trouvés. (Attention, il y' pas de problèmes sur les " et ", mais aussi sur les fin de blocs " } ").

Cependant, je n'arrive toujours pas à obtenir l'affichage des résultats, et pour cause puisque tu fais référence à une fonction "enTableauTXT()" qui n'est définie nulle part... (dans : "while ($tableau_rech=$BDD->enTableauTXT($result_recherche))" ).
Aurais-tu oublié un include ?

Sinon, ce code devrait s'avérer bien pratique quand il fonctionnera :-)
Afficher les 11 commentaires

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.