🏍️TP 02 : Recherche : autocomplétion du formulaire + résultats

Modification du formulaire de recherche pour remplir automatiquement notre liste de proposition d’auteurs et affichage des résultats de recherche

Préambule

Nous avons vu lors du TD04 comment faire une liste de propositions dans le champs de recherche grace à <datalist>. Pour le moment cette liste est écrire à la main, nous avons nous même entré les propositions à donner à l'utilisateur. Nous allons automatiser la création de cette liste à partir des données stockées dans notre base.

Partie 1 : Modification de la page du fomulaire de recherche

Création de la fonction

Création de la fonction de génération des <option> du <datalist> dans notre librairie de fonctions lib_crud.inc.php

...

// Génération de la liste des auteurs dans le formulaire de recherche
function genererDatalistAuteurs($mabd) {
    // on sélectionne le nom et prénom de tous les auteurs de la table auteurs
    $req = "SELECT auteur_nom FROM auteurs";
    try {
        $resultat = $mabd->query($req);
    } catch (PDOException $e) {
        // s'il y a une erreur, on l'affiche
        echo '<p>Erreur : ' . $e->getMessage() . '</p>';
        die();
    }
    // pour chaque auteur, on met son nom <option>
    foreach ($resultat as $value) {
        echo '<option value="'. ??? .'">'; 
    } 
}

Modification du formulaire de recherche

Modifier le code de votre page form_recherche.php afin de générer automatiquement la <datalist> à partir de la BDD

...

<input type="search" id="real" list="auteurs" name="texte" autocomplete="off" />
<datalist id="auteurs">
<?php
    // On va afficher ici la datalist
    require 'lib_crud.inc.php';
    $co=connexionBD();
    genererDatalistAuteurs($co);
    deconnexionBD($co);
?>
</datalist>

Partie 2 : Création de la page des resultats de recherche : reponse_recherche.php

Ecriture de la requête

  1. Ecrivez tout d'abord la requete

  2. Testez-la sur phpMyAdmin

  3. Créez ensuite la fonction qui génère les resultats

Nous allons utiliser l'opérateur like pour filtrer les résultats à afficher

Par exemple :

SELECT * FROM chiens WHERE nom_chiens LIKE 'bu%';

Affichera tous les chiens dont le nom commence par "bu"

Création de la fonction

Création de la fonction d'affichage des resultats de recherche dans notre librairie de fonctions lib_crud.inc.php

// affichage des resultats de recherche
function afficherResultatRecherche($mabd) {
    $req = "SELECT * FROM bandes_dessinees 
            INNER JOIN auteurs 
            ON bandes_dessinees._auteur_id = auteurs.auteur_id
            WHERE ???";
    try {
        $resultat = $mabd->query($req);
    } catch (PDOException $e) {
        // s'il y a une erreur, on l'affiche
        echo '<p>Erreur : ' . $e->getMessage() . '</p>';
        die();
    }
    // ICI VOTRE CODE POUR AFFICHER LES ALBUMS FILTRES
    // ...
    // ...
}

Création de la page de résultats

Votre page reponse_recherche.php et très similaite à listing.php et devrait ressembler à cela :

<h1>Nos albums</h1>
<p>Résultats de votre recherche</p>
<hr />
<?php
    require 'lib_crud.inc.php';
    $co=connexionBD();
    afficherResultatRecherche($co);
    deconnexionBD($co);
?>

Dernière mise à jour