• Facile
Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Introduction du cours

Bien le bonjour ! Dans ce court tutoriel, nous verrons comment créer un petit moteur de recherche pour son site internet, avec des tables MySQL et un critère spécial, ainsi qu'une autre fonction qui pourrait vous être utile.

Vous verrez, créer un moteur de recherche pour son site n'est guère difficile, et utiliser une requête spéciale de MySQL suffira. Nous verrons également comment vérifier le nombre de requêtes avec une fonction PHP, lisez donc la suite !

Où faire la recherche ?

C'est la première question que vous devez vous poser. Où réaliser la recherche ? Dans quelles tables ?

C'est très simple. Il suffit de faire la recherche dans la table où se trouvent les articles susceptibles d'être recherchés. Vous pouvez utiliser plusieurs tables, bien sûr.

Dans mon cas, je vais créer un mini-moteur de recherche pour un site comme le Site du Zér0, qui propose des tutos mais aussi des tables contenant des informations sur les fonctions en PHP, ici nommée fonctions :p . C'est ici que je vais lancer la recherche.

Voici les champs de ma table :
idnom_fonctiontexte
C'est tout !
Le premier champ, vous comprendrez sûrement à quoi il sert : il permet d'identifier chaque entrée de la table avec un numéro qui s'incrémente automatiquement (voir le cours de M@teo21 pour les trous de mémoire), pour pouvoir les sélectionner et les classer sans difficulté ;) . Le deuxième, c'est le nom de la fonction (par exemple, mysql_query). Et le troisième, c'est le texte qui présente la fonction, qui décrit son fonctionnement...

  • id

  • nom_fonction

  • texte

La page qui affichera le contenu de la fonction se nommera fonction.php et contiendra dans l'URL l'id de l'entrée concernée enregistrée sous MySQL (qui correspond donc à la fonction actuellement affichée). S'il n'y a pas d'id, un message d'erreur apparaîtra. Mais ce n'est pas ça que nous réaliserons au cours de ce tuto, mais le moteur qui permettra de faire des recherches dans cette table... Vous imaginez, si le site répertorie toutes les fonctions PHP qui existent et encore d'autres venant de diverses bibliothèques :o ? L'interessé sera vite découragé à la vue du nombre de fonctions.
Heureusement, on peut lui simplifier la vie avec le système de recherche.

Je vais maintenant vous présenter la requête SQL qui permet d'effectuer une recherche ;) .

Le critère de sélection LIKE

Nous allons voir maintenant ce qu'est le critère LIKE et comment l'utiliser dans notre cas, mais aussi comment il fonctionne.

Tout d'abord, il faut savoir que le critère LIKE est un "argument" SQL, un peu comme les WHERE et autres ORDER BY. LIKE signifie "comme" (anglais inside :p ). On l'utilise toujours aux côtés d'un WHERE. En gros, si on tape WHERE nom_fonction LIKE 'mysql' , cela signifie "dont le nom de la fonction est comme "mysql". Il est utilisé pour les barres de recherche que beaucoup de sites possèdent, c'est pourquoi je vous le présente ;) .

Pour tirer parti de ce critère (dans notre situation), il faut l'utiliser dans une requête de sélection. Voici ce que cela donnera au final :

SELECT * FROM fonctions WHERE nom_fonction LIKE '%mysql%' ORDER BY nom_fonction

Tout d'abord, on sélectionne la table, puis on met un WHERE pour dire à quel champ doit correspondre la recherche et enfin le fameux LIKE, suivi de '%mysql%' qui détermine le mot clé recherché. Je vais d'ailleurs détailler ce dernier. Les symboles % signifient qu'il peut y avoir n'importe quoi avant et après le mot clé "mysql". Par exemple, on peut très bien obtenir des résultats de ce style pour une recherche "mysql" :

  1. mysql_query

  2. mysql_fetch_array

  3. select_mysql_db (j'invente, ce n'est que pour vous montrer que quelque chose peut se trouver devant la requête donnée)

En gros, les % sont un peu comme les X en mathématiques, cela peut prendre n'importe quelle valeur. On peut en placer devant ou derrière la requête, pour dire s'il peut y avoir des valeurs devant et / ou derrière. Par contre, si vous ne mettez qu'un seul % (devant ou derrière), il n'y aura de valeurs supplémentaires possibles que de ce côté-là.

