🍏
SAE203
  • 📖CM1 : Présentation de la SAE
  • 💾CM2 : Introduction à GitHub
  • 🎆TD01 : intégration 1/2
  • 🎆TD02 : intégration 2/2
  • 🎆CM3 : Template et responsive
  • 📔TD03 : Formulaire et traitement
  • 🗓️TD04 : filter_var et filtrage des données des formulaires en PHP
  • 🤝CM4 : Eco-conception & accessibilité
  • 💾TD05 : github
  • 🌳TD06 : Eco-conception & accessibilité
  • 🐛TP01 : réalisation de la page listing.php
  • 🌐TD07 : HEBERGEMENT SITE SAE203
  • 🌐TD08 : Les Clés du DevOps
  • 🏆BILAN des rendus
  • 😇Guide de Dépannage Git
  • **anciennes pages ci-dessous**
  • 🐛ancien TP01 : réalisation de la page listing.php
  • 🗓️ancien TD04 : vérification front
  • 📚ancien TD05 : MYSQL en ligne de commandes
  • *************************
  • 📖CM5 : Présentation de la semaine 2
  • 🤩TD 09 et 10 : librairie CRUD en PHP (1/2)
  • 😎TD 11 et 12 : librairie CRUD en PHP (2/2)
  • 🏍️TP 02 : Recherche : autocomplétion du formulaire + résultats
  • 🔐TD 13: Les secrets du htaccess
  • 🐛TP 03: débugage
  • ✅Bilan des rendus de la 2ieme semaine
Propulsé par GitBook
Sur cette page
  • Planning de la semaine
  • rappel sur votre base de données:
  • rappel sur le nommage des pages:
  • Rappel sur l'éco-conception
  • Bilan de la premiere semaine (demo en amphi)
  • Finalisation du front office
  • Rendu fin de deuxieme semaine
Exporter en PDF

CM5 : Présentation de la semaine 2

Précédent*************************SuivantTD 09 et 10 : librairie CRUD en PHP (1/2)

Dernière mise à jour il y a 3 ans

Planning de la semaine

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:

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:

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

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 ()

voir

📖
doc
page des rendus de fin de deuxieme semaine
semaine 2
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'