TP de PHP - Master GI 2ème année, spécialité PM
Transcription
TP de PHP - Master GI 2ème année, spécialité PM
Master Génie Industriel Spécialités Production-Maintenance et Informatique Industrielle PROGRAMMATION PHP - Travaux pratiques TP1. Formulaires dynamiques Ce TP a pour but de montrer comment créer un formulaire à partir de données issues d'une base, et comment exploiter les saisies de l'utilisateur pour filtrer les données de la base. Dans ce TP, on travaille sur la base etudiants complète, dont le schéma relationnel est donné ci-contre. 1.1. Liste déroulante statique. 1.1.1. Créer le formulaire suivant, nommé liste_annees.php, qui comporte simplement une liste déroulante des années comprises entre 1985 et 1995 (le bouton est inactif pour le moment) : 1.1.2. Modifier le script précédent pour stocker les années dans un tableau $annees[] avant d'afficher le contenu de celui-ci sous forme de liste déroulante. 1.1.3. Modifier le script précédent pour que le tableau $annees[] (donc la liste déroulante) soit rempli d'années aléatoires entre 1985 et 1995. Pour cela, générer un tableau de 15 années aléatoires grâce à la fonction rand(). Que constate-t-on dans la liste ainsi générée ? En vous référant aux pages du manuel PHP relatives aux tableaux, proposer une solution pour résoudre ce problème. 1.2. Liste déroulante dynamique. 1.2.1. Modifier le script précédent en liste_annees_etu.php, pour que le tableau $annees[] (donc la liste déroulante) contienne les différentes années de naissance des étudiants (champ date_naiss de la table etudiants). Ici, l'année sera extraite de la date grâce à la fonction substr(). 1.2.2. Simplifier le script liste_annees_etu.php en utilisant la fonction SQL YEAR(), le mot-clé DISTINCT et la clause ORDER BY. 1.2.3. Faire en sorte que le script liste_annees_etu.php appelle son script de traitement liste_annees_etu_tr.php, qui affiche la liste des étudiants nés l'année choisie dans la liste. Exemple si l'on a choisi 1991 : 1 Master Génie Industriel Spécialités Production-Maintenance et Informatique Industrielle 1.3. Formulaire auto-appelant Au lieu de transmettre les données saisies dans le formulaire à un second script qui les traite, il est possible de les transmettre au script contenant le formulaire lui-même. On dit alors qu'il s'auto-appelle. En l'absence d'attribut action de la balise <form>, c'est d'ailleurs le comportement par défaut. 1.3.1. Modifier le script précédent en liste_annees_etu_auto.php de façon à ce qu'il s'auto-appelle et qu'il affiche le tableau de résultat sous la liste déroulante : Quels problèmes se posent avec ce formulaire et pourquoi ? 1.3.2. Modifier le script précédent pour éviter l'erreur au premier chargement du formulaire, et pour que l'année choisie soit sélectionnée par défaut dans la liste déroulante après rechargement. Questions subsidiaires. 1.3.3. Modifier le script pour que la sélection d'une valeur dans la liste soumette automatiquement la donnée, rendant inutile le bouton de validation Ok. Pour cela, il faut ajouter l'attribut OnChange='javascript:submit();' à la balise <SELECT>. 1.3.4. Afficher aussi le nombre d'étudiants retournés en résultat (cf. fonction mysqli_num_rows()) : 1.3.5. Afficher la table de résultat avec les noms des champs comme en-têtes de colonnes et sans connaître a priori la structure de la table etudiants (cf. fonctions mysqli_field_count() et mysqli_fetch_field_direct()) : 2 Master Génie Industriel Spécialités Production-Maintenance et Informatique Industrielle TP2. Interface web d'une base de données Ce TP a pour but de construire des pages dynamiques complexes, dont le contenu est issu de données d'une base et qui permettent de modifier ces données. On travaille toujours sur la base etudiants. 2.1. Relevé de notes. 2.1.1. En s'inspirant (fortement) du travail réalisé au TP1, écrire un script afficher_etu.php qui affiche une liste déroulante des étudiants présents dans la base, ainsi que les informations de celui que l'utilisateur a choisi : Quelle donnée (champ de table) faut-il que le formulaire s'auto-transmette ? 2.1.2. Écrire un script afficher_notes_etu.php qui affiche une liste déroulante des étudiants ainsi que les notes de l'étudiant choisi : 2.1.3. Modifier le script précédent pour ajouter la moyenne coefficientée au relevé de notes. On fera en sorte d'afficher en rouge une moyenne inférieure à 10, et de traiter le cas des étudiants n'ayant aucune note : 3 Master Génie Industriel Spécialités Production-Maintenance et Informatique Industrielle 2.2. Modification de notes par formulaire web. 2.2.1. Dupliquer le script afficher_notes_etu.php en le renommant modifier_notes_etu.php, puis le modifier en affichant les notes dans des zones de texte qui permettent à l'utilisateur de saisir de nouvelles notes pour l'étudiant choisi : 2.2.2. Écrire le script de traitement (modifier_note_etu_tr.php) du précédent formulaire, qui permet de mettre à jour, pour l'étudiant concerné, les notes des différentes matières avec celles saisies. Au besoin, on complètera aussi modifier_note_etu.php pour rendre ces mises à jour possibles. 2.3. Ajout de notes par formulaire web. 2.3.1. Dupliquer le script afficher_notes_etu.php en le renommant ajouter_notes_etu.php. Modifier ensuite celui-ci pour permettre à l'utilisateur d'ajouter une nouvelle note pour l'étudiant choisi et ce, uniquement si l'étudiant n'a pas encore de notes dans les 5 matières. Les matières dont les notes manquent à l'étudiant doivent apparaître après le relevé de notes sous forme d'une liste déroulante, et la matière choisie dans cette liste est notée au moyen d'une zone de texte : Remarque : la fonction array_diff_assoc() peut être utile ici. 2.3.2. Écrire le script de traitement (ajouter_note_etu_tr.php) du précédent formulaire, qui permet d'ajouter la note saisie pour la matière choisie et l'étudiant concerné. Au besoin, on complètera aussi ajouter_note_etu.php pour rendre cet ajout possible. 4