Vous êtes ici: Support du web > Scripts et tutoriaux > PHP / MYSQL > [MYSQL]Recherche dans la base de donnée - like %% moteur de recherche internet

[MYSQL]Recherche dans la base de donnée - like %% moteur de recherche internet

[MYSQL]Recherche dans la base de donnée - like %% moteur de recherche internet [MYSQL]Recherche dans la base de donnée - like %% moteur de recherche internet
Note : 4.9/5 (4 votes)
Derniéres modifications : 12/07/2010 à 00:17:21
Mots-Clés : recherche base de donnée mysql like sql moteur de recherche internet php bdd like%% tutoriel script fonction chercher dans la base de donnée mysql operateur recherche moteur mysql tutoriel like not like mysql regex mysql

Bonjour,
dans ce tutoriel, je vais vous montrer comment simplement effectuer une recherche dans une base de donnée mysql en utilisant le php.
Au cours de ce tutoriel, nous allons utiliser la table utilisateurs:
Code: SQL
--
-- Structure de la table `utilisateurs`
--

CREATE TABLE `utilisateurs` (
  `id` bigint(20) NOT NULL,
  `pseudo` varchar(255) NOT NULL,
  `nom` varchar(255) NOT NULL,
  `genre` varchar(255) NOT NULL,
  `infos` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Contenu de la table `utilisateurs`
--

INSERT INTO `utilisateurs` VALUES (1, 'ybouane', 'Yassine', 'homme', 'j''aime le php et le mysql');
INSERT INTO `utilisateurs` VALUES (2, 'utilisateur01', 'Mon nom', 'homme', 'je fait du php mysql css javascript');
INSERT INTO `utilisateurs` VALUES (3, 'utilisateur02', 'Utilisateur', 'femme', 'je suis un exemple');
INSERT INTO `utilisateurs` VALUES (4, 'utilisateur03', 'L''utilisateur 3', 'femme', 'Je sais programmer en php.');
Voici à quoi ressemble la table utilisateurs:

Pour effectuer une recherche, il faut utiliser l'operateur de comparaison LIKE.
Comme vous le savez sûrement, dans le langage SQL, il ya la possibilité de filtrer les résultats selon certains critères. Pour cela, il faut utiliser la clause WHERE.

Pour par exemple filtrer la liste des utilisateur qui sont des hommes, il suffit de faire:
Code: SQL
SELECT * FROM utilisateurs WHERE genre="male"

Dans ce cas, nous avons utilisé l'opérateur de comparaison = (égale). Cet opérateur permet de filtrer les résultats ayant une valeur éxacte.

Pour effectuer une recherche dans les informations des membres, on ne peut pas se limiter à des comparaison éxactes. Si nous voulons par exemple filtrer les résultats pour n'avoir que les personnes ayant dans leur informations l'expression "php MYSQL", on doit passer par l'opérateur de comparaison LIKE et notre code SQL sera:
Code: SQL
SELECT * FROM utilisateurs WHERE infos LIKE "%php MYSQL%"

Vous remarquerez qu'il ya des %(pourcent) ce caractère remplace n'importe quel nombre de caractères, y compris aucun. Vous pouvez aussi utiliser le caractère _ qui remplace exactement un caractère. Si vous désirez rechercher le caractère % ou _ il vous suffit de les échapper en utilisant \% ou \_

Dans notre script, nous allons utiliser trois possibilités de recherche:
  • Trouver l'expression éxacte
  • Trouver un des mots
  • Trouver tout les mots


Voici le script pour faire un moteur de recherche:
Code: PHP
<?php
mysql_connect('hote','utilisateur','mot_de_passe');
mysql_select_db('base_de_donnee');
//On determine l'expression a rechercher
if(isset($_GET['recherche']))
{
        $rec = htmlentities($_GET['recherche']);
}
else
{
        $rec = 'php MYSQL';
}
//On determine le type de recherche
if(isset($_GET['type']))
{
        if($_GET['type']=='un')//Un des mots
        {
                $type = 1;
        }
        elseif($_GET['type']=='tout')//Tout les mots
        {
                $type = 2;
        }
        else//L'expression exacte
        {
                $type = 3;
        }
}
else
{
        $type = 1;//type par defaut: L'expression exacte
}
//On determine si on doit surligner les mots dans les resultats
if(!isset($_GET['surligner']) or $_GET['surligner']!='true')
{
        $surligner = false;
}
else
{
        $surligner = true;
}
//On dertermine les identifiants, les noms et les informations des utilisateur
$req = 'SELECT id, nom, infos FROM utilisateurs WHERE ';
if($type==1)
{//ayant un des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' infos LIKE "%'.$mot.'%" OR';
        }
        $req .= ' 1=0';
}
elseif($type==2)
{//ayant tout des mots dans leurs informations
        $mots = explode(' ',$rec);//En separre lexpression en mots cles
        foreach($mots as $mot)
        {
                $req .= ' infos LIKE "%'.$mot.'%" AND';
        }
        $req .= ' 1=1';
}
else
{//ayant l'expression exacte dans leurs informations
        $req .= 'infos LIKE "%'.$rec.'%"';
}
//Les utilisateur seront ranges par identifiant en ordre croissant
$req .= ' order by id asc';
$requete = mysql_query($req);
//Le formulaire de recherche
?>
<form action="" method="get">
Expression &agrave; rechercher: <input type="text" name="recherche" value="<?php echo $rec; ?>" /><br />
Type de recherche: <input type="radio" name="type" value="un"<?php if($type==1){echo 'checked="checked"';} ?> /> Un des mots <input type="radio" name="type" value="tout"<?php if($type==2){echo 'checked="checked"';} ?> /> Tout les mots <input type="radio" name="type" value="exacte"<?php if($type==3){echo 'checked="checked"';} ?> /> Expression exacte<br />
Mettre en gras les mots recherch&eacute;s: <input type="checkbox" name="surligner" value="true" <?php if($surligner){echo 'checked="checked"';} ?> /><br />
<input type="submit" value="Rechercher" />
</form>
<h2>R&eacute;sultats</h2>
<table>
        <tr>
                <th>Identifiant</th>
                <th>Nom</th>
                <th>Informations</th>
        </tr>
