Moteur de recherche avec DMX

Dans le cadre d’un site dynamique qui doit afficher beaucoup d’informations provenant d’une base de données il est utile de créer un moteur de recherche pour accéder facilement et rapidement à certaines de ces données, suivant des critères précis, entrés dans un champ de formulaire par l’internaute.

Dans ce tutorial nous allons voir comment créer un moteur de recherche basique avec les outils de Dreamweaver MX et le langage PHP/MySql, le principe étant le même avec les autres modèles de serveur.

Il est nécessaire de connaître les bases de Dreamweaver MX, ainsi que ses fonctions dynamiques, les bases de PHP/MySql n’étant pas inutile, reportez pour ce faire au tutorial « Application dynamique » disponible sur FlashXpress et sur ces sites pour PHP :

PHP Débutant
PHP France
PHP Index

Création du formulaire de recherche

On crée tout d’abord deux pages, l’une se nommant moteur.php, la seconde resultat.php.
Dans la page « moteur.php » on insère un formulaire ayant pour nom « recherche », méthode « POST » et action la page « resultat.php ».

propriete_form.gif

On y place un champ texte qui va servir à la recherche, on ajoute un bouton d’envoi que l’on nomme « Rechercher un film ».

champ_form.gif

On donne pour nom « search » au champ de formulaire, avec une largeur de 40.

propriete_champ.gif

On enregistre et on ferme la page.

Création de la requête de résultat

C’est la page « resultat.php » qui va recevoir la requête du formulaire, traiter cette requête vers la base de données et afficher le résultat.
Vous pouvez télécharger la base de données utilisé pour le tutorial ici.

Lors de la création du jeu d’enregistrement, on passe de suite au mode Avancé, on sélectionne la connexion flashxpress, on nomme le jeu d’enregistrement « video » et dans Database Items, on sélectionne les champs de la table qui nous intéresse, puis on clique sur Select.
Pour faire apparaître les résultats ordonnés par titre et de manière ascendante, on sélectionne ce champ puis on clique sur ORDER BY (l’interface peut changer, ma version de Dream est bilingue malgré moi ,-)).

interface_requete.gif

{mospagebreak}

Paramètres de recherche

Pour spécifier les paramètres dont nous avons besoin dans notre requête, on clique sur le bouton + dans l’interface, s’affiche une nouvelle fenêtre.

parametre.gif

Nous allons spécifier trois types de recherche possible, et pour ce faire on ajoute donc autant de paramètre que de type de recherche.

J’ai remarqué que Dream avait tendance à renommer mes noms de variables dans les requêtes SQL, je garde donc le nom par défaut, « colname », la valeur par défaut « 0″, « Runtime Value », la méthode, ici POST, la requête provenant d’un formulaire, « search » étant la valeur, $_POST['search'] étant une variable globale qui va récupérer la valeur du champ texte du formulaire de la page « moteur.php », cette valeur étant passée par la méthode POST.

On complète alors notre requête SQL, sachant que la clause « WHERE » nous permet de spécifier un champ de la table précis et la clause « LIKE »  de chercher quelque chose qui ressemble à notre texte passé en paramètre.

requete.gif

En bon français : sélectionner les champs « titre », « realisateur », « acteurs », « description » dans la table « video » où « titre » ressemble à « colname » (valeur du champ de formulaire « search ») ou bien « realisateur » ressemble à « colname » (valeur du champ de formulaire « search ») ou bien « acteurs » ressemble à « colname » (valeur du champ de formulaire « search ») ordonné par « titre » de manière ascendante.

Ce qui donne en source SQL dans Dreamweaver :

SELECT video.titre, video.realisateur, video.acteurs, video.description
FROM video
WHERE titre LIKE ‘%colname%’
OR realisateur LIKE ‘%colname%’
OR acteurs LIKE ‘%colname%’
ORDER BY titre ASC

