Préambule : Mini projet à réaliser en binôme (ou seul) et à présenter lors des TPs (progression). Lors de la dernière séance de TP, vous présenterez votre application finale. Sujet Sur la base du modèle relationnel du TP4 (gestion simplifiée d’une bibliothèque) il s’agit d’écrire une application PHP/MySQL permettant :
L’aspect graphique et esthétique n’est clairement pas le sujet de ce petit projet. La solution demandée respecte un cahier des charges avec des vues pour l’utilisateur. Ces vues respectent les points d’ergonomie suivants :
Le Menu sera visible dans toutes les vues, l’utilisateur ne doit jamais avoir à utiliser le bouton « Retour en arrière » de son navigateur. Dans les Formulaires pour «Insérer, Modifier» des données dans chaque table :
Suppression de données : il n’est pas demandé une confirmation de la suppression sauf si d’autres données seront supprimées en cascade, dans ce cas : Des messages récapitulatifs et de confirmation devront être utilisés à bon escient (voir la description ci dessous pour chaque table).
Affichage : afficher le nombre d’œuvres par auteurs
Ajouter, Modifier : vérifier que le nom est composé de 2 lettres au minimum
Suppression : La suppression de données devra gérer les contraintes de clés étrangères. Par exemple lors de la suppression d’un auteur, votre application devra vérifier que l’auteur en question n’est pas lié à la table ŒUVRE. Si c’est le cas, vous préviendrez l’utilisateur (message avec le nombre d’œuvres de cet auteur dans la base à supprimer) et vous interdirez la suppression.
exemple de vue
Affichage : afficher le nombre de livres empruntés par l’adhérent. On suppose que l’inscription dans la bibliothèque est valable 1 an. Indiquer à l’utilisateur si la date d’inscription à la bibliothèque + 11 mois est supérieur à la date d’aujourd’hui mais inférieur à 12 mois + la date d’inscription. (moins d’un mois du renouvellement : message = “paiement à renouveler”, date d’inscription dépassée : message =“paiement en retard depuis le jj/mm/aaaa”)
Suppression : La suppression de données devra gérer les contraintes de clés étrangères. Par exemple lors de la suppression d’un adhérent, votre application devra vérifier que l’adhérent en question n’est pas lié à la table EMPRUNT. Si c’est le cas, vous préviendrez l’utilisateur (message avec le nombre d’emprunt de cet adhérent dans la base à supprimer). La confirmation de cette action supprimera en cascade tous les enregistrements.
voir les TPs précédents
Les exemplaires sont gérés depuis le lien qui permet de gérer les œuvres
Remarque (réalisation) : dans le lien pour ajouter une œuvre, il faut ajouter l’identifiant de l’œuvre.
Remarque importante : après avoir ajouter, modifier ou supprimer un exemplaire, l’utilisateur reste sur la vue qui affiche les exemplaires de l’œuvre sélectionnée. Remarque (réalisation) : dans la redirection, il faut rajouter le numéro de l’œuvre, exemple d’instruction PHP : header("Location: Exemplaire_show.php?id=".$donnees['noOeuvre']);
header("Location: Exemplaire_show.php?id=".$donnees['noOeuvre']);
C’est une des 2 interfaces les plus importantes : elle doit être très ergonomique (efficace et rapide (peu de clic)).
header("Location: Emprunt_return.php?idAdherent=".$donnees['idAdherent']);
=> date au format jj/mm/aaaa ? Bonus :
Remarque importante : après avoir rendu un exemplaire, l’utilisateur reste sur la vue qui affiche les exemplaires que l’adhérent à empruntés et peut rendre. Remarque (réalisation) : Créer un formulaire par exemplaire à rendre avec comme champ caché l’identifiant de l’adhérent, de l’exemplaire et la date d’emprunt. Dans la redirection, il faut rajouter le numéro de l’adhérent, exemple d’instruction PHP : header("Location: Emprunt_return.php?idAdherent=".$donnees['idAdherent']);
L’utilisateur désire un formulaire pour supprimer des enregistrements de la table EMPRUNT, le plus efficace possible.
le fait de sélectionner un adhérent afficher les emprunts de l’adhérent
le fait de “cliquer” sur le lien “supprimer” des emprunts permet à l’utilisateur de supprimer d’un seul tous les emprunts cochés
un case à cocher permet de sélectionner toutes les cases
<select name="idAdherent" id="idAdherent" onchange="self.location='Emprunt_deleteAll.php?idAdherent='+this.options[this.selectedIndex].value">
<input type="submit" name="validerDeleteAll" id="valider" value="supprimer"> tout sélectionner ? <input type="checkbox" onclick="toggle(this);" /><br /> ..... ..... <script> function toggle(source) { var checkboxes = document.querySelectorAll('input[type="checkbox"]'); for (var i = 0; i < checkboxes.length; i++) { if (checkboxes[i] != source) checkboxes[i].checked = source.checked; } } </script>
Publipostage : vous pouvez utiliser le paquet suivant :
https://swiftmailer.symfony.com/docs/introduction.html