Enfin, le "mysql" entre '%%' , c'est notre mot clé. La requête SQL sélectionnera donc toutes les entrées de la table fonction dont le champ nom_fonction contient le mot clé mysql et classera les résultat par ordre alphabétique grâce au critère ORDER BY.

Ce critère est donc très, très simple à utiliser.

Voilà, passons à la suite, la réalisation du script :) .

Réalisation du script

Voilà, nous arrivons déjà à la dernière partie de ce tuto. Nous allons réaliser le script pour faire les recherches ! Tout d'abord, voici le schéma du script :

  • si le post existe et n'est pas nul, connexion à mysql et recherche avec LIKE :

    • si on obtient au moins un résultat, on affiche le ou les résultats :

      • si le résultat est égal à un, on utilise le terme "résultat" , puisqu'il n'y qu'un seul résultat,

      • sinon, on utilise le terme "résultats", vu que il y a plus d'un résultats ;

    • sinon, on affiche un message stipulant qu'il n'y pas eu de résultats ;

  • sinon, on affiche le formulaire.

C'est tout simple ! Néanmoins, il faut que je précise un petit point avant que vous ne vous lanciez dans votre script. En effet, pour vérifier le nombre de résultats, il faut utiliser une fonction spéciale, mysql_num_rows, qui va compter le nombre de résultats. Voilà ce que ça donnera :

// ...
$query = mysql_query("SELECT * FROM fonctions WHERE fonction LIKE '%$recherche%' ORDER BY fonction") or die (mysql_error()); // On exécute la requête. Je précise qu'ici, la variable "$recherche" contient la recherche obtenue lors du POST. Nous verrons ça un peu plus bas en détails.
$verif = mysql_num_rows($query); // On crée la variable "$verif" qui servira à vérifier si on a des résultats ou non
if($verif != 0) // On fait tout simplement une condition pour savoir "si le résultat est différent de 0...". Si c'est le cas, il y a bien des résultats.
{
//...

Cette fonction est très simple à utiliser. Plus bas, notamment, pour vérifier si le résultat est égal ou supérieur à 1, pour déterminer s'il faut employer le pluriel ou le singulier lorsque le script emploie une phrase telle que "vous avez 10 résultats", puisqu'il peut aussi bien y en avoir 1 ou 10 :-° ...

Voilà : maintenant, j'estime que je peux vous laisser faire tout ça tout seuls, comme dans un TP ! Mais je vais quand même vous afficher un script qui sert de moteur de recherche !

<?
if(isset($_POST['requete']) && $_POST['requete'] != NULL) // on vérifie d'abord l'existence du POST et aussi si la requete n'est pas vide.
{
mysql_connect('localhost','root','');
mysql_select_db('bdd'); // on se connecte à MySQL. Je vous laisse remplacer les différentes informations pour adapter ce code à votre site.
$requete = htmlspecialchars($_POST['requete']); // on crée une variable $requete pour faciliter l'écriture de la requête SQL, mais aussi pour empêcher les éventuels malins qui utiliseraient du PHP ou du JS, avec la fonction htmlspecialchars().
$query = mysql_query("SELECT * FROM fonctions WHERE nom_fonction LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error()); // la requête, que vous devez maintenant comprendre ;)
$nb_resultats = mysql_num_rows($query); // on utilise la fonction mysql_num_rows pour compter les résultats pour vérifier par après
if($nb_resultats != 0) // si le nombre de résultats est supérieur à 0, on continue
{
// maintenant, on va afficher les résultats et la page qui les donne ainsi que leur nombre, avec un peu de code HTML pour faciliter la tâche.
?>
<h3>Résultats de votre recherche.</h3>
<p>Nous avons trouvé <? echo $nb_resultats; // on affiche le nombre de résultats 
if($nb_resultats > 1) { echo 'résultats'; } else { echo 'résultat'; } // on vérifie le nombre de résultats pour orthographier correctement. 
?>
dans notre base de données. Voici les fonctions que nous avons trouvées :<br/>
<br/>
<?
while($donnees = mysql_fetch_array($query)) // on fait un while pour afficher la liste des fonctions trouvées, ainsi que l'id qui permettra de faire le lien vers la page de la fonction
{
?>
<a href="fonction.php?id=<? echo $donnees['id']; ?>"><? echo $donnees['nom_fonction']; ?></a><br/>
<?
} // fin de la boucle
?><br/>
<br/>
<a href="rechercher.php">Faire une nouvelle recherche</a></p>
<?
} // Fini d'afficher les résultats ! Maintenant, nous allons afficher l'éventuelle erreur en cas d'échec de recherche et le formulaire.
else
{ // de nouveau, un peu de HTML
?>
<h3>Pas de résultats</h3>
<p>Nous n'avons trouvé aucun résultat pour votre requête "<? echo $_POST['requete']; ?>". <a href="rechercher.php">Réessayez</a> avec autre chose.</p>
<?
}// Fini d'afficher l'erreur ^^
mysql_close(); // on ferme mysql, on n'en a plus besoin
}
else
{ // et voilà le formulaire, en HTML de nouveau !
?>
<p>Vous allez faire une recherche dans notre base de données concernant les fonctions PHP. Tapez une requête pour réaliser une recherche.</p>
 <form action="rechercher.php" method="Post">
<input type="text" name="requete" size="10">
<input type="submit" value="Ok">
</form>
<?
}
// et voilà, c'est fini !
?>

Il reste un dernier petit point à aborder : les différentes façons d'utiliser LIKE.

D'autres manières d'exploiter LIKE

Dans le script que je vous ai donné, en exemple, nous utilisions LIKE de cette façon :

... LIKE '%$requete%' ...

De façon à faire une recherche dans une table avec un mot-clé. Mais nous avons aussi vu qu'on pouvait exploiter LIKE de deux autres manières :

  • ... LIKE '%$requete'

  • ... LIKE '$requete%'

Eh bien il y a moyen d'utiliser ces deux façons. Vous savez maintenant que le % représente une valeur quelconque (un peu comme un X en mathématiques). Si on place le % après la variable, on trouvera des résultats avec le mot-clé puis éventuellement des caractères supplémentaires à côté. Dans le script réalisé précédemment, nous avions mis les % de part et d'autre de la variable pour obtenir tout un tas de résultats.

Eh bien sachez que vous pouvez utilisez les deux autres manières citées plus haut. Comment ? Je vous donne des exemples ! ;)

LIKE '$requete%'

En sachant que la variable $requete représente une lettre de l'alphabet... oui, oui, c'est bien ça : avec cette façon d'exploiter LIKE, vous pourrez faire des recherches en fonction des lettres de l'alphabet. ;) Vous n'avez qu'à faire une liste avec les lettres, et, après envoi de la requête, MySQL ira chercher des entrées où le mot commence par la lettre choisie. Ce n'est pas plus compliqué que ça ! ;) Pensez tout de même, si vous réalisez ce type de script et que votre "dictionnaire" ou autre contient des mots commençant par des chiffres, à mettre une dernière option qui ira chercher tous les résultats commençant par un chiffre. Je pense que vous êtes assez grands pour vous débrouiller pour ça ! ^^