On utilise les simples quotespour encadrer notre variable, l’utilisation du signe pourcentage % avant et après le nom de la variable permettant d’inclure le terme recherché avant, dans et après les données du champ de la table, par exemple une recherche sur le mot « jo » renverra tous les enregistrements comportant Jon, John, VELJOHNSON, Josiane, JOFFE, etc, dans au moins un des champs de la table spécifiés dans notre requête.

A savoir que c’est le type de champ utilisé dans votre base de données qui fera que le moteur de recherche est sensible à la casse ou non, pour en savoir plus reporter vous aux sites traitant de SQL ou mieux aux spécifications de votre base de données.

Affichage de la requête

On crée un tableau de 4 lignes et 2 colonnes, dans lequel vont venir se placer les différents champs de notre requête, puis on sélectionne le tableau et on fait une région répétée de tous les enregistrements (Fenêtre > Comportements de serveur > Région répétée).

region_repetee.gif

Conditions d’affichage

Il nous faut maintenant définir une condition d’affichage, car si la requête ne renvoie aucun résultat, le tableau va être affiché par défaut, ce qui n’est franchement pas esthétique mais surtout inutile.

On sélectionne la totalité du tableau, Fenêtre > Comportements de serveur > Afficher > Afficher si le jeu d’enregistrement n’est pas vide ».

conditions.gif

Et on choisit le jeu d’enregistrement concerné, donc ici « video ».

Choix du recordset

{mospagebreak}

Message d’erreur et de résultat

Notre condition appliquée un peu plus haut ne suffit pas, il faut aussi tester si le champ de formulaire est bien rempli ou au contraire vide, nous allons créer un script en PHP pour ce faire, qui va nous permettre en même temps d’afficher le nombre de résultats, de mettre en gras le texte recherché et d’afficher un message d’erreur en cas de champ de formulaire vide.

A savoir que les commentaires en PHP sont, pour une ligne simple, un double slash // ou encore un dièse #, et slash étoile /* étoile slash */ pour des commentaires multi-ligne.

// ceci est un commentaire simple ligne
# ceci aussi est un commentaire simple ligne
/* ceci est un commentaire
multi-ligne */

Le code source :

<?php
// on définis une variable (search) et on spécifie sa méthode d’envoi (POST)
$search = $_POST['search'];
// si la variable « search » est vide, on affiche un message d’erreur
if(empty($search))
{ echo
htmlentities(« Erreur ! Le champ de recherche est vide. »);
// et on clôt le script
exit();
}
/*  un seul enregistrement trouvé, on affiche le message voulu
on en profite pour mettre en gras le champ de recherche */
elseif ($totalRows_video == 1)
{ echo
 ».$totalRows_video.‘ ‘.htmlentities(« enregistrement trouvé pour votre requête : »)‘. <strong>’.$_POST['search'].‘</strong>’;
}
// plusieurs enregistrements trouvés, on affiche le message voulu
elseif ($totalRows_video >1)
{ echo
 ».$totalRows_video.‘ ‘.htmlentities(« enregistrements trouvés pour votre requête : »).‘ <strong>’.$_POST['search'].‘</strong>’;
}
else
// pas d’enregistrement trouvé, on affiche le message voulu
{ echo  ».htmlentities(« aucun enregistrement trouvé pour votre requête : »).‘ <strong>’.$_POST['search'].‘</strong>’;
}
// fin du script
?>

Il faut donc passer en mode « code source » dans Dreamweaver pour placer ce script avant notre tableau, afin que si le script renvoie un message d’erreur la requête s’arrête.

Ce qui nous affiche en cas de message d’erreur :

Message d'erreur

Et avec un seul résultat :

Affichage du résultat

Pour vous simplifier la vie, j’ai compilé ce script en extension pour Dreamweaver, extension que vous pouvez charger ici ou sur mon site perso, une fois installée, elle est accessible à partir de Fenêtre > Comportements de serveur> T.E.V> Conditions > PHP Search Result.

Une réponse Souscrire aux commentaires


  1. le champenois

    toujours rien a redire , c’est parfait pour ceux qui apprennent
    @ Cordialement

    31 mar 2011 @ 21:20

Répondre