<?php
//On affiche les resultats
while($dnn = mysql_fetch_array($requete))
{
?>
        <tr>
                <td><?php echo $dnn['id']; ?></td>
                <td><?php echo $dnn['nom']; ?></td>
                <td><?php
if($surligner)//Si il faut surligner les mots, on les surligne
{
        if($type==3)
        {
                echo preg_replace('#('.preg_quote($rec).')#i', '<strong>$1</strong>', $dnn['infos']);//On surligne l'expression exacte
        }
        else
        {
                echo preg_replace('#('.str_replace(' ','|',preg_quote($rec)).')#i', '<strong>$1</strong>', $dnn['infos']);//On surligne les mots cles de la recherche
        }
}
else
{
        echo $dnn['infos'];//On ne surligne pas
}
?></td>
        </tr>
<?php
}
?>
</table>

Vous pouvez maintenant adapter cet exemple à votre site.

Merci et j'espère que ce tutoriel vous sera utile.

Scripts et tutoriaux similaires à celui ci:

Commentaires

Ajouter un commentaire





Vous n'êtes actuellement pas connecté, certaines de vos informations(tel que votre Adresse IP) seront enregistrées pour éviter du spam.
Votre message ne doit pas contenir certains mots ou une adresse internet, sinon, il ne sera pas envoyé.

Les commentaires

Envoyé par aglzime le 13/07/2010 à 00:49:16
Magnéfique travaille Maitre!!!!
;)
Envoyé par samwebo le 02/08/2010 à 12:43:58
cool
Envoyé par cocola le 03/08/2010 à 17:15:38
bravo, it's a good one!!
Envoyé par UNLITOPAVAITO le 10/09/2010 à 11:03:55
Hi Iam Prabhu from chennai,joined today in this forum... :)
Envoyé par PPPP le 07/10/2010 à 12:43:04
Bonjour merci pour le tuto, il est tres clair et ouvre sur l'exploitation d'une BDD. Cependant ce script fonctionne avec le moteur MyISAM or dans mon projet je souhaite utiliser innoBD pour créer des relation entre différentes table . Peut on utiliser ce script avec innoDB ou doit on faire des modifications.

Merci encore
Envoyé par Luky_VJ le 10/12/2010 à 10:55:19
Bonjour, j'ai essayé votre code, qui bizarrement me ressors cette erreur :"


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\php form\lebontest.php on line 225

"

mon code est celui ci :

"