LIKE '%$requete'

À vrai dire, j'ai mis un peu de temps pour trouver une manière de l'utiliser... ^^ Disons que vous réalisez une sorte de Bescherelle on-line (le net en a bien besoin, n'empêche :-° ). Un de vos visiteurs veut voir toute la liste des verbes qui se terminent par -ER. Eh bien on fera cette requête toute simple :

SELECT * FROM liste_verbes WHERE verbe LIKE '%er' ORDER BY verbe

Et le visiteur aura sa liste des verbes en -ER.

Citation : Moteur de recherche (Bescherelle)

Aimer
Chanter
Danser
Manger
...

Voilà, nous avons fait le tour des possibilités du critère de sélection LIKE. J'espère que vous en ferez bon usage ! ^^

J'ai mis en ligne un petit QCM qui permettra de vous tester : savez-vous ou non utiliser le critère LIKE, de différentes manières ? Mais je suis sûr que vous réussirez les doigts dans le nez ! :D

Eh bien voilà, ce n'était pas bien compliqué.

En lisant ce tuto, vous avez appris à utiliser le critère de sélection LIKE, comment vérifier le nombre de résultats ainsi que les différentes manières d'utiliser LIKE. J'espère que vous aurez pris autant de plaisir à lire ce tutoriel que j'en ai eu à l'écrire, et que vous aurez appris des choses utiles et qui vous serviront pour votre site ;) !

Exemple de certificat de réussite
Exemple de certificat de réussite