Moteur de recherches du CMS spécial Free.fr

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.
Nous allons à présent créer le moteur de recherches du CMS spécial Free.fr. Ce moteur de recherches n'aura rien d'extraordinaire, il va juste chercher le mot exacte entré par l'internaute dans le titre, la description ou le contenu des articles.

Nous créons donc un nouveau fichier nommé "recherche.php" :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
 
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>Formulaire de recherches</title>
<meta name="Description" content="Formulaire de recherches" />
<link rel="canonical" href="http://<?php echo $_SERVER['HTTP_HOST'];?>/recherche.php" /> <link href="http://<?php echo $_SERVER['HTTP_HOST'];?>/style.css" rel="stylesheet" type="text/css"/>
</head>
 
<body>
 
<div id="moncadre">
<?php include('menu.php');?>
<div class="cadrecentrale">
<h1>Formulaire de recherches</h1>
<!--code ici-->
</div>
<?php include('footer.php');?>
</div>
 
</body>
</html>
Avant le DOCTYPE, nous incluons la connexion à la BD et le fichier des fonctions :
<?php
include('connexion_bd.php');
include('fonctions.php');
connexion_bd();
?>
Sous le "H1", nous insérons le fil d’Ariane :
<p>
<a title="Accueil" href="http://<?php echo $_SERVER['HTTP_HOST'];?>">Accueil</a> »
<a title="Formulaire de recherches" href="http://<?php echo $_SERVER['HTTP_HOST'];?>/recherche.php">Formulaire de recherches</a>
</p>
Puis nous créons un simple formulaire de recherches :
<form class="form" method="post" action="recherche.php">
<label for="requete">Recherche</label>
<input size="50" name="requete" value="<?php if (!empty($_POST["requete"])) { echo stripcslashes(htmlspecialchars($_POST["requete"],ENT_QUOTES)); } ?>" type="text"/>
<input value="Go" name="submit" type="submit"/><br/>
</form>
L'action de recherche à été lancé par internaute, on prépare la requête :
<?php
if(isset($_POST['submit']))
{
    $requete = trim(stripcslashes(htmlspecialchars($_POST['requete'])));
Comme vous l'avez sans doute remarqué, le formulaire de recherches inclue dans quasi toutes les pages contient le terme : "Votre recherche..." et pour éviter une recherche inutile sur ce terme ou sur une requête vide, nous allons effectuer un contrôle :
    if(empty($requete) OR $requete=="Votre recherche..."){
        echo '<div class="erreur">Un mot serait utile pour effectuer une recherche...</div>';
    }
Ce contrôle effectué, nous lançons la requête à la base de données :
    else{
        $query = mysql_query("SELECT id,id_categorie,titre,description,titre_rewrite,date 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)."[[:>:]]' AND valide = 'oui' ORDER BY date DESC")
        or die (mysql_error());
Explication :
Nous demandons que la requête effectue une recherche dans le champ "titre", "description" et "texte" de la table "CONTENU" uniquement dans les articles validés et par ordre décroissant en fonction de la date. Ainsi, les articles plus récents seront mis en avant sur le terme recherché.

Nous comptons ensuite le nombre de résultats trouvés pour l'indiquer à l'internaute et également pour orthographier correctement la phrase qui suit :
        //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ésultats';
            }
            else
            {
                echo ' résultat';
            }
            echo ' pour votre recherche « <b>'.$requete.'</b>" » :<br/>';
On attribue un chiffre pour chaque enregistrement trouvé et on boucle pour afficher la liste des enregistrements trouvés :
            $i = "1";
            while($donnees = mysql_fetch_array($query))
            {
On va chercher les catégories des articles trouvés pour construire les liens et on affiche le ou les résultats :
                //On va chercher le nom de la catégorie
                $nom_categorie = mysql_query("SELECT titre_rewrite FROM CATEGORIES WHERE id='".mysql_real_escape_string($donnees['id_categorie'])."'");
                while($cat = mysql_fetch_array($nom_categorie))
                {
                    echo '<div class="cadre"><big><big>'.$i.'-<a title="'.$donnees['titre'].'" href="http://'.$_SERVER['HTTP_HOST'].'/'.$cat['titre_rewrite'].'/'.sanspointphp($donnees['titre_rewrite']).'">'.$donnees['titre'].'</a></big></big><span class="date">'.convertit_date($donnees['date']).'</span><br/><p>'.$donnees['description'].'</p></div>';
                    $i++;
                }
            }
            //on ferme if($nb_resultats > 1)
        }
Si rien na été trouvé en BD, on informe l'internaute et on referme tout :
        //Si il n'y a rien
        else {
            echo '<div class="erreur">Nous n\'avons trouvé aucun résultats pour votre recherche « '.$requete.' » !</div>';
        }
    }
    //On ferme if(isset($_POST['requete'])
}
?>
Formulaire de recherches du CMS spécial free.fr
Voir/déposer un commentaire (0) | Signaler un problème