La recherche par mot clef dans une table mysql avec php

Contenu du snippet

Bon, cela est peut-être sans grand interêt pour nombre de personnes, mais j'ai pensé que cela pourrait être intéressant de diffuser ce code puisqu'àprès l'avoir cherché dans tous les recoins du web, j'ai dû constater que personne n'avait fait quelquechose du genre, du moins, personne ne l'avait partagé.

Bref, il s'agit (simplement) d'un petit script dont je me sert en inclusion d'ordinaire, mais libre à vous de l'adapter à votre site... et il a la particularité de récupérer le nom des champs de la table MA_TABLE et de garder ceux qui correspondent aux champs Varchar, Text et Date et qui récupère le terme de recherche qui est contenu dans la variable $Recherche et qui en fait une requête prête à être envoyée à Mysql. Bon, je n'ai pas encore trouvé le moyen d'ordonner les résultats selon le nombre d'occurences, mais j'imagine que des âmes charitables sauront me donner un petit coup de pouce à ce sujet... Je conseille, si vous utilisez ce script de mettre ceci en option dans votre module de recherche car je n'ai pas pris en compte le fait que les recherches entre guillemets ne doivent pas être scindées et pas mal d'autre choses qui nous seraient bien utiles... Bref, un script surtout fait pour les curieux tant que je ne l'ai pas terminé comme un webmaster se doit de le faire.

Alors, pour l'exemple, voici ce que j'obtiens avec l'une des tables de mon site :
$Recherche= "PHP MYSQL";
Sur la table Article :

SELECT * FROM Article WHERE (Titre LIKE '%PHP%' OR Titre LIKE '%MYSQL%' OR Contenu LIKE '%PHP%' OR Contenu LIKE '%MYSQL%' OR Auteur LIKE '%PHP%' OR Auteur LIKE '%MYSQL%' OR Date LIKE '%PHP%' OR Date LIKE '%MYSQL%')

Source / Exemple :


<?
$MaTable="NOM_DE_MA_TABLE";
$Requete="SELECT * FROM $MaTable WHERE ";
$MotClef = explode(" ", $Recherche);
$NbMotClef = count($MotClef);
$Requete.= "(";
$RequeteTri=mysql_query("SHOW COLUMNS From $MaTable");
$I="0";
while ($Row = mysql_fetch_array($RequeteTri))
{
$Type = eregi_replace("[^a-z]", "", $Row['Type']);
$I2="0";
	if((($Type=="varchar")||($Type=="text")||($Type=="date")))
	{
	if($I!="0") { $Requete.= " OR "; }
	reset($MotClef);
	foreach($MotClef as $V)
		{
		$I2++;
		$Requete.= $Row['Field'] . " LIKE '%$V%'";
		if($I2!=$NbMotClef) { $Requete.= " OR "; }
		}
	$I++;
	}
}
mysql_free_result($RequeteTri);

$Requete.= ")";
echo $Requete;
?>

Conclusion :


Voilà, bonne utilisation, et sachez que tout cela sera dispo sur mon autre code source, celui où je met tout mon site, car je suis actuellement dans une complète rénovation et automatisation de ce dernier. Nottament, je peux faire tourner mon site en laissant le register_global off et le signalement des erreurs du type Notice car l'utilisation de ces options devient déprécated alors, va nous falloir nous y faire et je pense que c'est un gain sérieux en rapidité et en sécurité. Bref, tout cela sera bientôt mis sur le code source en question.

@++++ Hell

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.