🤩TD 09 et 10 : librairie CRUD en PHP (1/2)

Introduction

  • Dans ces séances consacrées au CRUD (Create Read Update Delete), on va créer une librairie de fonctions PHP. Ces fonctions vont nous permettre d'effectuer les opérations sur les données de la base de données. La librairie de fonctions sera à insérer dans toutes les pages de notre projet SAE203 à l'aide de l'instruction require.

  • Pour se connecter à la base de données, on va utiliser le constructeur de la classe PDO, la fonction PDO() qui prend trois paramètres : une chaîne de caractères contenant les données de connexion (adresse IP de l'hôte, port, nom de la (data)base et charset utilisé), le login et le mot de passe utilisateur.

  • Remarque sur la sécurité :

Tous les fichiers que nous allons créer seront situés dans un sous-dossier de votre site nommé admin/. Ce dossier sera protégé par un fichier .htaccessdans lequel on demandera un login et un mot de passe pour accéder à cette partie privée de votre site. En effet, lorsque votre site sera en ligne, seul un administrateur du site doit avoir le droit de modifier les données de vos tables. Cette partie "sécurité" sera traitée dans une autre séance de la SAE203.

  • Remarque sur le dossier des images :

Toutes les images des albums seront dans la suite de cete séance dans un dossier "images/uploads/" dans notre dossier de base de la SAE203. Ce dossier devra, lorsqu'il sera mis en ligne, pouvoir enregistrer les images téléchargées par les utilisateurs. Il faut donc mettre les DROITS D'ÉCRITURE sur ce dossier sur votre VPS et dans votre dossier de travail (si vous êtes en local sous WAMP/MAMP/LAMP). ATTENTION, les droits d'écriture sont à mettre sur le dossier "uploads" seulement, pas sur le dossier "images", ce qui rendrait modifiables TOUTES les images de votre site. Ici, on ne souhaite que pouvoir écrire les images des albums.

  • Remarque sur le rendu final :

Dans ces deux séances, nous ne traiterons QUE la table 1 de votre SAE203, ce sera à VOUS de FAIRE la même chose pour la gestion de la table 2 dans le rendu final ! Votre code écrit PHP pour la gestion de la table 2 sera aussi évalué dans la note finale !

1. Création de secretxyz123.inc.php :

  • Afin de cacher les informations login et mot de passe dans votre code PHP, on va les mettre dans un fichier spécial qui va définir des chaînes à remplacer par d'autres grâce à la fonction define().

  • Dans le dossier principal de votre SAE203, créez un fichier secretxyz123.inc.php.

  • Dans ce fichier, ajoutez les définitions de votre login et de votre mot de passe utilisateur pour la connexion à votre base de données MySQL :

<?php
  // FICHIER DE DÉFINITION de chaînes de remplacement
	
  // Mettez VOTRE LOGIN ci-dessous (2ème paramètre de define)
  define('LUTILISATEUR', 'mmijlandre');
  // Mettez VOTRE MOT DE PASSE ci-dessous (2ème paramètre de define)
  define('LEMOTDEPASSE', 'toto@1234#');

2. Création de la librairie lib_crud.inc.php :

  • Dans le dossier principal de votre SAE203, créez un fichier lib_crud.inc.php.

  • Dans ce fichier, ajoutez les fonctions de connexion et de déconnexion à la base de données MySQL :

3. Test de la librairie lib_crud.inc.php :

  • Afin de tester le fonctionnement de la librairie lib_crud.inc.php, modifiez votre code de la page listing.php pour charger la librairie de fonctions et remplacez votre code de connexion et de déconnexion par les fonctions fournies connexionBD() et deconnexionBD().

  • Puis, placez votre code qui réalise l'affichage dans une fonction afficherCatalogue($mabd) dans lib_crud.inc.php.

  • Le début du code de afficherCatalogue($mabd) devrait ressembler à ceci :

  • Votre code simplifié dans listing.php devrait ressembler à quelque chose comme ça (c'est beaucoup plus court, non ?) :

  • Le résultat affiché devrait ressembler à quelque chose comme ça (évidemment, cet affichage dépend de vos données et de vos styles CSS) :

4. Création de la page admin.php :

  • Dans votre dossier de travail "sae203", vous devez créer un dossier "admin" (qui sera protégé par un .htaccess plus tard).

  • Dans le menu général, le lien "Admin." va pointer vers "admin/admin.php" (la page d'administration des données de votre site).

  • Dans le dossier admin, on va créer un fichier admin.php dans lequel on va mettre le code :

  • Dans le dossier admin, on va créer un fichier table1_gestion.php dans lequel on va mettre le code :

  • Il faut donc créer une fonction afficherListe() dans lib_crud.inc.php qui va afficher une table HTML contenant les informations sur les bandes dessinées :

  • Attention, dans le code ci-dessus, ... n'est pas une instruction PHP valide, c'est juste pour indiquer que ce code est dans . De plus, il faut changer les ??? pour afficher le numéro de la bande dessinée afin de le passer à la page de modification et à la page de suppression.

  • Testez votre code, la page obtenue decrait ressembler à ceci (selon votre CSS évidemment) :

5. Ajout d'une bande dessinée (liste des auteurs) :

  • Pour ajouter un bande dessinée à notre catalogue (pour insérer les données dans MySQL), on va créer un fichier table1_new_form.php dans lequel on va insérer le code suivant :

  • Attention, le formulaire est OBLIGATOIREMENT en méthode POST car on va passer une image à notre site, donc on va utiliser un champ de type file. On précise de plus l'encodage de notre image : multipart/form-data.

  • Pour afficher la liste des auteurs, il faut ajouter dans notre librairie lib_crud.inc.php le code qui va permettre de générer la liste des prénoms et noms des auteurs sous la forme de balises <option> dans une balise HTML <select>.

  • Le code de la fonction afficherAuteursOptions($co) doit ressembler à ceci :

  • Testez votre code, vous devriez avoir quelque chose comme ceci (la liste déroulante contient bien TOUS les prénoms et noms des auteurs) :

6. Ajout d'une bande dessinée (validation) :

  • On va maintenant valider les changements dans la table bandes_dessinees.

  • On va créer le fichier table1_new_valide.php qui va récupérer les informations de la nouvelle BD (avec l'image à télécharger) et qui va insérer les informations dans la table.

  • Le code de la page table1_new_valide.phpest donné ici :

  • Dans ce code, on récupère les informations passées par le formulaire de la page précédente, on vérifie ensuite le type de l'image, on la récupère sur le serveur (VPS ou local) dans le dossier "images/uploads/" (en la renommant en ajoutant la date) et on appelle la fonction ajouterBD() en lui passant les informations nécessaires pour insérer les données dans la table bandes_dessinees.

  • Le code (incomplet) de la fonction ajouterBD() à mettre dans lib_crud.inc.phpest :

  • Il faut remplacer les ??? par le code PHP qui va générer le "INSERT INTO" de façon correcte.

  • Testez votre code jusqu'à avoir la nouvelle bande dessinée qui apparait dans la liste des albums.

7. Un peu de nettoyage :

  • Quand tout fonctionne, vous pouvez "nettoyer" votre code en enlevant TOUS les affichages qui ne servent plus : les requêtes, les print_r(), les var_dump()... Pour cela, mettez-les en commentaires dans tous les fichiers concernés :

Mis à jour