Mise en place du moteur de recherche
0%
100%
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>
Commentaires
Pour déposer un commentaire
Il n'y a pas encore de commentaire sur ce chapitre.