<?php
mysql_connect('localhost','root','');
mysql_select_db('tests');
//On determine l'expression a rechercher
if(isset($_GET['recherche']))
{
$rec = htmlentities($_GET['recherche']);
}
else
{
$rec = 'php MYSQL';
}
//On determine le type de recherche
if(isset($_GET['type']))
{
if($_GET['type']=='un')//Un des mots
{
$type = 1;
}
elseif($_GET['type']=='tout')//Tout les mots
{
$type = 2;
}
else//L'expression exacte
{
$type = 3;
}
}
else
{
$type = 1;//type par defaut: L'expression exacte
}
//On determine si on doit surligner les mots dans les resultats
if(!isset($_GET['surligner']) or $_GET['surligner']!='true')
{
$surligner = false;
}
else
{
$surligner = true;
}
//On dertermine les identifiants, les noms et les informations des utilisateur
$req = 'SELECT id, username, email FROM forumusers WHERE ';
if($type==1)
{//ayant un des mots dans leurs informations
$mots = explode(' ',$rec);//En separre lexpression en mots cles
foreach($mots as $mot)
{
$req .= ' infos LIKE "%'.$mot.'%" OR';
}
$req .= ' 1=0';
}
elseif($type==2)
{//ayant tout des mots dans leurs informations
$mots = explode(' ',$rec);//En separre lexpression en mots cles
foreach($mots as $mot)
{
$req .= ' infos LIKE "%'.$mot.'%" AND';
}
$req .= ' 1=1';
}
else
{//ayant l'expression exacte dans leurs informations
$req .= 'infos LIKE "%'.$rec.'%"';
}
//Les utilisateur seront ranges par identifiant en ordre croissant
$req .= ' order by id asc';
$requete = mysql_query($req);
//Le formulaire de recherche
?>
<form action="" method="get">
Expression &agrave; rechercher: <input type="text" name="recherche" value="<?php echo $rec; ?>" /><br />
Type de recherche: <input type="radio" name="type" value="un"<?php if($type==1){echo 'checked="checked"';} ?> /> Un des mots <input type="radio" name="type" value="tout"<?php if($type==2){echo 'checked="checked"';} ?> /> Tout les mots <input type="radio" name="type" value="exacte"<?php if($type==3){echo 'checked="checked"';} ?> /> Expression exacte<br />
Mettre en gras les mots recherch&eacute;s: <input type="checkbox" name="surligner" value="true" <?php if($surligner){echo 'checked="checked"';} ?> /><br />
<input type="submit" value="Rechercher" />
</form>
<h2>R&eacute;sultats</h2>
<table>
<tr>
<th>Identifiant</th>
<th>Nom</th>
<th>Informations</th>
</tr>
<?php
//On affiche les resultats
while($dnn = mysql_fetch_array($requete))
{
?>
<tr>
<td><?php echo $dnn['id']; ?></td>
<td><?php echo $dnn['nom']; ?></td>
<td><?php
if($surligner)//Si il faut surligner les mots, on les surligne
{
if($type==3)
{
echo preg_replace('#('.preg_quote($rec).')#i', '<strong>$1</strong>', $dnn['infos']);//On surligne l'expression exacte
}
else
{
echo preg_replace('#('.str_replace(' ','|',preg_quote($rec)).')#i', '<strong>$1</strong>', $dnn['infos']);//On surligne les mots cles de la recherche
}
}
else
{
echo $dnn['infos'];//On ne surligne pas
}
?></td>
</tr>
<?php
}
?>
</table>

"
Envoyé par sniffle83 le 10/01/2011 à 22:54:14
luky-Vj:
ton probleme ne viendrai til pas tu fai que tu fais $req = 'SELECT id, username, email FROM forumusers WHERE '; et que plus bas on retouve 'infos'
$req .= ' infos LIKE "%'.$mot.'%" OR';
echo preg_replace('#('.preg_quote($rec).')#i', '<strong>$1</strong>', $dnn['infos']);//On surligne
et a d'autre endroit encore, infos été un champs dans l'exemple du site toi tu a les champs id, username, email...
Envoyé par Sana le 20/01/2011 à 23:55:03
Merci pour le tuto ca marche
Envoyé par Claude le 31/07/2011 à 14:00:42
Comment modifier pour que la recherche se fasse sur le mot entier ?
Par exemple une recherche sur le sortira leçon, mirabelle, pleuvoir...
Très bon code que j'essaye d'adapter pour l'utilisation sur deux tables jointes
Envoyé par atmoner le 13/09/2011 à 18:33:28
Euuhhh... je trouvais le concept intéressant... mais après avoirs regarder le code, rien n'est sécuriser...!! si vous ne voulez pas faire de votre site un vrai gruyère, éviter d'utiliser ce script... ou alors repasser tout en revue ;)
Envoyé par jzbjzb le 15/11/2011 à 15:31:23
Merci Ybouane pour ce superbe moteur de recherche !
Envoyé par keunene le 10/12/2011 à 22:58:35

merci frère.

j'ai utilisé ce code pour faire un dictionnaire biblique tout en l'améliorant
Envoyé par ubtic le 15/12/2011 à 00:57:48
J'ai essayé votre code voici l'erreur que la machine retourne
Expression à rechercher:
Type de recherche: Un des mots Tout les mots Expression exacte
Mettre en gras les mots recherchés:
Résultats

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/moteurdeRecherche.php on line 86
Identifiant Nom Informations.Comment je peux la corriger j'utilise ubuntu 10.04 avec xampp
Envoyé par rmoxgxqb le 24/01/2012 à 12:28:30
20


Il y a actuellent 32 personne(s) connecté(es)
Page générée en 0.008905 secondes
Retour en haut
Règlements - Nous contacter - Aider le site - RSS News
Copyright © Support du web - Toute copie partielle ou complète de nos créations est interdite sans l'accord de ses auteurs.
Toutes les marques citées appartiennent à leurs compagnies respectives.