Mise en place du moteur de recherche

Le code terminé

Dans cette partie, nous voyions comment créer dynamiquement une requête SQL qui permettra d'aller chercher un texte dans différents champs de la base de données et d'évaluer un score destiné à classer les résultats.

Et voici le code que nous avons produit :

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Moteur de recherche</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>Moteur de recherche</h1>    

    <form action="index.php" method="post">
        <input type="text" name="recherche" required>
        <button type="submit">Rechercher</button>
    </form>

    <?php
        if (isset($_POST['recherche']) && strlen($_POST['recherche']) > 0) {

            $words = explode(' ', $_POST['recherche']);
            $fields = ['nom','description'];
            
            $scorePart = '0';
            $wherePart = '0';
                                   
            foreach ($words as $index=>$word) {
                $replacements["word$index"] = "%$word%"; // step 4
                foreach ($fields as $field) {
                    $scorePart .= "+($field like :word$index)";
                    $wherePart .= " or $field like :word$index";
                }
            }

            $sql = "select *, sum($scorePart) as score from produits where $wherePart group by id order by score desc";
                    
            $db = new PDO('mysql:host=localhost;dbname=recherche', 'root', 'root');
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            $requete = $db->prepare($sql);
            $requete->execute($replacements);            
            $produits = $requete->fetchAll(PDO::FETCH_ASSOC);
            
            if (count($produits) == 0) {
                echo '<p>Aucun résultat</p>';
            } else {
                echo "<ul>";
                foreach ($produits as $produit) { ?>
                    <li>
                        <div><?php echo $produit['nom'] . ' ' . $produit['prix']; ?>€</div>
                        <div><?php echo $produit['description']; ?></div>
                    </li>
                <?php }
                echo "</ul>";
            }
        }
    ?>
</body>
</html>
CHAPITRE PRECEDENT

Commentaires

Pour déposer un commentaire

Il n'y a pas encore de commentaire sur ce chapitre.