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