📖CM5 : Présentation de la semaine 2

Planning de la semaine

semaine 2

rappel sur votre base de données:

vous devez avoir 2 tables liées entre elles, avec . Il devra y avoir un champs avec une photo (du produit, du film, du chanteur...) pour chaque enregistrement. De plus il devra y avoir au moins 50 enregistrements sur une des tables et au moins 10 sur la deuxieme.

vous devrez avoir au moins 6 champs (sans compter l'id) dans une de vos tables et dans l'autre au minimum 3 champs (toujours sans compter l'id).

rappelez vous, il vous faut aussi un dossier "images" dans votre dossier racine de votre site pour y stocker toutes vos photos car dans votre base de données vous ne stockez que le nom des fichiers photos.

rappel sur le nommage des pages:

vous devez suivre scrupuleusement le nommage des pages de ces illustrations:

Rappel sur l'éco-conception

une partie de la note sera sur l'éco-conception (css mimifié, js idem, images optimisées...)

Bilan de la premiere semaine (demo en amphi)

vérifiez bien vos nommages de fichiers! et leur accessibilité pour un visiteur extérieur

Finalisation du front office

pour la partie front, il reste à mettre en place la page de réponse au formulaire (reponse_recherche.php). Cette page admet un parametre envoyé depuis le formulaire, ici dans l'exemple c'est le nom d'un auteur mais cela peut etre aussi le prix d'un album (variable $texte passé dans l'URL)

il faut déjà s'assurer dans form_recherche.php que le champs de recherche se nomme bien texte comme demandé ci-dessus (vous pouvez bien sur lui donner un autre nom, mais il faudra être cohérent dans la page reponse_recherche.php pour bien récupérer cette variable)

extrait de form_recherche.php:

...
recherche sur le prix (prix max):
...
 <form action="reponse_recherche.php" method="get">
<input type="text" name="texte">
 <button type="submit" >Afficher les albums correspondants</button>
 </form>
 ...

on vérifie tout de suite que le formulaire envois bien dans l'url notre variable en testant le formulaire:

formulaire avec la valeur 45 de saisie
on vois bien ici que la valeur '45' saisie dans le formulaire apparait bien dans l'url dans la variable 'texte'

maintenant il reste à faire la page reponse_recherche.php. Elle ressemble completement à la page listing.php sauf que l'affichage se limite à la liste des bandes dessinées correspondant au critère saisie dans le formulaire précédent.

il faut déjà en début de fichier (reponse_recherche.php) récupérer dans l'url la valeur du parametre 'texte' (ou un autre nom de variable si vous en avez choisi un autre):

...
$prixmax = $_GET['texte'];
...

il faut maintenant modifier la requete SQL utilisée au départ pour afficher toutes les bandes dessinées pour restreindre le nombre d'albums affichés:

...
<?php
$prixmax = $_GET['texte'];
$mabd = new PDO('mysql:host=localhost;dbname=sae203;charset=UTF8;', 'root', 'root');
$mabd->query('SET NAMES utf8;');
$req = "SELECT * FROM bandes_dessinees 
            INNER JOIN auteurs 
            ON bandes_dessinees._auteur_id = auteurs.auteur_id
            WHERE bd_prix < ". $prixmax ;
$resultat = $mabd->query($req);
foreach ($resultat as $value) {
    echo '<img class="vignette" src="images/'.$value['bd_photo'].'">';
    echo '<h3>'.$value['bd_titre'] . '</h3>';
    echo '<p>tarif: ' . $value['bd_prix'] . ' euro </p>';
    echo '<p class="page">' . $value['bd_nb_pages'] . ' pages </p>';
    echo '<p>Résumé: ' . $value['bd_resume'] . ' </p>';
    echo '<p class="auteur"> de ' . $value['auteur_nom'] . '</p>';
    echo '<hr>';
}
?>
...

vous pouvez tester votre recherche.

variante: si à la place de faire une recherche sur le prix nous le faisions sur le nom de l'auteur

il faut déjà changer un peu le texte dans le formulaire:

...
recherche sur le nom de l'auteur:
...
 <form action="reponse_recherche.php" method="get">
<input type="text" name="texte">
 <button type="submit" >Afficher les albums correspondants</button>
 </form>
 ...

la requete dans la page reponse_recherche sera bien différente. Dans un premier temps, on peut juste changer la requete comme cela:

...
<?php
$nom = $_GET['texte'];
$mabd = new PDO('mysql:host=localhost;dbname=sae203;charset=UTF8;', 'root', 'root');
$mabd->query('SET NAMES utf8;');
$req = "SELECT * FROM bandes_dessinees 
            INNER JOIN auteurs 
            ON bandes_dessinees._auteur_id = auteurs.auteur_id
            WHERE auteur_nom = ". $nom ;
$resultat = $mabd->query($req);
...

si l'on ne fait que ce changement, cela ne marchera pas car le champ auteur_nom est de type CHAR: il faut donc entourer le texte (donc la variable $nom) avec des guillemets (')

il faut donc écrire:

...
$req = "SELECT * FROM bandes_dessinees 
            INNER JOIN auteurs 
            ON bandes_dessinees._auteur_id = auteurs.auteur_id
            WHERE auteur_nom = '" . $nom . "'" ;
...

attention aux enchainements de " et de ' ! (bien comprendre leur sens)

Le resultat est maintenant fonctionnel: on peut faire une recherche sur le nom de l'auteur. Mais il faut taper le nom exact!

Amélioration de la recherche:

Améliorons la recherche en faisant une recherche approximative avec jsute quelques lettre du nom de l'auteur (par exemple si on tape dans la zone de recherche "tib" on doit trouver les albums créés par Bautiburg et Pantino. Pour cela nous allons utiliser en SQL la notion de LIKE (doc)

une requete de recherche avec LIKE peut s'ecrire:

SELECT * FROM table WHERE champs1 LIKE '%toto%' ;

ce qui donnerais pour nous ici:

...
$req = "SELECT * FROM bandes_dessinees 
            INNER JOIN auteurs 
            ON bandes_dessinees._auteur_id = auteurs.auteur_id
            WHERE auteur_nom LIKE '%" . $nom . "%'" ;
...

on peut maintenant tester notre recherche approximative.

Il est bien sur possible de compliquer la recherche en

Rendu fin de deuxieme semaine

voir page des rendus de fin de deuxieme semaine

Dernière mise à jour