Créer un compte
Connexion

[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 Le 12/07/2010 à 00:17:21
Note: 4/5
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:
--
-- 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.');
Télécharger
Voici à quoi ressemble la table utilisateurs:
Image
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:
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:
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:
<?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>
Essayer

Vous pouvez maintenant adapter cet exemple à votre site.

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

Scripts et Tutoriels similaires

Espace membre en php mysql - utilisateurs espace membre inscription connection sessions php mysql Espace membre en php mysql - utilisateurs espace membre inscription connection sessions php mysql Simple PHP Forum Script - Forum en php facile simple script code telecharger forum php gratuit mysql Simple PHP Forum Script - Forum en php facile simple script code telecharger forum php gratuit mysql Faire une base de données sans SQL Faire une base de données sans SQL Messagerie Interne en php mysql - utilisateurs messagerie mail mp pm messages personnels prives Messagerie Interne en php mysql - utilisateurs messagerie mail mp pm messages personnels prives Top site script php - installer une top site php sur son site Top site script php - installer une top site php sur son site