Objectif : créer une interface web minimum pour réaliser les 4 opérations de base sur la table OEUVRE : Create Read Update Delete, on parle de d’un “CRUD”
Tous vos fichiers PHP (fichier avec l’extension “.php”) sont à placer dans un répertoire (voir tp introduction du projet).
<?php
define("hostname","serveurmysql");
define("database","BDD_votreLogin");
define("username","votreLogin");
define("password","votreMotDePasse");
$dsn = 'mysql:dbname='.database.';host='.hostname.';charset=utf8';
$bdd = new PDO($dsn, username, password);
// pour afficher les erreurs
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// pour récupérer le résultat des requêtes SELECT sous forme de tableaux associatifs
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
?>
l'instruction ci dessous teste la connexion ; Si la connexion est correcte, supprimer cette instruction : <br>
<?php
var_dump($bdd);
?>
fichier connexion_bdd.php
rappel : si le résultat sur le navigateur est :
object(PDO)#1 (0) { }
la connexion est correcte.
var_dump
<?php
define("hostname","serveurmysql"); // ou localhost
define("database","BDD_votreLogin");
define("username","votreLogin");
define("password","votreMotDePasse");
$dsn = 'mysql:dbname='.database.';host='.hostname.';charset=utf8';
$bdd = new PDO($dsn, username, password);
// pour afficher les erreurs
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// pour récupérer le résultat des requêtes SELECT sous forme de tableaux associatifs
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
contenu final du fichier connexion_bdd.php
header session_start set_cookie
ne sont plus autorisées si le script retourne quelque chose au navigateur (même un espace en dehors des balises PHP).The closing ?> tag MUST be omitted from files containing only PHP.
Conventions : Nommer vos fichiers de la façon suivante : Table_operation.php
, Table est le nom de la ressource (nom de la classe qui gère une ressource(table) dans un FrameWork), et operation est une des opérations suivantes : add delete edit show (nom des méthodes dans une classe d’un frameWork pour réaliser les opérations de base suivantes Create Read Update Delete : CRUD)
<?php
include("connexion_bdd.php");
touch Auteur_show.php Auteur_add.php Auteur_delete.php Auteur_edit.php
touch Adherent_show.php Adherent_add.php Adherent_delete.php Adherent_edit.php
touch Oeuvre_show.php Oeuvre_add.php Oeuvre_delete.php Oeuvre_edit.php
touch Exemplaire_show.php Exemplaire_add.php Exemplaire_edit.php
touch Emprunt_add.php Emprunt_return.php Emprunt_bilan.php Emprunt_deleteAll.php
exemple de liste de fichiers
Rappels des TPs du semestre 1
Dans la documentation de PDO , on peut lire :
Conclusion :
Chaque script en début de fichier commence par vérifier les données, exécuter les requêtes SQL, créer les variables et tableaux associatifs nécessaires à l’affichage et éventuellement faire une redirection (faire les opérations du contrôleur, avec les accès aux modèles). Puis vient l’envoi d’une réponse au client : affichage de la vue si il n’y a pas redirection sur une autre page.
Conclusion :
Faire tous les traitements avant de répondre au client (navigateur) : Accès à la base de données (lecture ajout modification suppression de données). Vérification des données. Création des variables et tableaux associatifs nécessaires à l’affichage ou éventuellement redirection sur une autre page.
* Vos scripts sont plus facilement réutilisables si vous cherchez à retourner une réponse au navigateur qui n’est pas de l’HTML (données au format JSON XML … pour le traitement d’une requête AJAX ), il suffit de renvoyer le résultat au lieu d’afficher le résultat (charger la vue).
* Les vues sont de plus en plus complexes (css, javascript, framework frontoffice…). Les développeurs séparent la logique de traitement de l’affichage (MVC model view controller).
for i in `ls [AOE]*.php` ;
do
echo $i
cat index.php >> $i;
done
Rappels des TPs du semestre 1 (extrait d’un TP)
<?php
// connexion à la base de données :
// création d'une instance d'un objet PDO de nom $bdd
include("connexion_bdd.php");
// traitement
$commande_SQL ="SELECT * FROM AUTEUR ORDER BY nomAuteur;";
$reponse = $bdd->query($commande_SQL);
$donnees = $reponse->fetchAll();
// affichage de la vue
?>
<?php foreach($donnees as $row): ?>
<?php echo $row['nomAuteur']; ?> <br />
<?php endforeach;?>
exemple de script pour mettre toutes les données de la table OEUVRE dans un tableau associatif
exemple de script pour afficher le tableau associatif qui contient toutes les lignes de la table OEUVRE
exemple de script pour afficher le tableau associatif en traitant le cas ou le tableau associatif est vide
exemple de script pour afficher le tableau associatif avec des liens pour ajouter modifier ou supprimer des enregistrements
La table “OEUVRE” est composée de 4 champs dont la clé primaire est un entier qui s’incrémente automatiquement.
Il n’y a pas de traitement dans un premier temps mais juste l’affichage d’un formulaire
exemple de script pour afficher un formulaire pour ajouter une OEUVRE
<form>
, les attributs action et method doivent être complétés avec attention. Choisir la méthode POST et dans action définir le nom fichier dans lequel on se trouve “Oeuvre_add.php” ,_GET
ou _POST
) du script chargé (le script chargé est défini dans action).
exemple de script pour ajouter une OEUVRE lors de la soumission du formulaire
REMARQUE : Ce script ne traite pas les erreurs et n’utilise pas de liste déroulante. Cependant recopier toutes les valeurs des champs INPUT dans un autre tableau associatif permet de séparer le filtrage (htmlentities) et la vérification de ces données.
Créer un fichier PHP Oeuvre_delete.php avec comme contenu le formulaire ci dessous pour saisir les informations d’une OEUVRE :
exemple de script pour supprimer un enregistrement une OEUVRE
REMARQUE : ce script ne n’utilise pas de formulaire pour demander une confirmation de cette opération (pour ajouter, modifier ou supprimer un enregistrement, il faudrait pour des raisons de sécurité passer par un formulaire dans lequel on place une clé (token) et non un lien, cf cours de S3 en Web). Ajouter une instruction pour signaler une erreur sur l’identifiant passé dans l’URL serait un plus. Lors du projet il est demander de rajouter un script pour vérifier que l’opération peut fonctionner : dans ce cas vérifier qu’il n’existe pas d’exemplaire de cette Oeuvre (voir tp suivant).
$donnees
les champs de l’enregistrement<form>
)$donnees
exemple de code :
exemple de script pour récupérer l’enregistrement à modifier de la table OEUVRE
exemple de script pour afficher un formulaire pour modifier l’enregistrement avec les données du script précédent
exemple de script pour modifier l’enregistrement lors de la soumission du formulaire à placer en début de page
REMARQUE : ce script ne traite pas les erreurs, ne vérifie pas que les données sont correctes et n’utilise pas de liste déroulante pour sélectionner un auteur existant dans la base de données.
Réaliser le CRUD sur les tables AUTEUR et ADHERENT sur le même principe pour pouvoir lire/ajouter/modifier/supprimer des enregistrements avec une interface Web dans ces 2 tables (1 table à la charge de chacun des 2 étudiants du groupe).
8 fichiers à créer :
* Auteur_show.php, Auteur_edit.php, Auteur_delete.php, Auteur_add.php
* Adherent_show.php, Adherent_edit.php, Adherent_delete.php, Adherent_add.php
exemple de vue
exemple de vue
exemple de vue
exemple de vue