Comment créer un moteur de recherches sur un site dynamique? C'est ce que nous allons voir dans cette partie .

On créé un nouveau fichier à partir du fichier gabarit.php que l'on va nommer moteur.php.

Un moteur de recherches, c'est au point de départ un simple formulaire.

<form method="post" action="moteur.php">
<p>
<input size="50" name="requete" value="" type="text"/>
<input value="Rechercher" name="submit" type="submit"/>
</p>
</form>

Ensuite, il faut traiter la requête de l'utilisateur :

<?php
if(isset($_POST['submit']))
{
//On nettoie un peut la requête
$requete = trim(stripcslashes(htmlspecialchars($_POST['requete'])));
 
}
?>

Une fois la requête "néttoyé", on  se connecte à la base de données et on effectue une recherche de la requête dans les champs titre, description et texte.

<?php
if(isset($_POST['submit']))
{
//On nettoie un peut la requête
$requete = trim(stripcslashes(htmlspecialchars($_POST['requete'])));
 
//On se connecte à la base de données
include('connexion_bd.php');
 
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es du fichier connexion_bd.php.');
 
$query = mysql_query("SELECT id,titre,description,texte FROM CONTENU WHERE titre 
REGEXP '[[:<:]]"
.mysql_real_escape_string($requete)."[[:>:]]' OR description
REGEXP '[[:<:]]"
.mysql_real_escape_string($requete)."[[:>:]]' OR texte
REGEXP '[[:<:]]"
.mysql_real_escape_string($requete)."[[:>:]]' ORDER BY id ASC") or die (mysql_error()); } ?>

Pour déterminer les limites d'un mot, on utilise ici la fonction REGEXP [[:<:]]$requete [[:>:]]. Généralement, on a tendance à utiliser la fonction LIKE '%$requete%' mais celle-ci nous ressort parfois beaucoup de résultats inutiles...

La suite du code est simple :

  • On vérifie si la requête ressort un résultat.
  • Si il y a au moins un résultat, on affiche le titre+lien et la description de la page concernée.
  • Si il n'y a aucun résultat, on affiche un texte.
<?php
if(isset($_POST['submit']))
{
//On nettoie un peut la requête
$requete = trim(stripcslashes(htmlspecialchars($_POST['requete'])));
 
//On se connecte à la base de données
include('connexion_bd.php');
 
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es du fichier connexion_bd.php.');
 
$query = mysql_query("SELECT id,titre,description,texte FROM CONTENU WHERE titre 
REGEXP '[[:<:]]"
.mysql_real_escape_string($requete)."[[:>:]]' OR description
REGEXP '[[:<:]]"
.mysql_real_escape_string($requete)."[[:>:]]' OR texte
REGEXP '[[:<:]]"
.mysql_real_escape_string($requete)."[[:>:]]' ORDER BY id ASC") or die (mysql_error());   //On utilise la fonction mysql_num_rows pour compter les résultats $nb_resultats = mysql_num_rows($query); //Si le nombre de résultats est différent de 0, on continue if($nb_resultats != 0) { //On affiche le nombre de résultats echo 'Il existe <b>'.$nb_resultats.'</b>'; if($nb_resultats > 1) // on vérifie le nombre de résultats pour orthographier correctement. { echo ' r&eacute;sultats'; } else { echo ' r&eacute;sultat'; } echo ' pour votre recherche "<b>'.$requete.'</b>" trouv&eacute; :<br/>'; //On attribue un chiffre pour chaque enregistrement trouvé $i = "1"; //On boucle pour afficher la liste des enregistrements trouvés while($donnees = mysql_fetch_array($query)) { echo '<div class="cadre"><big><big>'.$i.'-<a title="'.$donnees['titre'].'" href="page.php?id='.$donnees['id'].'">'.$donnees['titre'].'</a></big></big><br/><p>'.$donnees['description'].'</p></div>'; $i++; } //on ferme if($nb_resultats > 1) } //Si il n'y a rien else { echo '<p>Nous n\'avons trouv&eacute; aucun r&eacute;sultats pour votre recherche "<b>
'
.$requete.'</b>" !</p>'; } //On ferme if(isset($_POST['requete']) } //On ferme mysql mysql_close(); ?>

Ceci étant fait, (je vous laisse la mise en page ^^) il nous reste plus qu'à afficher le formulaire sur toutes les pages. Personnellement, je l'ai ajouté en fin de menu du fichier menu.php.

<h1>Recherches</h1>
<form method="post" action="moteur.php">
<p><input size="20" name="requete" value="" type="text"/>
<input value="Rechercher" name="submit" type="submit"/></p>
</form>
</div>

Catégorie Créer un site dynamique

Commentaire sur : Création d'un moteur de recherches