SlideShare une entreprise Scribd logo
Ministère de l’Enseignement Supérieur et de la Recherche Scientifique
Direction Générale des Études Technologiques
Institut Supérieur des Études Technologiques de Kélibia
Département des technologies de l’informatique
Manuel de travaux pratiques
2ème
année licence appliquée en informatique
Préparé par :
Houda TOUKABRI Technologue toukabri.houda@gmail.com
Version 2018
Atelier développement web (PHP)
Pré requis
Avoir les notions de base liées à HTML5 et CSS3
Public concerné
2ème
niveau de licence appliquée en informatique
Objectif général
À l’issue de ces travaux pratiques, l’apprenant serait capable de mettre en place un site
web dynamique en utilisant le langage PHP5 et le système de gestion de base de donnés
MySQL.
Objectifs spécifiques
• Reconnaitre le principe de la programmation web dynamique
• Maîtriser la programmation orientée objet avec PHP5
• Maîtriser le processus de mise en œuvre d’un site web dynamique avec PHP5
• Faire communiquer un site web avec une base de données MySQL à travers le
mécanisme PDO
• Relater l’intérêt de la sécurité des pages web à travers le langage PHP5
Mode d’évaluation
Contrôle continu
Charge horaire
3h par semaine soit 45 heures par semestre
Atelier Développement web (PHP) Liste des TPs
ISET Kélibia : H.TOUKABRI i
Liste des TP
Ce support rassemble tous les TP d’atelier de développement web PHP assuré au cours du
premier semestre de la deuxième année licence appliquée en informatique.
Énoncés...................................................................................................................................... 1
TP N° 1 – Premiers pas en PHP ............................................................................................ 2
TP N° 2 – Syntaxe de base de PHP ....................................................................................... 6
TP N° 3 – Les structures de contrôle..................................................................................... 8
TP N° 4 – Les tableaux........................................................................................................ 11
TP N° 5 – Les fonctions ...................................................................................................... 13
TP N° 6 – Les formulaires................................................................................................... 15
TP N° 7 – Le site gestion des films ..................................................................................... 18
TP N° 8 – Le site de citations interactif .............................................................................. 21
Corrigés................................................................................................................................... 24
Correction TP N° 1 – Premiers pas en PHP ........................................................................ 25
Correction TP N° 2 – Syntaxe de base de PHP................................................................... 27
Correction TP N° 3 – Les structures de contrôle................................................................. 30
Correction TP N° 4 – Les tableaux...................................................................................... 33
Correction TP N° 5 – Les fonctions .................................................................................... 36
Correction TP N° 6 – Les formulaires................................................................................. 40
Correction TP N° 7 – Le site gestion des films................................................................... 49
Correction TP N° 8 – Le site de citations interactif ............................................................ 52
Bibliographie........................................................................................................................... 58
Énoncés
ISET Kélibia : H.TOUKABRI 2
Objectifs
• Installer une plateforme de développement PHP
• Reconnaitre les composants d’une plateforme de développement PHP
• S’initier à la syntaxe de base du langage PHP
L’environnement WAMP
WAMP (acronyme de Windows Apache MySQL PHP) est une plate-forme de développement
Web pour Windows exploitant le serveur Web Apache, le langage de scripts PHP et le SGBD
relationnel MySQL.
Figure 1 : Architecture de WAMP
Les composants mis en interaction dans l’architecture WAMP (Voir Figure 1) sont :
- Apache : Il est à l’écoute des requêtes émises par les navigateurs (qui demandent des
pages web). Il cherche la page demandée et la renvoie au client qu’il l’a réclamée.
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 – DSI/MDW
Durée : 3h
TP N° 1 – Premiers pas en PHP
ISET Kélibia : H.TOUKABRI 3
- MySQL : Son rôle est de stocker les données, sous forme de tables, et de permettre la
manipulation de ces données à travers le langage de requête SQL.
- PhpMyAdmin : C’est une application écrite en PHP permettant la gestion, depuis un
navigateur, des bases de données MySQL. On peut donc manipuler des BDDs et des
tables, modifier et supprimer des champs d’une table, exécuter des requêtes SQL, etc.
Travail demandé
1. Télécharger le logiciel WampServer. La dernière version est disponible sur la page
suivante : http://www.wampserver.com
2. Installer l’application.
Si le programme d’installation indique l’absence d’une DLL, il suffit vérifier l’existence
du package « Visual C++ Redistribuable for Visual Studio ».
3. Le fichier « php.ini » stocke les paramètres de configuration de WampServer. Parmi ces
paramètres, on distingue :
- « upload_max_filesize » : La taille maximale en octets d’un fichier à charger.
- « post_max_size » : Définit la taille maximale des données reçues par la méthode
POST. Cette option affecte également les fichiers chargés. Pour charger de gros
fichiers, cette valeur doit être plus grande que la valeur de « upload_max_filesize ». Si
la limitation de mémoire est activée par le script de configuration, « memory_limit »
affectera également les fichiers chargés. De façon générale, « memory_limit » doit
être plus grand que « post_max_size ».
- « max_execution_time » : Fixe le temps maximal d’exécution d’un script, en
secondes. La configuration par défaut est de 30 secondes. Cette valeur augmente en
fonction de la performance du PC sur lequel WampServer est installé.
Modifier le fichier « php.ini » comme suit :
- « max_execution_time » : augmenter cette valeur de 30 à 300 secondes
- « memory_limit » : augmenter cette valeur de 128M à 180M
- « post_max_size » : augmenter cette valeur de 8M à 120M
ISET Kélibia : H.TOUKABRI 4
- « upload_max_filesize » : augmenter cette valeur de 2M à 100M
Enregistrer puis redémarrer WampServer.
4. Vérifier le fonctionnement de WampServer en tapant l’URL « http://localhost/ » dans un
navigateur. La page par défaut est la page de démarrage de WampServer.
5. Vérifier également le bon fonctionnement de l’application PhpMyAdmin accessible à
travers l’URL « http://localhost/phpmyadmin ». Une nouvelle page va s’ouvrir permettant
de manipuler les bases de données.
6. Tester le script PHP suivant :
<!DOCTYPE html>
<html>
<head>
<title>Premier script PHP</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php
//Ceci est un commentaire PHP
echo "<h3>Mon premier script PHP</h3><br>";
echo "<script type='text/javascript'>alert('Ceci est un code JS lancé par
un script PHP');</script>";
?>
</body>
</html>
Remarque
- La fonction PHP echo permet d’afficher un texte donné.
- Un script PHP doit être enregistré avec l’extension « .php », il peut contenir du code
HTML, CSS et JavaScript.
7. Créer une feuille de style permettant de formater le texte « Mon premier script PHP » en
grand titre coloré.
8. Quel est le rôle du script suivant ?
ISET Kélibia : H.TOUKABRI 5
<!DOCTYPE html>
<html>
<head>
<title>Script PHP</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php
echo "<center><h3>Ceci est un script PHP</h3></center>";
header("Refresh:3;URL=http://www.google.fr/");
?>
</body>
</html>
ISET Kélibia : H.TOUKABRI 6
Objectifs
• Savoir déclarer des variables et des constantes
• Reconnaître l’environnement d’exécution d’un script
• Utiliser les fonctions prédéfinies sur les variables et différencier entre leurs types
Travail demandé
Exercice 1
1. Quel est le résultat fourni par le script suivant :
<!DOCTYPE html>
<html>
<head>
<title>TP2 EX1</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php phpinfo() ?>
</body>
</html>
2. Modifier le script précédent pour qu’il n’affiche que la version du PHP utilisé.
3. Afficher le type du navigateur du client ainsi que son adresse IP.
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
TP N° 2 – Syntaxe de base de PHP
ISET Kélibia : H.TOUKABRI 7
Exercice 2
1. Déclarer une variable « prenom » et faire afficher « Bonjour » suivi de la valeur de cette
variable.
2. Afficher le prénom en majuscule.
3. Afficher le prénom en minuscule.
4. Afficher le nombre de caractères de la variable « prenom ».
Exercice 3
Considérons une variable « $var = "12 m" » de type chaîne. Transformer $var en entier,
double puis de nouveau en chaîne. Réaliser l’affichage après chaque conversion.
Exercice 4
1. Qu’affiche le script suivant ?
<!DOCTYPE html>
<html>
<head>
<title>Script PHP fruits et légumes</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php
var_dump(1 + 2);echo '<br>';
var_dump('1'+'2');echo '<br>';
var_dump(1 . 2) ;echo '<br>';
var_dump('1' . '2') ;echo '<br>';
var_dump("3 fruits" + '1 légume' . ' donnent');echo '<br>';
var_dump("3 fruits" + '1 légume' . ' donnent');echo '<br>';
var_dump(1/2 + true - "-2");echo '<br>';
?>
</body>
</html>
2. Quel est le rôle de la fonction prédéfinie var_dump ?
ISET Kélibia : H.TOUKABRI 8
Objectifs
• Utiliser les structures de contrôle en PHP.
• Utiliser les clauses Break et continue.
Travail demandé
Exercice 1
Écrire un script permettant de :
1. Tirer aléatoirement un nombre entre 1 et 100 et de le stocker dans la variable $age. Pour
cela, on utilise la fonction prédéfinie rand dont la syntaxe est donnée par :
int rand (int $min, int $max).La fonction rand retourne une valeur aléatoire entre $min et
$max.
2. Afficher le contenu de la variable $age.
3. Afficher un message selon les conditions suivantes :
- si l’âge est inférieur à 10, on affiche « enfant »
- si l’âge est compris entre 10 et 19, on affiche « adolescent »
- si l’âge est compris entre 20 et 39, on affiche « jeune »
- si l’âge est compris entre 40 et 59, on affiche « adulte »
- si l’âge est supérieur ou égal à 60, on affiche « vieux »
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
TP N° 3 – Les structures de contrôle
ISET Kélibia : H.TOUKABRI 9
Exercice 2
On se propose de créer un wiki de mots classés par ordre alphabétique. Pour ce faire :
1. Écrire un script PHP permettant d’afficher, dans l’ordre, les lettres de l’alphabet. (les
lettres doivent être séparées par le caractère « | ».
2. Modifier le code pour avoir l’affichage suivant :
Les caractères de l’alphabet situés en haut de la page sont des liens internes vers chaque
bloc commençant par la même lettre. Le lien « haut » permet de revenir en haut de la
page.
Exercice 3
On donne le code suivant :
<?php
$i = 0;
while ( ++$i )
{
echo '----->$i='." $i <br/> ";
for ($j=1;$j<=15;$j++)
{
echo 'boucle for : $j='."$j<br/>";
if (($j==6) || ($j == 8))
{
echo ' à $j = ' . $j . 'ou $j = ' . $j . '<br/> ';
break 1;
}
if (($i==2) && ($j==5))
ISET Kélibia : H.TOUKABRI 10
{
echo 'à $i=' . $i . 'et $j=' . $j . '<br/> ';
break 2;
}
}
}?>
1. Que retourne ce code ?
2. Quel est le rôle des instructions break ?
3. Que se passe-t-il si on modifie, dans la première instruction if, la condition $j==6 par
$j==4 ?
ISET Kélibia : H.TOUKABRI 11
Objectifs
• Déclarer, initialiser et remplir un tableau en PHP.
• Utiliser les fonctions prédéfinies sur les tableaux.
• Distinguer la différence entre un tableau scalaire et un tableau associatif.
Travail demandé
Exercice 1
On se propose de réaliser un tableau $Mois retournant le nombre de jours de chaque mois de
l’année. On considère que le mois de Février ne contient que 28 jours.
1. Créer le tableau $Mois.
2. Créer une table HTML permettant d’afficher pour chaque mois le nombre de jours
correspondant.
3. Donner le titre « table de nombre de jours des mois de l’année » pour la table précédente.
Placer ce titre en bas de la table. Centrer la table et son titre.
Exercice 2
On considère le tableau suivant :
$mails=array("php5@free.com","jean556@yahoo.fr","machine@wanadoo.fr","webmaster@
wanadoo.fr","paul@gmail.fr","macafi@yahoo.fr") ;
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
TP N° 4 – Les tableaux
ISET Kélibia : H.TOUKABRI 12
1. Écrire une boucle permettant le parcours du tableau $mails et l’affichage de la liste des
mails.
2. Modifier la boucle précédente de façon à extraire et afficher les noms des hébergeurs des
adresses mail.
On donne : la fonction array explode (string $delimiter, string $string [, int $limit ])
permet de découper une chaîne selon un délimiteur fournie. La fonction retourne un
tableau des segments découpés.
3. Modifier le code de façon à classer les hébergeurs selon leur fréquence d’apparition dans
le tableau $mails.
On donne :
• bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ]) : permet le tri
d’un tableau selon ses valeurs.
• bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ]) : permet le tri
d’un tableau selon les clés.
• bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ]) : permet le tri
d’un tableau en ordre inverse.
• array array_unique ( array $array [, int $sort_flags = SORT_STRING ]) : permet
d’éliminer les doublons d’un tableau.
Placer les différents hébergeurs dans une table HTML en coloriant l’hébergeur avec la plus
grande fréquence d’apparition et celui ayant la plus basse fréquence d’apparition.
ISET Kélibia : H.TOUKABRI 13
Objectifs
• Déclarer des fonctions en PHP
• Manipuler les fonctions prédéfinies
• Inclure des fichiers en PHP
Travail demandé
Exercice 1
On se propose de manipuler la fonction date qui récupère la date courante. date ('l'), date ('j'),
date ('F') et date ('Y') retournent une chaine de caractères contenant respectivement le jour de
la semaine, le jour du mois, le mois et l’année.
1. Créer une page date.php contenant le titre « Date en temps réel » et un paragraphe
annonçant la date courante.
2. Dans la question précédente, la date est affichée en anglais. Créer des « dictionnaires »
traduisant les jours et les mois de l’anglais au français. (utiliser des tableaux associatifs).
3. En se servant des dictionnaires crées dans la question précédente, écrire un script
permettant d’afficher la date en français.
Exercice 2
On se propose d’afficher la table de multiplication par 5. Pour ce faire, on se basera sur un
programme modulaire utilisant les fonctions.
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
TP N° 5 – Les fonctions
ISET Kélibia : H.TOUKABRI 14
1. Écrire une procédure afficheTab5 permettant l’affichage de la table de multiplication par 5
dans une table HTML.
2. Fractionner le code en trois fichiers debut.php, fin.php et corps.php. Le fichier begin.php
contient l’entête ( <!DOCTYPE html> jusqu’à </head>), le second fichier fin.php contient
la fermeture de </body> et de </html> et le troisième fichier corps.php contient
l’inclusion (include ou require) des deux autres fichiers et la fonction de calcul de la table
de multiplication ainsi que son affichage.
Exercice 3
1. Écrire une fonction ligne prenant en argument un entier $n et un caractère $c, et renvoyant
une chaîne de caractère composées de $n fois le symbole $c.
2. En utilisant la fonction ligne, écrire une fonction pyramide qui prend en entrée un entier
$n, et affiche une pyramide de caractères $c et de hauteur $n.
Exemple
Pour $n=3 et $c='*', on affiche :
*
**
***
Modifier la fonction précédente, de sorte que la pyramide ne soit construite que si l’entier
donné en paramètre est plus petit que 10. Elle renverra un message d’erreur dans le cas
contraire.
ISET Kélibia : H.TOUKABRI 15
Objectifs
• Maitriser l’envoi et la récupération des données à travers les formulaires avec GET,
POST.
• Utiliser le principe de validation des données par des expressions régulières
Travail demandé
Exercice 1
Écrire un formulaire qui demande le nom, le prénom et l’âge de l’utilisateur. Le
bouton « Valider » de ce formulaire provoquera l’affichage d’une page contenant le texte
suivant : « Bienvenu ............., vous avez ..... ans. ».
Le bouton « Réinitialiser » permet de vider la saisie de l’utilisateur en cas d’erreur de saisie.
Le passage des données se fera dans l’URL de la page.
Exemple
Si l’utilisateur saisie les valeurs « Mohamed », « Ben Mohamed » et « 15 ». La page résultat
affiche : Bienvenu Mohamed Ben Mohamed, vous avez 15 ans.
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
TP N° 6 – Les formulaires
ISET Kélibia : H.TOUKABRI 16
Exercice 2
Écrire le code PHP de la page Web suivante :
Après avoir cliqué sur le bouton valider on affiche le message :
• « Accès autorisé » si nom=admin Et Mot de passe= phpmyadmin.
• « Accès interdit » dans le cas contraire.
Exercice 3
Écrire un formulaire « Calculatrice » composé de deux champs pour la saisie des opérandes,
une liste déroulante pour le choix de l’opération : somme (+), soustraction (-), division (/) et
multiplication (*). On affichera, ensuite, le résultat du calcul.
Le passage des données se fera dans l’URL de la page.
Exercice 4
Reprendre l’exercice 2 en considérant les conditions suivantes :
• Le nom de l’utilisateur permis est : admin
• On ne validera que les mots de passe de 4 à 10 caractères et contenant des caractères
alphanumériques, le signe moins ou tiret-bas (_).
ISET Kélibia : H.TOUKABRI 17
Exercice 5
On se propose de créer un formulaire de contact avec les champs : CIN, Nom, prénom, date
de naissance, adresse et code postal.
Effectuer le contrôle de saisie et la validation des données saisies. On considère que seuls le
CIN, le nom, le prénom et le code postal sont des champs obligatoires.
ISET Kélibia : H.TOUKABRI 18
Objectifs
• Utiliser l’outil phpMyAdmin pour la création d’une base de données, la manipulation
des tables et l’insertion des données.
• Accéder à une base de données à travers PDO.
Travail demandé
On se propose de créer une base de données gérant une liste de films avec l’année de sortie ou
de réalisation ainsi que le genre du film. Le nom donné à cette base sera AMDB.
Le système de gestion de base de données est mySQL et PDO sera utilisé pour communiquer
avec la base en PHP.
Schéma de la base AMDB
Un film a un seul nom, une seule année de sortie, et peut avoir un ou plusieurs genres. Trois
tables seront utilisés : une comportant le nom des films, une autre les années et une troisième
les genres.
La table année pourra servir à d’autres relations avec d’autres tableaux dans le cas d’une
extension de la base. Il faudra créer une quatrième table pour les relations multiples entre les
films et les genres (Tab_Film_Genre).
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 6h
TP N° 7 – Le site gestion des films
ISET Kélibia : H.TOUKABRI 19
Utilisation de l’outil phpmyadmin pour la création des bases de données
1. Démarrer l’outil phpmyadmin. Utiliser l’url http://127.0.0.1/phpmyadmin/
2. Créer la base de données AMDB. Il suffit de se rendre à l’onglet « bases de données »,
saisir le nom « AMDB » et cliquer sur créer.
3. À gauche de l’écran, double cliquer sur le nom de la base de données « AMDB ». Puis,
créer la table « TabGenre ». Le nombre de colonnes de cette table est 2 (idGenre : INT,
genre : VARCHAR(40)). Noter que le champ « idGenre » est une clé primaire.
4. Procéder de la même façon pour créer les tables suivantes :
TabAnnee (idAnnee : serial, annee : INT). idannee est une clé primaire.
TabFilm (idFilm : serial, titre : VARCHAR(40), anneeSortie : INT). anneeSortie est une
clé étrangère qui pointe sur la table TabAnnee. idFilm est une clé primaire.
Pour définir une clé étrangère, il suffit de le désigner comme index et cliquer sur « vue
relationnelle » pour ajouter le lien avec la table en question.
5. Créer la table « Tab_Film_Genre » tel que :
Tab_Film_Genre (cleFG : serial, film, genre). Les champs « film » et « genre »
représentent des clés étrangères sur les tables « TabFilm » et « TabGenre ».
6. Ajouter à la table « TabGenre » les genres comédie, drame, policier, horreur, aventure,
histoire et fiction. (Le champ « idGenre » n’est pas de type serial !).
7. Ajouter à la table « TabAnnee » les années de 2000 à 2005.
ISET Kélibia : H.TOUKABRI 20
8. Exécuter les requêtes suivantes sur la table « TabFilm » :
INSERT INTO TabFilm(titre, anneeSortie) VALUES ( 'Men ', 2);
INSERT INTO TabFilm(titre, anneeSortie) VALUES ('Forge', 3);
INSERT INTO TabFilm(titre, anneeSortie) VALUES ( 'Star', 4);
INSERT INTO TabFilm(titre, anneeSortie) VALUES ( 'histoire', 5);
INSERT INTO TabFilm(titre, anneeSortie) VALUES ( 'Soleil' , 1);
9. Exécuter les requêtes suivantes sur la table « Tab_Film_Genre » :
INSERT INTO Tab_Film_Genre(film, genre) VALUES ( 4,2);
INSERT INTO Tab_Film_Genre(film, genre) VALUES ( 1,1);
INSERT INTO Tab_Film_Genre(film, genre) VALUES ( 3,4);
INSERT INTO Tab_Film_Genre(film, genre) VALUES ( 2,3);
10. Afficher le contenu des différentes tables de la base « AMDB ».
Accès à travers PDO
1. Écrire un script PHP qui se connecte à la base de données « AMDB ». Le script doit être
sauvegardé dans un fichier « connexion.php ».
2. Créer un formulaire permettant l’affichage de la liste des films par année de sortie. Utiliser
le principe des requêtes préparées pour l’accès et l’exécution en utilisant PDO. Le
formulaire doit être stocké dans une page « listeFilmsParAS.php ».
Noter que la liste des années de sortie contenues dans le formulaire « listeFilmsParAS.php »
est alimentée à partir de la base de données.
ISET Kélibia : H.TOUKABRI 21
Objectifs
• Créer une base de données mySQL à partir d’une description textuelle du modèle
conceptuelle.
• Créer un site web qui réalise la communication avec une base de données mySQL.
Travail demandé
Le projet à mettre en place consiste à créer un dictionnaire de citations littéraires interactif en
ligne. Chaque visiteur peut enrichir le contenu avec ses citations préférées, qui sont ensuite
rendues accessibles à tous. Le concept du site se rapproche de celui d’un forum puisque les
données ne sont pas figées.
Le site communique avec la base de données « dico » réalisé en utilisant le système de gestion
de base de données mySQL.
Création de la base dico
La base de données « dico » est composée de deux tables : auteur et citation. Un auteur est
défini par son identifiant unique, son nom, son prénom et le siècle auquel il appartient. Une
citation est définie par un identifiant unique et son texte.
Il est à noter qu’un auteur peut avoir écrit plusieurs citations mais une citation ne peut être
l’œuvre que d’un seul auteur.
1. Créer les deux tables auteur et citation.
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 6h
TP N° 8 – Le site de citations interactif
ISET Kélibia : H.TOUKABRI 22
2. Etablir les contraintes d’intégrité liées à la base « dico ».
Mise en place de l’interface
1. Pour se connecter à la base « dico », créer le fichier « connexion.inc.php ».
Pour créer une unité dans le site, chaque page doit incorporer les mêmes entêtes et pied de
page. L’interface comprend trois pages, la page d’accueil, la page d’affichage des résultats et
la page d’insertion.
On donne le contenu du fichier « entete.html » contenant l’entête commun à toutes les pages :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Dictionnaire de citations interactif</title>
<style type="text/css">
h1 {font-size: 50px;margin: 0px;text-align: center;}
</style>
</head>
<body>
<div style="border-bottom-width: 4px;border-bottom-color: red;border-
bottom-style: groove;"></div>
<h1><img src="images/plume.png" alt="Citations
littéraires"/>Dictionnaire de citations interactif</h1>
</body>
</html>
La page « index.php » constitue la page d’accueil du site. Elle se compose d’un bandeau
contenant la citation du jour (un tirage au sort à partir de la base de données), d’un formulaire
de recherche et d’un lien vers la page d’insertion de nouvelles citations. Le formulaire de
recherche est composé des champs suivants :
• Une zone de texte dans laquelle le visiteur saisit un mot clef pour rechercher une
citation.
• Une liste de sélection construite dynamiquement à partir de la base à partir de laquelle
on effectue une recherche en choisissant un auteur.
• Une deuxième liste de sélection sauvegardant le siècle des citations du 16ème
au 21ème
.
ISET Kélibia : H.TOUKABRI 23
• Deux boutons radios indiquant si le tri du résultat est par auteur ou par siècle.
Etant donné qu’aucun critère de recherche n’est indispensable, chaque choix doit avoir une
valeur par défaut consistant à afficher toutes les citations disponibles dans la base.
2. Créer la page « index.php ».
La page d’affichage des résultats contient les éléments suivants :
− Script gérant les saisies du formulaire. Ce script construit la requête SQL
dynamiquement en fonction des choix opérés par le visiteur dans la page de recherche
et gère l’absence de mot-clé et de choix dans les listes de sélection afin de ne pas créer
de blocage du fait d’une requête mal construite.
− Résultats de la recherche effectuée par un visiteur. Chaque citation est présentée dans
une cellule d’une table HTML et est suivie du nom de l’auteur et de son siècle. Le tri
des citations se fait par siècle ou par nom d’auteur selon le choix fait par le visiteur.
− Lien vers la page d’accueil.
− Lien vers la page d’insertion.
3. Créer la page « afficheCitation.php ».
La page d’insertion comprend les éléments suivants :
− Formulaire contenant deux zones de saisie de texte pour le nom et le prénom de
l’auteur, une liste de sélection du siècle, une zone de saisie multi ligne pour le texte de
la citation, ainsi que les boutons de réinitialisation et d’envoi.
− Script de traitement des données situé dans le fichier lui-même, devant vérifier si
l’auteur existe déjà dans la base puis insérer les données et afficher un avis d’insertion
pour le visiteur.
− Lien vers la page d’accueil.
4. Créer la page « saisieCitation.php ».
Corrigés
ISET Kélibia : H.TOUKABRI 25
Le TP consiste à installer, configurer et tester « wampServer ». (Questions de 1 à 6).
7. Il est demandé d’écrire une feuille de style et de l’intégrer dans un fichier PHP.
La feuille de style est donnée par :
/*La balise h3 sera écrite en bleu*/
h3{
fontsize: large;
color : aqua;
}
Le fichier PHP correspondant est donné par :
<!DOCTYPE html>
<html>
<head>
<title>Premier script PHP</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole ¤ (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<?php
//Ceci est un commentaire PHP
echo "<h3>Mon premier script PHP</h3><br>";
echo "<script type='text/javascript'>alert('Ceci est un code JS lancé par
un script PHP');</script>";
?>
</body>
</html>
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
Correction TP N° 1 – Premiers pas en PHP
ISET Kélibia : H.TOUKABRI 26
8. Le rôle du script est de faire une redirection l’URL http://www.google.fr/ au bout de 3
secondes.
ISET Kélibia : H.TOUKABRI 27
Exercice 1
1. Le script permet d’afficher des informations sur la configuration courante de PHP :
options de compilation, extensions, version, informations sur le serveur, et
l’environnement (lorsqu’il est compilé comme module), environnement PHP,
informations sur le système, chemins, valeurs générales et locales de configuration, en-
têtes HTTP et la licence PHP. En effet, phpinfo() est un outil de débogage qui sert
généralement à vérifier la configuration ainsi que les variables prédéfinies, pour une plate-
forme donnée.
2. La version du PHP utilisé est déterminée par la constante prédéfinie « PHP_VERSION »
<!DOCTYPE html>
<html>
<head>
<title>TP2 EX1</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php echo "La version du PHP exploité est " . PHP_VERSION ?>
</body>
</html>
3. On utilisera les variables d’environnement $_SERVER['HTTP_USER_AGENT'] et
$_SERVER["REMOTE_ADDR"]
<!DOCTYPE html>
<html>
<head>
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
Correction TP N° 2 – Syntaxe de base de PHP
ISET Kélibia : H.TOUKABRI 28
<title>TP2 EX1</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php echo "Le type du navigateur du client est --> " .
$_SERVER['HTTP_USER_AGENT'] . " <br>"?>
<?php echo "L'adresse IP est --> " . $_SERVER["REMOTE_ADDR"] . " <br>"?>
</body>
</html>
Exercice 2
<!DOCTYPE html>
<html>
<head>
<title>TP2 EX2</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php $prenom = "Houda";
define ("salut","Bonjour");
echo salut . " " . $prenom . " <br>";
echo "Affichage du prénom en majuscule : " . strtoupper ($prenom) . "
<br>";
echo "Affichage du prénom en minuscule : " . strtolower ($prenom) . "
<br>";
echo "Votre prénom contient : " . strlen ($prenom) . " caractères <br>";
?>
</body>
</html>
Exercice 3
<!DOCTYPE html>
<html>
<head>
<title>TP2 EX3</title>
ISET Kélibia : H.TOUKABRI 29
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php
$var = "12m";
echo '$var est égale à ' . $var . " (" . gettype ($var) . ") <br>";
settype ($var, "integer");
echo '$var est de égale à ' . $var . " (" .gettype ($var) . ") <br>";
settype ($var, "double");
echo '$var est de égale à ' . $var . " (" .gettype ($var) . ") <br>";
settype ($var, "string");
echo '$var est de égale à ' . $var . " (" .gettype ($var) . ") <br>";
?>
</body>
</html>
Exercice 4
1. L’exécution du script donne l’affichage suivant :
C:wampwwwfruits&legumes.php:10:int 3
C:wampwwwfruits&legumes.php:11:int 3
C:wampwwwfruits&legumes.php:12:string '12' (length=2)
C:wampwwwfruits&legumes.php:13:string '12' (length=2)
C:wampwwwfruits&legumes.php:14:string '4 donnent' (length=9)
C:wampwwwfruits&legumes.php:15:string '4 donnent' (length=9)
C:wampwwwfruits&legumes.php:16:float 3.5
2. La fonction prédéfinie var_dump permet d’afficher les informations structurées d'une
variable, y compris son type et sa valeur.
ISET Kélibia : H.TOUKABRI 30
Exercice 1
<?php
$age = rand(1,100);
echo 'la valeur de $age est : ' . $age;
echo "</br>";
switch ($age):
case $age < 10 : echo "enfant";break;
case $age >= 10 && $age <= 19: echo "adolescent";break;
case $age >= 20 && $age <= 39: echo "jeune";break;
case $age >= 40 && $age <= 59: echo "adulte";break;
case $age >= 60: echo "vieux";break;
endswitch;
?>
Exercice 2
1. Lettres séparées de « | »
<?php
for ($var=65;$var<=90;$var++){
echo chr($var);
if ($var != 'Z') echo ' | ';
}?>
2. Pour avoir l’affichage avec des liens internes
<?php
echo "<table><tr>";
for ($var=65;$var<=90;$var++){
echo "<td id="haut" ><a href="#" . "" . chr($var) ."">" . chr($var)
. "</a></td>";
}
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
Correction TP N° 3 – Les structures de contrôle
ISET Kélibia : H.TOUKABRI 31
echo "</tr></table>";
echo "<br/>";
for ($var=65;$var<=90;$var++){
echo "<div id="" . chr($var) . "">" . chr($var) . "</div>";
//Boucle pour alimenter le wiki par du texte pour vérifier le
fonctionnement des liens internes
echo "<p>";
for($i=0;$i<100;$i++){
echo "Texte ";
}
echo "</p>";
//Lien pour revenir en haut de la page
echo "</br><p><a href="#haut"> Haut </a></p>";
}?>
Exercice 3
1. L’effet des instructions break est donné par :
<?php
$i = 0;
while ( ++$i )
{
echo '----->$i='." $i <br/> ";
for ($j=1;$j<=15;$j++)
{
echo 'boucle for : $j='."$j<br/>";
if (($j==6) || ($j == 8))
{
echo ' à $j = ' . $j . 'ou $j = ' . $j . ' on sort
de la boucle for<br/> ';
break 1; /* Ne sort que de la boucle for. */
}
if (($i==2) && ($j==5))
{
echo 'à $i=' . $i . 'et $j=' . $j . ' on sort
du while et tout s arrête<br/> ';
break 2; /* On sort du for et du while */
}
}
}
?>
Le résultat retourné par le code est donné par :
ISET Kélibia : H.TOUKABRI 32
----->$i= 1
boucle for : $j=1
boucle for : $j=2
boucle for : $j=3
boucle for : $j=4
boucle for : $j=5
boucle for : $j=6
à $j = 6 ou $j = 8
----->$i= 2
boucle for : $j=1
boucle for : $j=2
boucle for : $j=3
boucle for : $j=4
boucle for : $j=5
à $i=2 et $j=5
Si on modifie $j==6 par $j==4, on aura une boucle infinie. En effet, pour $j=4, on n’atteindra
jamais la condition if (($i==2) && ($j==5)) car on va sortir de la boucle intérieur à chaque
fois que $j atteint la valeur 4. D’où, le programme ne va pas s’arrêter.
ISET Kélibia : H.TOUKABRI 33
Exercice 1
1. Création du tableau $Mois
$Mois = array (
"Janvier" => 31,
"Février" => 28,
"Mars" => 31,
"Avril" => 30,
"Mai" => 31,
"Juin" => 30,
"Juillet" => 31,
"Aout" => 31,
"Septembre" => 30,
"Octobre" => 31,
"Novembre" => 30,
"Décembre" => 31
);
2. Création de la table HTML
echo "<table border=1 ><tr align="center">";
echo "<td bgcolor="pink"> Mois </td>";
foreach ($Mois as $cle => $valeur)
echo "<td>" . $cle . "</td>";
echo "</tr>";
echo "<tr align="center">";
echo "<td bgcolor="pink"> Jours </td>";
foreach ($Mois as $cle => $valeur)
echo "<td>" . $valeur . "</td>";
echo "</tr></table>";
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
Correction TP N° 4 – Les tableaux
ISET Kélibia : H.TOUKABRI 34
3. Réglage de l’affichage
<?php
$Mois = array (
"Janvier" => 31,
"Février" => 28,
"Mars" => 31,
"Avril" => 30,
"Mai" => 31,
"Juin" => 30,
"Juillet" => 31,
"Aout" => 31,
"Septembre" => 30,
"Octobre" => 31,
"Novembre" => 30,
"Décembre" => 31
);
echo "Affichage du tableau des mois </br>";
echo "<center><table border=1 ><tr align="center">";
echo "<td bgcolor="pink"> Mois </td>";
foreach ($Mois as $cle => $valeur)
echo "<td>" . $cle . "</td>";
echo "</tr>";
echo "<tr align="center">";
echo "<td bgcolor="pink"> Jours </td>";
foreach ($Mois as $cle => $valeur)
echo "<td>" . $valeur . "</td>";
echo "</tr></table>";
echo "<caption>table de nombre de jours des mois de
l'année</caption></center>";
?>
Exercice 2
1. Parcours du tableau et affichage de la liste des mails
for($i=0;$i<count($mails);$i++)
echo $mails[$i] , "</br>";
2. Extraction des noms des hébergeurs des adresses mails
echo "<h2>Affichage de la liste des mails</h2>";
for($i=0;$i<count($mails);$i++)
{
//chaque adresse mail est sous forme nom@hebergeur.domaine
echo $mails[$i] , "</br>";
ISET Kélibia : H.TOUKABRI 35
//extraction de la partie située après @
$tab[$i]=explode("@",$mails[$i]);
//extraction de la partie avant le .
$hebergeurs[$i]=explode(".",$tab[$i][1])[0];
}
echo "<h2>Affichage des noms des hébergeurs</h2>";
for($i=0;$i<count($hebergeurs);$i++)
echo $hebergeurs[$i] . "</br>";
3. Classement selon fréquence d’apparition
echo "<h2>Classement des hébergeurs selon fréquence d'apparition</h2>";
//Création d'un tableau stockant les hébergeurs avec leurs fréquences
d'apparition
$freq=array();
for($i=0;$i<count($hebergeurs);$i++)
if(array_key_exists($hebergeurs[$i],$freq))
$freq[$hebergeurs[$i]]++;
else
$freq[$hebergeurs[$i]] = 1;
//Tri du tableau des fréquences
arsort($freq);
4. Placement des hébergeurs dans une table et coloriage
//Affichage du tableau de fréquence
echo "<table border=1 >";
$cpt = 0;
foreach($freq as $cle => $valeur)
{ if($cpt == 0)
echo "<tr bgcolor="red"><td>" . $cle . "</td></tr>";
if($cpt == count($freq)-1)
echo "<tr bgcolor="aqua"><td>" . $cle . "</td></tr>";
else
echo "<tr><td>" . $cle . "</td></tr>";
$cpt++;
}
echo "</table>";
-
ISET Kélibia : H.TOUKABRI 36
Exercice 1
1. Création de la page date.php
<!DOCTYPE html>
<html>
<head>
<title>Date en temps réel</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php
echo '<p> La date courante est : '. date('l') . ' ' . date('j') . ' ' .
date('F') . ' ' . date('Y') .'</p>';
?>
</body>
</html>
2. Création de dictionnaires de traduction
$jours_Semaine = array (
"Monday" => 'Lundi',
"Tuesday" => 'Mardi',
"Wednesday" => 'Mercredi',
"Thursday" => 'Jeudi',
"Friday" => 'Vendredi',
"Saturday" => 'Samedi',
"Sunday" => 'Dimanche'
);
$Mois = array (
"January" => 'Janvier',
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
Correction TP N° 5 – Les fonctions
-
ISET Kélibia : H.TOUKABRI 37
"February" => 'Février',
"March" => 'Mars',
"April" => 'Avril',
"May" => 'Mai',
"June" => 'Juin',
"July" => 'Juillet',
"August" => 'Aout',
"September" => 'Septembre',
"October" => 'Octobre',
"November" => 'Novembre',
"December" => 'Décembre'
);
3. Affichage de la date en français
echo '<p> La date courante est : '. $jours_Semaine[date('l')] . ' ' .
date('j') . ' ' . $Mois[date('F')] . ' ' . date('Y') .' (Affichage en
français)</p>';
Exercice 2
1. Procédure afficheTab5
function afficheTab5(){
echo '<table border="1">';
for($i=0;$i<10;$i++){
echo '<tr>';
echo "<td>$i*5</td><td>". $i*5 ."</td>";
echo'</tr>';
}
echo '</table>';
}
2. Le fichier debut.php doit être inclut en utilisant require car sans ce fichier le programme
n’aboutit pas. Le contenu de debut.php est donné par :
<!DOCTYPE html>
<html>
<head>
<title> Multiplication par 5</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
-
ISET Kélibia : H.TOUKABRI 38
Le fichier fin.php doit être inclut en utilisant require car sans ce fichier le programme
n’aboutit pas. Le contenu de fin.php est donné par :
</body>
</html>
Le fichier corps.php réalise le calcul de la table de multiplication par 5 ainsi que l’inclusion
des fichiers debut.php et fin.php. Son contenu est donné par :
<?php
require 'debut.php';
?>
<body>
<?php
echo '<h1> Affichage de la table de multiplication par 5 </h1>';
function afficheTab5(){
echo '<table border="1">';
for($i=0;$i<10;$i++){
echo '<tr>';
echo "<td>$i*5</td><td>". $i*5 ."</td>";
echo'</tr>';
}
echo '</table>';
}
afficheTab5();
?>
<?php
require 'fin.php';
?>
Exercice 3
1. La fonction ligne est donnée par :
<?php
function ligne ($c,$n){
$l = '';
for($cpt=0;$cpt<$n;$cpt++)
$l .= $c;
return $l;
}?>
2. La fonction pyramide est donnée par :
-
ISET Kélibia : H.TOUKABRI 39
<?php
function pyramide ($c,$n){
$p = '';
for($cpt=0;$cpt<$n;$cpt++){
$p .= ligne ($c,$cpt+1);
$p .= "</br>";
}
return $p;
}?>
3. La fonction pyramide modifiée :
<?php
function pyramide ($c,$n){
//Si $n < 10, la pyramide est construite
if($n < 10){
$p = '';
for($cpt=0;$cpt<$n;$cpt++){
$p .= ligne ($c,$cpt+1);
$p .= "</br>";
}
return $p;
}
else
//Si $n > 10, on retourne un message d'erreur
return "Impossible de construire la pyramide pour $n = $n";
}?>
ISET Kélibia : H.TOUKABRI 40
Exercice 1
Le formulaire (de type GET car il s’agit de passage de paramètres à travers l’URL) peut être
écrit dans une page HTML qui appelle une page PHP pour l’affichage des données saisies. On
donne le code de la page « ex1.html »
<!DOCTYPE html>
<html>
<head>
<title>TP6_ex1</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<form METHOD="GET" ACTION="http://127.0.0.1/TD5/ex1.php">
<table>
<TR>
<TD ALIGN="left">Donner votre nom</TD>
<TD><INPUT NAME="nom"> </TD>
</TR>
<TR>
<TD ALIGN="left">Donner votre prénom</TD>
<TD><INPUT NAME="prenom"></TD>
</TR>
<TR>
<TD ALIGN="left">Donner votre âge</TD>
<TD><INPUT NAME="age"></TD>
</TR>
<TR>
<TD ALIGN="center" COLSPAN="2">
<INPUT TYPE="submit" VALUE="Valider">
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 3h
Correction TP N° 6 – Les formulaires
ISET Kélibia : H.TOUKABRI 41
<INPUT TYPE="reset" VALUE="Réinitialiser"></TD>
</TR>
</table>
</form>
</body>
</html>
La page « ex1.php » est donnée par :
<!DOCTYPE html>
<html>
<head>
<title>TP6_ex1_PHP</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php
//La fonction extract permet de créer les variables issus du tableau
$_GET
extract($_GET);
//Affichage du contenu des variables envoyées par la page ex1.html
echo "Bonjour " . $prenom . " " . $nom . ", vous avez " . $age . "
ans.</br>";
?>
</body>
</html>
Exercice 2
Le formulaire (de type POST car il s’agit d’envoi de paramètres de connexion) peut être écrit
dans une page HTML qui appelle une page PHP pour l’affichage des données saisies. On
donne le code de la page « ex2.html »
<!DOCTYPE html>
<html>
<head>
<title>TP6_ex2</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
ISET Kélibia : H.TOUKABRI 42
</head>
<body>
<form NAME="Calculatrice" METHOD="POST"
ACTION="http://127.0.0.1/TP6/ex2.php">
<center>
<p>
<fieldset>
<legend>Paramètres d'accès</legend>
<label for="login" align= "left" >Nom de l'utilisateur</label>
<input type="text" name="login" align= "left" required />
</br>
</br>
<label for="mdp" align= "left" >Mot de passe</label>
<input type="password" name="mdp" align= "left" required />
</fieldset>
</br>
<INPUT TYPE="submit" VALUE="Valider">
<INPUT TYPE="reset" VALUE="Réinitialiser">
</p>
<!--<table>
<TR>
<TD ALIGN="left">Nom de l'utilisateur</TD>
<TD><INPUT type="text" NAME="login" required></TD>
</TR>
<TR>
<TD ALIGN="left">Mot de passe</TD>
<TD><INPUT type="password" NAME="mdp" required></TD>
</TR>
<TR>
<TD ALIGN="center" COLSPAN="2">
<INPUT TYPE="submit" VALUE="Valider">
<INPUT TYPE="reset" VALUE="Réinitialiser"></TD>
</TR>
</table>-->
</center>
</form>
</body>
</html>
La page « ex2.php » est donnée par :
<!DOCTYPE html>
<html>
ISET Kélibia : H.TOUKABRI 43
<head>
<title>TP6_ex2_PHP</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php
//La fonction extract permet de créer les variables issus du tableau
$_POST
extract($_POST);
if (($login == "") || ($mdp == ""))
echo "Accès interdit : Les deux champs doivent être rensignés !!!";
if(($login != "admin") && ($mdp != "phpmyadmin"))
echo "Accès interdit : les paramètres que vous avez fournis sont
erronnés !!!";
else
echo "Accès autorisé";
?>
</body>
</html>
Exercice 3
Le formulaire peut être écrit dans une page HTML qui appelle une page PHP pour l’affichage
des données saisies. On donne le code de la page « ex3.html »
<!DOCTYPE html>
<html>
<head>
<title>TP6_ex3</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<form NAME="Calculatrice" METHOD="GET"
ACTION="http://127.0.0.1/TP6/ex3.php">
<center>
<table>
<TR>
<TD ALIGN="left">Donner le premier opérande</TD>
<TD><INPUT type="number" NAME="op1" required></TD>
ISET Kélibia : H.TOUKABRI 44
</TR>
<TR>
<TD ALIGN="left">Donner le deuxième opérande</TD>
<TD><INPUT type="number" NAME="op2" required></TD>
</TR>
<TR>
<TD ALIGN="left">Sélectionner l'opération à réaliser</TD>
<TD>
<SELECT NAME="symbol" required>
<OPTION VALUE=""></OPTION>
<OPTION VALUE="+">Addition</OPTION>
<OPTION VALUE="-">Soustraction</OPTION>
<OPTION VALUE="*">Multiplication</OPTION>
<OPTION VALUE="/">Division</OPTION>
</SELECT>
</TD>
</TR>
<TR>
<TD ALIGN="center" COLSPAN="2">
<INPUT TYPE="submit" VALUE="Calculer">
<INPUT TYPE="reset" VALUE="Réinitialiser"></TD>
</TR>
</table>
</center>
</form>
</body>
</html>
La page « ex3.php » est donnée par :
<!DOCTYPE html>
<html>
<head>
<title>TP6_ex3_PHP</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php
//La fonction extract permet de créer les variables issus du tableau
$_GET
extract($_GET);
//Tableau de conversion symbol nom opération
$tab = array (
ISET Kélibia : H.TOUKABRI 45
"+" => "addition",
"-" => "soustraction",
"*" => "multiplication",
"/" => "division"
);
//Calcul et affichage du résultat
switch($symbol){
case '+':$res = $op1 + $op2;break;
case '-':$res = $op1 - $op2;break;
case '*':$res = $op1 * $op2;break;
case '/':if($op2!=0) $res = $op1 / $op2; else echo "Division impossible,
vous avez spécifier un diviseur nul !!! </br>";break;
default: echo "Vous n'avez pas spécifiez une opération pour réaliser le
calcul !!!";
}
if(isset($res))
echo "Le résultat de l'opération " . $tab[$symbol] . " de " . $op1 . "
par " . $op2 . " est " . $res . "</br>";
?>
</body>
</html>
Exercice 4
Le formulaire peut être écrit dans une page HTML qui appelle une page PHP pour l’affichage
des données saisies. On donne le code de la page « ex4.html »
<!DOCTYPE html>
<html>
<head>
<title>TP6_ex4</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<form METHOD="POST" ACTION="http://127.0.0.1/TP6/ex4.php">
<center>
<p>
<fieldset>
<legend>Paramètres d'accès</legend>
<label for="login" align= "left" >Nom de l'utilisateur</label>
<input type="text" name="login" align= "left" required />
</br>
ISET Kélibia : H.TOUKABRI 46
</br>
<label for="mdp" align= "left" >Mot de passe</label>
<input type="password" name="mdp" align= "left" required />
</fieldset>
</br>
<INPUT TYPE="submit" VALUE="Valider">
<INPUT TYPE="reset" VALUE="Réinitialiser">
</p>
</center>
</form>
</body>
</html>
La page « ex4.php » est donnée par :
<!DOCTYPE html>
<html>
<head>
<title>TP6_ex4_PHP</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php
//La fonction extract permet de créer les variables issus du tableau
$_POST
extract($_POST);
if (($login == "") || ($mdp == ""))
echo "Accès interdit : Les deux champs doivent être renseignés !!!";
if(($login != "admin") || (!preg_match("/^[[:alnum:]_-]{4,10}$/",$mdp)))
echo "Accès interdit : les paramètres que vous avez fournis sont
erronnés !!!";
else
echo "Accès autorisé";
?>
</body>
</html>
Exercice 5
Le formulaire peut être écrit dans une page HTML qui appelle une page PHP pour l’affichage
des données saisies. On donne le code de la page « ex5.html »
ISET Kélibia : H.TOUKABRI 47
<!DOCTYPE html>
<html>
<head>
<title>TP6_ex5</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<form METHOD="POST" ACTION="http://127.0.0.1/TP6/ex5.php">
<center>
<p>
<fieldset>
<legend>Formulaire Contact</legend>
<label for="cin" align= "left" >CIN</label>
<input type="text" name="cin" align= "left" required />
</br>
</br>
<label for="nom" align= "left" >Nom</label>
<input type="text" name="nom" align= "left" required />
</br>
</br>
<label for="prenom" align= "left" >Prénom</label>
<input type="text" name="prenom" align= "left" required />
</br>
</br>
<label for="dateNaissance" align= "left" >Date de naissance</label>
<input type="date" name="dateNaissance" align= "left" />
</br>
</br>
<label for="adresse" align= "left" >Adresse</label>
<input type="textarea" name="adresse" align= "left" />
</br>
</br>
<label for="codePostal" align= "left" >Code postal</label>
<input type="text" name="codePostal" align= "left" required />
</fieldset>
</br>
<INPUT TYPE="submit" VALUE="Valider">
<INPUT TYPE="reset" VALUE="Réinitialiser">
</p>
</center>
</form>
</body>
</html>
ISET Kélibia : H.TOUKABRI 48
La page « ex5.php » est donnée par :
<!DOCTYPE html>
<html>
<head>
<title>TP6_ex5_PHP</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<?php
//La fonction extract permet de créer les variables issus du tableau
$_POST
extract($_POST);
echo 'Résultat de validation des données</br>';
//Vérification de CIN
if(!preg_match("/^[0-1][[:digit:]]{7}$/",$cin))
echo 'CIN invalide</br>';
else
echo 'CIN valide</br>';
//Vérification du code postal
if(!preg_match("/^[[:digit:]]{4}$/",$codePostal))
echo 'Code postal invalide</br>';
else
echo 'Code postal valide</br>';
?>
</body>
</html>
ISET Kélibia : H.TOUKABRI 49
Utilisation de l’outil phpmyadmin pour la création des bases de données
(Questions 1 à 6) On peut créer graphiquement les tables et les contraintes d’intégrité. Sauf
qu’il faut vérifier le moteur de stockage par défaut de MySQL. Il faut que ce moteur soit
innoDB et non pas MyISAM. En effet, le moteur de stockage MyISAM ne tient pas compte
des contraintes d’intégrité et des transactions.
Pour modifier le moteur de stockage par défaut de MyISAM (moteur par défaut pour les
versions antérieures à 5.5) à innoDB, il suffit de modifier le fichier de configuration de
MySQL (généralement c’est le fichier my.ini). Les modifications à apporter sont :
default-storage-engine=innoDB
default_tmp_storage_engine=innoDB
Une fois les modifications apportées, il faut redémarrer le serveur.
(Questions 7 à 9) L’insertion des données peut être réalisée graphiquement à travers
l’interface phpMyAdmin.
10. Il faut vérifier le contenu des tables
Accès à travers PDO
1. Le script « connexion.php » est donné par :
<?php
//Connexion à la base
try{
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 6h
Correction TP N° 7 – Le site gestion des films
ISET Kélibia : H.TOUKABRI 50
$pdo = new PDO('mysql:host=localhost;dbname=AMDB', 'root', '');
$pdo->setAttribute (PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo $e->getMessage();
die();
}
?>
2. Le fichier « listeFilmsParAS.php » est donné par :
<!DOCTYPE html>
<html>
<head>
<title>Formulaire Liste des films par année de sortie</title>
<!--La balise meta permet aux utilisateurs de Windows d'utiliser les
caractères accentués et le symbole € (euro)-->
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15"
/>
</head>
<body>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ;?>" >
<center>
<p>
<fieldset>
<legend>Affichage de la liste des films par année de sortie</legend>
<label for="annee" align= "left" >Année de sortie</label>
<SELECT name="annee" size="1">
<?php
//Connexion à la base de données AMDB
require 'connexion.php';
//Exécution de la requête Select pour lister les années (Accès à la
table TabAnnée)
$res = $pdo->query('SELECT annee FROM TabAnnee');
$data = $res->fetchAll();
//Accès par le nom de la colonne
foreach ($data as $ligne) {
echo "<OPTION>" . $ligne["annee"];
}
?>
</SELECT>
</fieldset>
</br>
<INPUT TYPE="submit" VALUE="Afficher">
<INPUT TYPE="reset" VALUE="Réinitialiser">
</p>
ISET Kélibia : H.TOUKABRI 51
<p>
<?php
if(!empty($_POST['annee'])) {
//Requête préparée pour la récupération de IDAnnee dans TabAnnee
$req = $pdo->prepare('SELECT idAnnee FROM TabAnnee WHERE annee =
:annee');
$req->bindParam(':annee', $_POST['annee'], PDO::PARAM_INT);
$req->execute();
$resultat = $req->fetchAll();
//Récupération de idAnnee
$IDAnnee = $resultat[0]["idAnnee"];
//Préparation et exécution de la requête préparée Select pour lister les
films par année sélectionnée (Accès à la table TabFilm)
$req = $pdo->prepare('SELECT titre FROM TabFilm WHERE anneeSortie =
:annee');
$req->bindParam(':annee', $IDAnnee, PDO::PARAM_INT);
$req->execute();
$resultat = $req->fetchAll();
//Affichage des noms des films
foreach ($resultat as $ligne) {
echo $ligne["titre"];
}
}
?>
</p>
</center>
</form>
</body>
</html>
ISET Kélibia : H.TOUKABRI 52
Création de la base dico
La création peut être faite graphiquement en créant les tables puis en ajoutant les contraintes
d’intégrité.
Mise en place de l’interface
1. Le script « connexion.inc.php » est donné par :
<?php
//Connexion à la base
try{
$pdo = new PDO('mysql:host=localhost;dbname=dico', 'root', '');
$pdo->setAttribute (PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo $e->getMessage();
die();
}
?>
2. La page « index.php » est donnée par
<?php
include_once('entete.html');
include_once("connexion.inc.php");
//Sélection de tous les identifiants des citations
$requete = "SELECT idCitation FROM citation";
$result = $pdo->query($requete);
//Calcul du nombre total de citations
$nbcitation = $result->rowCount();
if ($nbcitation != 0) {
$tirage=rand(1,$nbcitation);
Institut Supérieur des Études Technologiques de Kélibia
Département de Technologies de l'Informatique
Matière : Atelier développement web (PHP)
Enseignante : H. TOUKABRI
Niveau : L2 - DSI/MDW
Durée : 6h
Correction TP N° 8 – Le site de citations interactif
ISET Kélibia : H.TOUKABRI 53
$requetecit = "SELECT texte,nom,prenom,siecle FROM citation,auteur
WHERE idcitation ='$tirage' AND
citation.auteur=auteur.idAuteur";
$resultcit = $pdo->query($requetecit);
$citdujour = $resultcit->fetch();
if (count($citdujour) != 0) {
echo "<hr />";
echo "<h4>" . $citdujour['texte'];
echo "<cite>" . ", " . $citdujour['prenom'] . " " .
$citdujour['nom'] . ", " . $citdujour['siecle'] . "<sup>ème</sup> siècle
</cite></h4>";
echo "<hr />";
}
}
?>
<form action="afficheCitation.php" method="post">
<fieldset>
<legend><b>Rechercher une citation</legend>
<table width="100%" border="1" align="left" bordercolor="#800000"
summary="Recherche">
<tr>
<td colspan="2" align="center"><h2>Recherche de citations</h2></td>
</tr>
<tr>
<td>
Mot-clé </<td><input type="text" name="motcle" size="40" maxlength="256">
</td>
</tr>
<tr>
<td>
Auteur</<td>
<?php
$requete = "SELECT nom FROM auteur";
$result = $pdo->query($requete);
echo "<select name="auteur" size="1" >";
echo "<option value="tous"> Tous</option>";
while (($tab = $result->fetch()) && (count($tab) != 0))
{
echo "<option value="".$tab["nom"]."" >".
$tab["nom"]."</option>";
}
echo "</select>";
?>
</td>
</tr>
<tr>
ISET Kélibia : H.TOUKABRI 54
<td>
Siècle</<td>
<select name="siecle" size="1">
<option value=""> Tous</option>
<option value="16"> 16ème siècle</option>
<option value="17"> 17ème siècle</option>
<option value="18"> 18ème siècle</option>
<option value="19"> 19ème siècle</option>
<option value="20"> 20ème siècle</option>
<option value="21"> 21ème siècle</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">Trier par : auteur <input type="radio" name="tri"
value="nom" checked="checked" />
siècle : <input type="radio" name="tri" value="siecle" /></td>
</tr>
<tr>
<td><input type="reset" value="Effacer">&nbsp;&nbsp;
<input type="submit" value="Chercher">
</td>
</tr>
<tr>
<td colspan="2"><a href="<?php $_SERVER['PHP_SELF']?>"><button
type="button"> Nouvelle
recherche </button></a>&nbsp;&nbsp;
<a href="saisieCitation.php"><button type="button"> Ajouter une citation
</button></b></a>
</td>
</tr>
</table>
</fieldset>
</form>
<?php
//include_once('pied.htm');
?>
3. La page « afficheCitation.php » est donnée par :
<?php
include_once('entete.html');
//Récupération des valeurs
$motcle= $_POST["motcle"];
$auteur= $_POST["auteur"];
$siecle= $_POST["siecle"];
ISET Kélibia : H.TOUKABRI 55
$tri= $_POST["tri"];
//Requête
$query = "SELECT nom,prenom,texte,siecle FROM auteur AS A,
citation AS C WHERE ";
//Si mot-clé
if($motcle)
{$query .="texte LIKE '%$motcle%' ";}
else{
$query .= " 1 "; }
//si auteur différent de 'tous'
if($auteur !="tous")
{$query .= "AND nom= '$auteur' ";}
else{ $query .= "";}
//si siecle
if($siecle){$query .= " AND siecle = '$siecle' ";}
$query .= " AND A.idAuteur= C.auteur";
$query.=" ORDER BY $tri ASC";
//***************************
//connexion au serveur MySQL
//***************************
include_once("connexion.inc.php");
//Envoi de la requête
$result = $pdo->query($query)or die("ERREUR RESULTAT");
//Affiche résultats
if(!$result) echo "<h2> Pas de réponse </h2>";
else
{
echo "<h2> Liste des citations : $motcle</<hr>";
while ($tab = $result->fetch())
{
if (count($tab) != 0) {
echo "<h4>". nl2br($tab["texte"]) ."<br/>";
echo "<cite>" . $tab["prenom"] . " " . $tab["nom"] . ", " .
$tab["siecle"] . "<sup> ème</siècle </cite></h4><hr />";
}
}
}
//include_once('pied.htm');
?>
4. La page « saisieCitation.php » est donnée par
<?php
include_once('entete.html');
?>
<h2>Enrichissez le dictionnaire de citations</h2>
ISET Kélibia : H.TOUKABRI 56
<form method="POST" action="<?php $_SERVER['PHP_SELF']?>">
<fieldset>
<legend><b>Formulaire de saisie des citations</b></legend>
<table>
<tbody>
<tr>
<td>Nom de l'auteur :</td>
<td><input type="text" name="nom" size="40" maxlength="256"><br/></td>
</tr>
<tr>
<td>Prénom de l'auteur : </<td>
<td> <input type="text" name="prenom" size="40"
maxlength="256"><br/></td>
</tr>
<tr>
<td>Siècle : </td>
<td>
<select name="siecle" size="1">
<option value="16"> 16ème siècle</option>
<option value="17"> 17ème siècle</option>
<option value="18"> 18ème siècle</option>
<option value="19"> 19ème siècle</option>
<option value="20"> 20ème siècle</option>
<!-- <option value="null"> Autres</option> -->
</select>
</td>
</tr>
<tr>
<td colspan="2"> Ecrivez votre citation ici: <br/>
<textarea name="texte" cols="70" rows="7"></textarea> </td>
</tr>
<tr>
<td colspan="2">
<input type="reset" name="annuler" value="Effacer">&nbsp;&nbsp;
&nbsp;&nbsp;<input type="submit" name="valider" value="Enregistrer">
</td>
</tr>
</tbody>
</table>
</fieldset>
</form>
<?php
if(isset($_POST["nom"]) && ($_POST["texte"] != null) && ($_POST["nom"] !=
null) && ($_POST["prenom"] != null) && ($_POST["siecle"] != null))
{
//******************************************
ISET Kélibia : H.TOUKABRI 57
//Récupération des valeurs
//******************************************
$nom= $_POST["nom"];
$prenom= $_POST["prenom"];
$siecle= $_POST["siecle"];
$texte= $_POST["texte"];
//***************************
//connexion au serveur MySQL
//***************************
include_once("connexion.inc.php");
//*************************************************************
//Recherche de l'idauteur et du siècle si l'auteur existe déjà
//dans la table auteurs
//*************************************************************
$queryaut = "SELECT idAuteur,siecle FROM auteur WHERE nom='$nom'";
$result = $pdo->query($queryaut)or die("ERREUR RESULTAT");
$tabid = $result->fetch();
//Si l'auteur existe
if($tabid)
{
$idauteur= $tabid['idAuteur'];
$siecle= $tabid['siecle'];
$query = "INSERT INTO citation (texte,auteur) VALUES
('$texte','$idauteur')";
$pdo->query($query)or die("ERREUR D'INSERTION ".$nom);
}
//si l'auteur n'existe pas encore
else
{
$queryins="INSERT INTO auteur (nom,prenom,siecle) VALUES
('$nom','$prenom','$siecle')";
$pdo->exec($queryins)or die("ERREUR D'INSERTION auteur");
$idauteur = $pdo->lastInsertId();
$query = "INSERT INTO citation (texte,auteur) VALUES
('$texte','$idauteur')";
$pdo->exec($query)or die("ERREUR D'INSERTION citation");
}
}
?>
ISET Kélibia : H.TOUKABRI 58
Bibliographie
[1] J. Carfantan, PHP & MySQL et CSS. CARDOZA.
[2] J. ENGELS, PHP 5 Cours et exercices, 2e éd. EYROLLES, 2009.
[3] M. Nebra, « Concevez votre site web avec PHP et MySQL ». OpenClassrooms.
[4] P. Rigaux, Pratique de MySQL et PHP : Conception et realisation de sites web
dynamiques, 4e éd. DUNOD.
[5] « Site officiel de MySQL : https://www.mysql.com/fr/ ». .
[6] « Site officiel de PHP : http://php.net/ ». .

Contenu connexe

Tendances

Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
Ines Ouaz
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
ENSET, Université Hassan II Casablanca
 
Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)
ENSET, Université Hassan II Casablanca
 
Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2
Ben Abdelwahed Slim
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
ENSET, Université Hassan II Casablanca
 
Rapport Mini Projet : élaborer un moteur de Recherche spécialisé en Education
Rapport Mini Projet : élaborer un moteur de Recherche spécialisé en EducationRapport Mini Projet : élaborer un moteur de Recherche spécialisé en Education
Rapport Mini Projet : élaborer un moteur de Recherche spécialisé en Education
Mohamed Amine Mahmoudi
 
Exercices uml-corrige
Exercices uml-corrigeExercices uml-corrige
Exercices uml-corrige
AmineMouhout1
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
ENSET, Université Hassan II Casablanca
 
Plateforme e-learning PHP
Plateforme e-learning PHP Plateforme e-learning PHP
Plateforme e-learning PHP
Saâd Zerhouni
 
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Mohammed JAITI
 
rapport PFE ingénieur génie logiciel INSAT
rapport PFE ingénieur génie logiciel INSATrapport PFE ingénieur génie logiciel INSAT
rapport PFE ingénieur génie logiciel INSAT
Siwar GUEMRI
 
Rapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammamiRapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammami
Donia Hammami
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Riadh K.
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
ENSET, Université Hassan II Casablanca
 
exercices base de données - sql
exercices  base de données - sql exercices  base de données - sql
exercices base de données - sql
Yassine Badri
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
Amir Souissi
 
Ma présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebMa présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site Web
Harrathi Mohamed
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services web
CHOUAIB EL HACHIMI
 
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
ENSET, Université Hassan II Casablanca
 

Tendances (20)

Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)
 
Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2Rapport Pfe Application Web e-commerce Symfony2
Rapport Pfe Application Web e-commerce Symfony2
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Rapport Mini Projet : élaborer un moteur de Recherche spécialisé en Education
Rapport Mini Projet : élaborer un moteur de Recherche spécialisé en EducationRapport Mini Projet : élaborer un moteur de Recherche spécialisé en Education
Rapport Mini Projet : élaborer un moteur de Recherche spécialisé en Education
 
Exercices uml-corrige
Exercices uml-corrigeExercices uml-corrige
Exercices uml-corrige
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
Plateforme e-learning PHP
Plateforme e-learning PHP Plateforme e-learning PHP
Plateforme e-learning PHP
 
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
 
rapport PFE ingénieur génie logiciel INSAT
rapport PFE ingénieur génie logiciel INSATrapport PFE ingénieur génie logiciel INSAT
rapport PFE ingénieur génie logiciel INSAT
 
Rapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammamiRapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammami
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
exercices base de données - sql
exercices  base de données - sql exercices  base de données - sql
exercices base de données - sql
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
Ma présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebMa présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site Web
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services web
 
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
 

Similaire à Fascicule de tp atelier développement web

Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slides
Oxalide
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performance
Ludovic Piot
 
Mini projet individuel php
Mini projet individuel phpMini projet individuel php
Mini projet individuel php
Khadim Mbacké
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Atsé François-Xavier KOBON
 
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et JavascriptCodedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
codedarmor
 
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
ATPENSC-Group
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
Hugo Hamon
 
ppt1.pptx
ppt1.pptxppt1.pptx
ppt1.pptx
adiouf2
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
CARA_Lyon
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
CARA_Lyon
 
Presentation Symfony2
Presentation Symfony2Presentation Symfony2
Presentation Symfony2
Ahmed ABATAL
 
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
Clément OUDOT
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
cecile59
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
guest6c050e
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
Jean-Marc Fontaine
 
Intégration Continue et PHP
Intégration Continue et PHPIntégration Continue et PHP
Intégration Continue et PHP
Oswald De Riemaecker ☁
 
Outils front-end
Outils front-endOutils front-end
Outils front-end
Thomas Bodin
 

Similaire à Fascicule de tp atelier développement web (20)

Morning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slidesMorning tech #2 - Démarche performance slides
Morning tech #2 - Démarche performance slides
 
Oxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performanceOxalide Morning tech #2 - démarche performance
Oxalide Morning tech #2 - démarche performance
 
SAPIENS2009 - Module 4B
SAPIENS2009 - Module 4BSAPIENS2009 - Module 4B
SAPIENS2009 - Module 4B
 
Mini projet individuel php
Mini projet individuel phpMini projet individuel php
Mini projet individuel php
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et JavascriptCodedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
 
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
Fiche de TD 2 de préparation probatoire (littéraire et scientifique) du Camer...
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
ppt1.pptx
ppt1.pptxppt1.pptx
ppt1.pptx
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
Presentation Symfony2
Presentation Symfony2Presentation Symfony2
Presentation Symfony2
 
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
[RMLL2017] Templer, Git, Bootstrap, PHP : des outils libres pour concevoir le...
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
Intégration Continue et PHP
Intégration Continue et PHPIntégration Continue et PHP
Intégration Continue et PHP
 
Lp web tp3_idse
Lp web tp3_idseLp web tp3_idse
Lp web tp3_idse
 
Outils front-end
Outils front-endOutils front-end
Outils front-end
 

Dernier

Cours Gestion d’actifs BNP -- CAMGESTION
Cours Gestion d’actifs BNP -- CAMGESTIONCours Gestion d’actifs BNP -- CAMGESTION
Cours Gestion d’actifs BNP -- CAMGESTION
Sékou Oumar SYLLA
 
Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
Friends of African Village Libraries
 
Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
Txaruka
 
Formation M2i - Attitude constructive : développer l'art de l'optimisme
Formation M2i - Attitude constructive : développer l'art de l'optimismeFormation M2i - Attitude constructive : développer l'art de l'optimisme
Formation M2i - Attitude constructive : développer l'art de l'optimisme
M2i Formation
 
apprendre-a-programmer-avec-python-3.pdf
apprendre-a-programmer-avec-python-3.pdfapprendre-a-programmer-avec-python-3.pdf
apprendre-a-programmer-avec-python-3.pdf
kamouzou878
 
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
mcevapi3
 
A2-Faire-une-appreciation positive et/ou négative (A2)
A2-Faire-une-appreciation positive et/ou négative (A2)A2-Faire-une-appreciation positive et/ou négative (A2)
A2-Faire-une-appreciation positive et/ou négative (A2)
lebaobabbleu
 
A2-Critiques-gastronomiques activités critiques
A2-Critiques-gastronomiques activités critiquesA2-Critiques-gastronomiques activités critiques
A2-Critiques-gastronomiques activités critiques
lebaobabbleu
 
Présentation3.pptxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Présentation3.pptxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPrésentation3.pptxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Présentation3.pptxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
siemaillard
 
Microbiologie: le monde microbien et les techniques de mise en évidence.
Microbiologie: le monde microbien et les techniques de mise en évidence.Microbiologie: le monde microbien et les techniques de mise en évidence.
Microbiologie: le monde microbien et les techniques de mise en évidence.
MahouwetinJacquesGBO
 
Manuel-5.-Elevage-de-poisson-chat-africain-Clarias-gariepinus-en-bacs-hors-so...
Manuel-5.-Elevage-de-poisson-chat-africain-Clarias-gariepinus-en-bacs-hors-so...Manuel-5.-Elevage-de-poisson-chat-africain-Clarias-gariepinus-en-bacs-hors-so...
Manuel-5.-Elevage-de-poisson-chat-africain-Clarias-gariepinus-en-bacs-hors-so...
dokposeverin
 
1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire
NadineHG
 
MS-203 Microsoft 365 Messaging Study Guide to prepare the certification
MS-203 Microsoft 365 Messaging Study Guide to prepare the certificationMS-203 Microsoft 365 Messaging Study Guide to prepare the certification
MS-203 Microsoft 365 Messaging Study Guide to prepare the certification
OlivierLumeau1
 
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptxMARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
Martin M Flynn
 

Dernier (14)

Cours Gestion d’actifs BNP -- CAMGESTION
Cours Gestion d’actifs BNP -- CAMGESTIONCours Gestion d’actifs BNP -- CAMGESTION
Cours Gestion d’actifs BNP -- CAMGESTION
 
Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
 
Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
 
Formation M2i - Attitude constructive : développer l'art de l'optimisme
Formation M2i - Attitude constructive : développer l'art de l'optimismeFormation M2i - Attitude constructive : développer l'art de l'optimisme
Formation M2i - Attitude constructive : développer l'art de l'optimisme
 
apprendre-a-programmer-avec-python-3.pdf
apprendre-a-programmer-avec-python-3.pdfapprendre-a-programmer-avec-python-3.pdf
apprendre-a-programmer-avec-python-3.pdf
 
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
[218_phot_d'Autriche-Hongrie_et_des_[...]Vaffier_Hubert_btv1b8594559c.pdf
 
A2-Faire-une-appreciation positive et/ou négative (A2)
A2-Faire-une-appreciation positive et/ou négative (A2)A2-Faire-une-appreciation positive et/ou négative (A2)
A2-Faire-une-appreciation positive et/ou négative (A2)
 
A2-Critiques-gastronomiques activités critiques
A2-Critiques-gastronomiques activités critiquesA2-Critiques-gastronomiques activités critiques
A2-Critiques-gastronomiques activités critiques
 
Présentation3.pptxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Présentation3.pptxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPrésentation3.pptxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Présentation3.pptxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
Microbiologie: le monde microbien et les techniques de mise en évidence.
Microbiologie: le monde microbien et les techniques de mise en évidence.Microbiologie: le monde microbien et les techniques de mise en évidence.
Microbiologie: le monde microbien et les techniques de mise en évidence.
 
Manuel-5.-Elevage-de-poisson-chat-africain-Clarias-gariepinus-en-bacs-hors-so...
Manuel-5.-Elevage-de-poisson-chat-africain-Clarias-gariepinus-en-bacs-hors-so...Manuel-5.-Elevage-de-poisson-chat-africain-Clarias-gariepinus-en-bacs-hors-so...
Manuel-5.-Elevage-de-poisson-chat-africain-Clarias-gariepinus-en-bacs-hors-so...
 
1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire1eT Revolutions Empire Revolution Empire
1eT Revolutions Empire Revolution Empire
 
MS-203 Microsoft 365 Messaging Study Guide to prepare the certification
MS-203 Microsoft 365 Messaging Study Guide to prepare the certificationMS-203 Microsoft 365 Messaging Study Guide to prepare the certification
MS-203 Microsoft 365 Messaging Study Guide to prepare the certification
 
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptxMARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
MARTYRS DE HOLLANDE - La révolte hollandaise et les guerres de religion..pptx
 

Fascicule de tp atelier développement web

  • 1. Ministère de l’Enseignement Supérieur et de la Recherche Scientifique Direction Générale des Études Technologiques Institut Supérieur des Études Technologiques de Kélibia Département des technologies de l’informatique Manuel de travaux pratiques 2ème année licence appliquée en informatique Préparé par : Houda TOUKABRI Technologue toukabri.houda@gmail.com Version 2018 Atelier développement web (PHP)
  • 2. Pré requis Avoir les notions de base liées à HTML5 et CSS3 Public concerné 2ème niveau de licence appliquée en informatique Objectif général À l’issue de ces travaux pratiques, l’apprenant serait capable de mettre en place un site web dynamique en utilisant le langage PHP5 et le système de gestion de base de donnés MySQL. Objectifs spécifiques • Reconnaitre le principe de la programmation web dynamique • Maîtriser la programmation orientée objet avec PHP5 • Maîtriser le processus de mise en œuvre d’un site web dynamique avec PHP5 • Faire communiquer un site web avec une base de données MySQL à travers le mécanisme PDO • Relater l’intérêt de la sécurité des pages web à travers le langage PHP5 Mode d’évaluation Contrôle continu Charge horaire 3h par semaine soit 45 heures par semestre
  • 3. Atelier Développement web (PHP) Liste des TPs ISET Kélibia : H.TOUKABRI i Liste des TP Ce support rassemble tous les TP d’atelier de développement web PHP assuré au cours du premier semestre de la deuxième année licence appliquée en informatique. Énoncés...................................................................................................................................... 1 TP N° 1 – Premiers pas en PHP ............................................................................................ 2 TP N° 2 – Syntaxe de base de PHP ....................................................................................... 6 TP N° 3 – Les structures de contrôle..................................................................................... 8 TP N° 4 – Les tableaux........................................................................................................ 11 TP N° 5 – Les fonctions ...................................................................................................... 13 TP N° 6 – Les formulaires................................................................................................... 15 TP N° 7 – Le site gestion des films ..................................................................................... 18 TP N° 8 – Le site de citations interactif .............................................................................. 21 Corrigés................................................................................................................................... 24 Correction TP N° 1 – Premiers pas en PHP ........................................................................ 25 Correction TP N° 2 – Syntaxe de base de PHP................................................................... 27 Correction TP N° 3 – Les structures de contrôle................................................................. 30 Correction TP N° 4 – Les tableaux...................................................................................... 33 Correction TP N° 5 – Les fonctions .................................................................................... 36 Correction TP N° 6 – Les formulaires................................................................................. 40 Correction TP N° 7 – Le site gestion des films................................................................... 49 Correction TP N° 8 – Le site de citations interactif ............................................................ 52 Bibliographie........................................................................................................................... 58
  • 5. ISET Kélibia : H.TOUKABRI 2 Objectifs • Installer une plateforme de développement PHP • Reconnaitre les composants d’une plateforme de développement PHP • S’initier à la syntaxe de base du langage PHP L’environnement WAMP WAMP (acronyme de Windows Apache MySQL PHP) est une plate-forme de développement Web pour Windows exploitant le serveur Web Apache, le langage de scripts PHP et le SGBD relationnel MySQL. Figure 1 : Architecture de WAMP Les composants mis en interaction dans l’architecture WAMP (Voir Figure 1) sont : - Apache : Il est à l’écoute des requêtes émises par les navigateurs (qui demandent des pages web). Il cherche la page demandée et la renvoie au client qu’il l’a réclamée. Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 – DSI/MDW Durée : 3h TP N° 1 – Premiers pas en PHP
  • 6. ISET Kélibia : H.TOUKABRI 3 - MySQL : Son rôle est de stocker les données, sous forme de tables, et de permettre la manipulation de ces données à travers le langage de requête SQL. - PhpMyAdmin : C’est une application écrite en PHP permettant la gestion, depuis un navigateur, des bases de données MySQL. On peut donc manipuler des BDDs et des tables, modifier et supprimer des champs d’une table, exécuter des requêtes SQL, etc. Travail demandé 1. Télécharger le logiciel WampServer. La dernière version est disponible sur la page suivante : http://www.wampserver.com 2. Installer l’application. Si le programme d’installation indique l’absence d’une DLL, il suffit vérifier l’existence du package « Visual C++ Redistribuable for Visual Studio ». 3. Le fichier « php.ini » stocke les paramètres de configuration de WampServer. Parmi ces paramètres, on distingue : - « upload_max_filesize » : La taille maximale en octets d’un fichier à charger. - « post_max_size » : Définit la taille maximale des données reçues par la méthode POST. Cette option affecte également les fichiers chargés. Pour charger de gros fichiers, cette valeur doit être plus grande que la valeur de « upload_max_filesize ». Si la limitation de mémoire est activée par le script de configuration, « memory_limit » affectera également les fichiers chargés. De façon générale, « memory_limit » doit être plus grand que « post_max_size ». - « max_execution_time » : Fixe le temps maximal d’exécution d’un script, en secondes. La configuration par défaut est de 30 secondes. Cette valeur augmente en fonction de la performance du PC sur lequel WampServer est installé. Modifier le fichier « php.ini » comme suit : - « max_execution_time » : augmenter cette valeur de 30 à 300 secondes - « memory_limit » : augmenter cette valeur de 128M à 180M - « post_max_size » : augmenter cette valeur de 8M à 120M
  • 7. ISET Kélibia : H.TOUKABRI 4 - « upload_max_filesize » : augmenter cette valeur de 2M à 100M Enregistrer puis redémarrer WampServer. 4. Vérifier le fonctionnement de WampServer en tapant l’URL « http://localhost/ » dans un navigateur. La page par défaut est la page de démarrage de WampServer. 5. Vérifier également le bon fonctionnement de l’application PhpMyAdmin accessible à travers l’URL « http://localhost/phpmyadmin ». Une nouvelle page va s’ouvrir permettant de manipuler les bases de données. 6. Tester le script PHP suivant : <!DOCTYPE html> <html> <head> <title>Premier script PHP</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php //Ceci est un commentaire PHP echo "<h3>Mon premier script PHP</h3><br>"; echo "<script type='text/javascript'>alert('Ceci est un code JS lancé par un script PHP');</script>"; ?> </body> </html> Remarque - La fonction PHP echo permet d’afficher un texte donné. - Un script PHP doit être enregistré avec l’extension « .php », il peut contenir du code HTML, CSS et JavaScript. 7. Créer une feuille de style permettant de formater le texte « Mon premier script PHP » en grand titre coloré. 8. Quel est le rôle du script suivant ?
  • 8. ISET Kélibia : H.TOUKABRI 5 <!DOCTYPE html> <html> <head> <title>Script PHP</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php echo "<center><h3>Ceci est un script PHP</h3></center>"; header("Refresh:3;URL=http://www.google.fr/"); ?> </body> </html>
  • 9. ISET Kélibia : H.TOUKABRI 6 Objectifs • Savoir déclarer des variables et des constantes • Reconnaître l’environnement d’exécution d’un script • Utiliser les fonctions prédéfinies sur les variables et différencier entre leurs types Travail demandé Exercice 1 1. Quel est le résultat fourni par le script suivant : <!DOCTYPE html> <html> <head> <title>TP2 EX1</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php phpinfo() ?> </body> </html> 2. Modifier le script précédent pour qu’il n’affiche que la version du PHP utilisé. 3. Afficher le type du navigateur du client ainsi que son adresse IP. Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h TP N° 2 – Syntaxe de base de PHP
  • 10. ISET Kélibia : H.TOUKABRI 7 Exercice 2 1. Déclarer une variable « prenom » et faire afficher « Bonjour » suivi de la valeur de cette variable. 2. Afficher le prénom en majuscule. 3. Afficher le prénom en minuscule. 4. Afficher le nombre de caractères de la variable « prenom ». Exercice 3 Considérons une variable « $var = "12 m" » de type chaîne. Transformer $var en entier, double puis de nouveau en chaîne. Réaliser l’affichage après chaque conversion. Exercice 4 1. Qu’affiche le script suivant ? <!DOCTYPE html> <html> <head> <title>Script PHP fruits et légumes</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php var_dump(1 + 2);echo '<br>'; var_dump('1'+'2');echo '<br>'; var_dump(1 . 2) ;echo '<br>'; var_dump('1' . '2') ;echo '<br>'; var_dump("3 fruits" + '1 légume' . ' donnent');echo '<br>'; var_dump("3 fruits" + '1 légume' . ' donnent');echo '<br>'; var_dump(1/2 + true - "-2");echo '<br>'; ?> </body> </html> 2. Quel est le rôle de la fonction prédéfinie var_dump ?
  • 11. ISET Kélibia : H.TOUKABRI 8 Objectifs • Utiliser les structures de contrôle en PHP. • Utiliser les clauses Break et continue. Travail demandé Exercice 1 Écrire un script permettant de : 1. Tirer aléatoirement un nombre entre 1 et 100 et de le stocker dans la variable $age. Pour cela, on utilise la fonction prédéfinie rand dont la syntaxe est donnée par : int rand (int $min, int $max).La fonction rand retourne une valeur aléatoire entre $min et $max. 2. Afficher le contenu de la variable $age. 3. Afficher un message selon les conditions suivantes : - si l’âge est inférieur à 10, on affiche « enfant » - si l’âge est compris entre 10 et 19, on affiche « adolescent » - si l’âge est compris entre 20 et 39, on affiche « jeune » - si l’âge est compris entre 40 et 59, on affiche « adulte » - si l’âge est supérieur ou égal à 60, on affiche « vieux » Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h TP N° 3 – Les structures de contrôle
  • 12. ISET Kélibia : H.TOUKABRI 9 Exercice 2 On se propose de créer un wiki de mots classés par ordre alphabétique. Pour ce faire : 1. Écrire un script PHP permettant d’afficher, dans l’ordre, les lettres de l’alphabet. (les lettres doivent être séparées par le caractère « | ». 2. Modifier le code pour avoir l’affichage suivant : Les caractères de l’alphabet situés en haut de la page sont des liens internes vers chaque bloc commençant par la même lettre. Le lien « haut » permet de revenir en haut de la page. Exercice 3 On donne le code suivant : <?php $i = 0; while ( ++$i ) { echo '----->$i='." $i <br/> "; for ($j=1;$j<=15;$j++) { echo 'boucle for : $j='."$j<br/>"; if (($j==6) || ($j == 8)) { echo ' à $j = ' . $j . 'ou $j = ' . $j . '<br/> '; break 1; } if (($i==2) && ($j==5))
  • 13. ISET Kélibia : H.TOUKABRI 10 { echo 'à $i=' . $i . 'et $j=' . $j . '<br/> '; break 2; } } }?> 1. Que retourne ce code ? 2. Quel est le rôle des instructions break ? 3. Que se passe-t-il si on modifie, dans la première instruction if, la condition $j==6 par $j==4 ?
  • 14. ISET Kélibia : H.TOUKABRI 11 Objectifs • Déclarer, initialiser et remplir un tableau en PHP. • Utiliser les fonctions prédéfinies sur les tableaux. • Distinguer la différence entre un tableau scalaire et un tableau associatif. Travail demandé Exercice 1 On se propose de réaliser un tableau $Mois retournant le nombre de jours de chaque mois de l’année. On considère que le mois de Février ne contient que 28 jours. 1. Créer le tableau $Mois. 2. Créer une table HTML permettant d’afficher pour chaque mois le nombre de jours correspondant. 3. Donner le titre « table de nombre de jours des mois de l’année » pour la table précédente. Placer ce titre en bas de la table. Centrer la table et son titre. Exercice 2 On considère le tableau suivant : $mails=array("php5@free.com","jean556@yahoo.fr","machine@wanadoo.fr","webmaster@ wanadoo.fr","paul@gmail.fr","macafi@yahoo.fr") ; Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h TP N° 4 – Les tableaux
  • 15. ISET Kélibia : H.TOUKABRI 12 1. Écrire une boucle permettant le parcours du tableau $mails et l’affichage de la liste des mails. 2. Modifier la boucle précédente de façon à extraire et afficher les noms des hébergeurs des adresses mail. On donne : la fonction array explode (string $delimiter, string $string [, int $limit ]) permet de découper une chaîne selon un délimiteur fournie. La fonction retourne un tableau des segments découpés. 3. Modifier le code de façon à classer les hébergeurs selon leur fréquence d’apparition dans le tableau $mails. On donne : • bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ]) : permet le tri d’un tableau selon ses valeurs. • bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ]) : permet le tri d’un tableau selon les clés. • bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ]) : permet le tri d’un tableau en ordre inverse. • array array_unique ( array $array [, int $sort_flags = SORT_STRING ]) : permet d’éliminer les doublons d’un tableau. Placer les différents hébergeurs dans une table HTML en coloriant l’hébergeur avec la plus grande fréquence d’apparition et celui ayant la plus basse fréquence d’apparition.
  • 16. ISET Kélibia : H.TOUKABRI 13 Objectifs • Déclarer des fonctions en PHP • Manipuler les fonctions prédéfinies • Inclure des fichiers en PHP Travail demandé Exercice 1 On se propose de manipuler la fonction date qui récupère la date courante. date ('l'), date ('j'), date ('F') et date ('Y') retournent une chaine de caractères contenant respectivement le jour de la semaine, le jour du mois, le mois et l’année. 1. Créer une page date.php contenant le titre « Date en temps réel » et un paragraphe annonçant la date courante. 2. Dans la question précédente, la date est affichée en anglais. Créer des « dictionnaires » traduisant les jours et les mois de l’anglais au français. (utiliser des tableaux associatifs). 3. En se servant des dictionnaires crées dans la question précédente, écrire un script permettant d’afficher la date en français. Exercice 2 On se propose d’afficher la table de multiplication par 5. Pour ce faire, on se basera sur un programme modulaire utilisant les fonctions. Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h TP N° 5 – Les fonctions
  • 17. ISET Kélibia : H.TOUKABRI 14 1. Écrire une procédure afficheTab5 permettant l’affichage de la table de multiplication par 5 dans une table HTML. 2. Fractionner le code en trois fichiers debut.php, fin.php et corps.php. Le fichier begin.php contient l’entête ( <!DOCTYPE html> jusqu’à </head>), le second fichier fin.php contient la fermeture de </body> et de </html> et le troisième fichier corps.php contient l’inclusion (include ou require) des deux autres fichiers et la fonction de calcul de la table de multiplication ainsi que son affichage. Exercice 3 1. Écrire une fonction ligne prenant en argument un entier $n et un caractère $c, et renvoyant une chaîne de caractère composées de $n fois le symbole $c. 2. En utilisant la fonction ligne, écrire une fonction pyramide qui prend en entrée un entier $n, et affiche une pyramide de caractères $c et de hauteur $n. Exemple Pour $n=3 et $c='*', on affiche : * ** *** Modifier la fonction précédente, de sorte que la pyramide ne soit construite que si l’entier donné en paramètre est plus petit que 10. Elle renverra un message d’erreur dans le cas contraire.
  • 18. ISET Kélibia : H.TOUKABRI 15 Objectifs • Maitriser l’envoi et la récupération des données à travers les formulaires avec GET, POST. • Utiliser le principe de validation des données par des expressions régulières Travail demandé Exercice 1 Écrire un formulaire qui demande le nom, le prénom et l’âge de l’utilisateur. Le bouton « Valider » de ce formulaire provoquera l’affichage d’une page contenant le texte suivant : « Bienvenu ............., vous avez ..... ans. ». Le bouton « Réinitialiser » permet de vider la saisie de l’utilisateur en cas d’erreur de saisie. Le passage des données se fera dans l’URL de la page. Exemple Si l’utilisateur saisie les valeurs « Mohamed », « Ben Mohamed » et « 15 ». La page résultat affiche : Bienvenu Mohamed Ben Mohamed, vous avez 15 ans. Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h TP N° 6 – Les formulaires
  • 19. ISET Kélibia : H.TOUKABRI 16 Exercice 2 Écrire le code PHP de la page Web suivante : Après avoir cliqué sur le bouton valider on affiche le message : • « Accès autorisé » si nom=admin Et Mot de passe= phpmyadmin. • « Accès interdit » dans le cas contraire. Exercice 3 Écrire un formulaire « Calculatrice » composé de deux champs pour la saisie des opérandes, une liste déroulante pour le choix de l’opération : somme (+), soustraction (-), division (/) et multiplication (*). On affichera, ensuite, le résultat du calcul. Le passage des données se fera dans l’URL de la page. Exercice 4 Reprendre l’exercice 2 en considérant les conditions suivantes : • Le nom de l’utilisateur permis est : admin • On ne validera que les mots de passe de 4 à 10 caractères et contenant des caractères alphanumériques, le signe moins ou tiret-bas (_).
  • 20. ISET Kélibia : H.TOUKABRI 17 Exercice 5 On se propose de créer un formulaire de contact avec les champs : CIN, Nom, prénom, date de naissance, adresse et code postal. Effectuer le contrôle de saisie et la validation des données saisies. On considère que seuls le CIN, le nom, le prénom et le code postal sont des champs obligatoires.
  • 21. ISET Kélibia : H.TOUKABRI 18 Objectifs • Utiliser l’outil phpMyAdmin pour la création d’une base de données, la manipulation des tables et l’insertion des données. • Accéder à une base de données à travers PDO. Travail demandé On se propose de créer une base de données gérant une liste de films avec l’année de sortie ou de réalisation ainsi que le genre du film. Le nom donné à cette base sera AMDB. Le système de gestion de base de données est mySQL et PDO sera utilisé pour communiquer avec la base en PHP. Schéma de la base AMDB Un film a un seul nom, une seule année de sortie, et peut avoir un ou plusieurs genres. Trois tables seront utilisés : une comportant le nom des films, une autre les années et une troisième les genres. La table année pourra servir à d’autres relations avec d’autres tableaux dans le cas d’une extension de la base. Il faudra créer une quatrième table pour les relations multiples entre les films et les genres (Tab_Film_Genre). Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 6h TP N° 7 – Le site gestion des films
  • 22. ISET Kélibia : H.TOUKABRI 19 Utilisation de l’outil phpmyadmin pour la création des bases de données 1. Démarrer l’outil phpmyadmin. Utiliser l’url http://127.0.0.1/phpmyadmin/ 2. Créer la base de données AMDB. Il suffit de se rendre à l’onglet « bases de données », saisir le nom « AMDB » et cliquer sur créer. 3. À gauche de l’écran, double cliquer sur le nom de la base de données « AMDB ». Puis, créer la table « TabGenre ». Le nombre de colonnes de cette table est 2 (idGenre : INT, genre : VARCHAR(40)). Noter que le champ « idGenre » est une clé primaire. 4. Procéder de la même façon pour créer les tables suivantes : TabAnnee (idAnnee : serial, annee : INT). idannee est une clé primaire. TabFilm (idFilm : serial, titre : VARCHAR(40), anneeSortie : INT). anneeSortie est une clé étrangère qui pointe sur la table TabAnnee. idFilm est une clé primaire. Pour définir une clé étrangère, il suffit de le désigner comme index et cliquer sur « vue relationnelle » pour ajouter le lien avec la table en question. 5. Créer la table « Tab_Film_Genre » tel que : Tab_Film_Genre (cleFG : serial, film, genre). Les champs « film » et « genre » représentent des clés étrangères sur les tables « TabFilm » et « TabGenre ». 6. Ajouter à la table « TabGenre » les genres comédie, drame, policier, horreur, aventure, histoire et fiction. (Le champ « idGenre » n’est pas de type serial !). 7. Ajouter à la table « TabAnnee » les années de 2000 à 2005.
  • 23. ISET Kélibia : H.TOUKABRI 20 8. Exécuter les requêtes suivantes sur la table « TabFilm » : INSERT INTO TabFilm(titre, anneeSortie) VALUES ( 'Men ', 2); INSERT INTO TabFilm(titre, anneeSortie) VALUES ('Forge', 3); INSERT INTO TabFilm(titre, anneeSortie) VALUES ( 'Star', 4); INSERT INTO TabFilm(titre, anneeSortie) VALUES ( 'histoire', 5); INSERT INTO TabFilm(titre, anneeSortie) VALUES ( 'Soleil' , 1); 9. Exécuter les requêtes suivantes sur la table « Tab_Film_Genre » : INSERT INTO Tab_Film_Genre(film, genre) VALUES ( 4,2); INSERT INTO Tab_Film_Genre(film, genre) VALUES ( 1,1); INSERT INTO Tab_Film_Genre(film, genre) VALUES ( 3,4); INSERT INTO Tab_Film_Genre(film, genre) VALUES ( 2,3); 10. Afficher le contenu des différentes tables de la base « AMDB ». Accès à travers PDO 1. Écrire un script PHP qui se connecte à la base de données « AMDB ». Le script doit être sauvegardé dans un fichier « connexion.php ». 2. Créer un formulaire permettant l’affichage de la liste des films par année de sortie. Utiliser le principe des requêtes préparées pour l’accès et l’exécution en utilisant PDO. Le formulaire doit être stocké dans une page « listeFilmsParAS.php ». Noter que la liste des années de sortie contenues dans le formulaire « listeFilmsParAS.php » est alimentée à partir de la base de données.
  • 24. ISET Kélibia : H.TOUKABRI 21 Objectifs • Créer une base de données mySQL à partir d’une description textuelle du modèle conceptuelle. • Créer un site web qui réalise la communication avec une base de données mySQL. Travail demandé Le projet à mettre en place consiste à créer un dictionnaire de citations littéraires interactif en ligne. Chaque visiteur peut enrichir le contenu avec ses citations préférées, qui sont ensuite rendues accessibles à tous. Le concept du site se rapproche de celui d’un forum puisque les données ne sont pas figées. Le site communique avec la base de données « dico » réalisé en utilisant le système de gestion de base de données mySQL. Création de la base dico La base de données « dico » est composée de deux tables : auteur et citation. Un auteur est défini par son identifiant unique, son nom, son prénom et le siècle auquel il appartient. Une citation est définie par un identifiant unique et son texte. Il est à noter qu’un auteur peut avoir écrit plusieurs citations mais une citation ne peut être l’œuvre que d’un seul auteur. 1. Créer les deux tables auteur et citation. Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 6h TP N° 8 – Le site de citations interactif
  • 25. ISET Kélibia : H.TOUKABRI 22 2. Etablir les contraintes d’intégrité liées à la base « dico ». Mise en place de l’interface 1. Pour se connecter à la base « dico », créer le fichier « connexion.inc.php ». Pour créer une unité dans le site, chaque page doit incorporer les mêmes entêtes et pied de page. L’interface comprend trois pages, la page d’accueil, la page d’affichage des résultats et la page d’insertion. On donne le contenu du fichier « entete.html » contenant l’entête commun à toutes les pages : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8"> <title>Dictionnaire de citations interactif</title> <style type="text/css"> h1 {font-size: 50px;margin: 0px;text-align: center;} </style> </head> <body> <div style="border-bottom-width: 4px;border-bottom-color: red;border- bottom-style: groove;"></div> <h1><img src="images/plume.png" alt="Citations littéraires"/>Dictionnaire de citations interactif</h1> </body> </html> La page « index.php » constitue la page d’accueil du site. Elle se compose d’un bandeau contenant la citation du jour (un tirage au sort à partir de la base de données), d’un formulaire de recherche et d’un lien vers la page d’insertion de nouvelles citations. Le formulaire de recherche est composé des champs suivants : • Une zone de texte dans laquelle le visiteur saisit un mot clef pour rechercher une citation. • Une liste de sélection construite dynamiquement à partir de la base à partir de laquelle on effectue une recherche en choisissant un auteur. • Une deuxième liste de sélection sauvegardant le siècle des citations du 16ème au 21ème .
  • 26. ISET Kélibia : H.TOUKABRI 23 • Deux boutons radios indiquant si le tri du résultat est par auteur ou par siècle. Etant donné qu’aucun critère de recherche n’est indispensable, chaque choix doit avoir une valeur par défaut consistant à afficher toutes les citations disponibles dans la base. 2. Créer la page « index.php ». La page d’affichage des résultats contient les éléments suivants : − Script gérant les saisies du formulaire. Ce script construit la requête SQL dynamiquement en fonction des choix opérés par le visiteur dans la page de recherche et gère l’absence de mot-clé et de choix dans les listes de sélection afin de ne pas créer de blocage du fait d’une requête mal construite. − Résultats de la recherche effectuée par un visiteur. Chaque citation est présentée dans une cellule d’une table HTML et est suivie du nom de l’auteur et de son siècle. Le tri des citations se fait par siècle ou par nom d’auteur selon le choix fait par le visiteur. − Lien vers la page d’accueil. − Lien vers la page d’insertion. 3. Créer la page « afficheCitation.php ». La page d’insertion comprend les éléments suivants : − Formulaire contenant deux zones de saisie de texte pour le nom et le prénom de l’auteur, une liste de sélection du siècle, une zone de saisie multi ligne pour le texte de la citation, ainsi que les boutons de réinitialisation et d’envoi. − Script de traitement des données situé dans le fichier lui-même, devant vérifier si l’auteur existe déjà dans la base puis insérer les données et afficher un avis d’insertion pour le visiteur. − Lien vers la page d’accueil. 4. Créer la page « saisieCitation.php ».
  • 28. ISET Kélibia : H.TOUKABRI 25 Le TP consiste à installer, configurer et tester « wampServer ». (Questions de 1 à 6). 7. Il est demandé d’écrire une feuille de style et de l’intégrer dans un fichier PHP. La feuille de style est donnée par : /*La balise h3 sera écrite en bleu*/ h3{ fontsize: large; color : aqua; } Le fichier PHP correspondant est donné par : <!DOCTYPE html> <html> <head> <title>Premier script PHP</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole ¤ (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> <link rel="stylesheet" href="style.css" /> </head> <body> <?php //Ceci est un commentaire PHP echo "<h3>Mon premier script PHP</h3><br>"; echo "<script type='text/javascript'>alert('Ceci est un code JS lancé par un script PHP');</script>"; ?> </body> </html> Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h Correction TP N° 1 – Premiers pas en PHP
  • 29. ISET Kélibia : H.TOUKABRI 26 8. Le rôle du script est de faire une redirection l’URL http://www.google.fr/ au bout de 3 secondes.
  • 30. ISET Kélibia : H.TOUKABRI 27 Exercice 1 1. Le script permet d’afficher des informations sur la configuration courante de PHP : options de compilation, extensions, version, informations sur le serveur, et l’environnement (lorsqu’il est compilé comme module), environnement PHP, informations sur le système, chemins, valeurs générales et locales de configuration, en- têtes HTTP et la licence PHP. En effet, phpinfo() est un outil de débogage qui sert généralement à vérifier la configuration ainsi que les variables prédéfinies, pour une plate- forme donnée. 2. La version du PHP utilisé est déterminée par la constante prédéfinie « PHP_VERSION » <!DOCTYPE html> <html> <head> <title>TP2 EX1</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php echo "La version du PHP exploité est " . PHP_VERSION ?> </body> </html> 3. On utilisera les variables d’environnement $_SERVER['HTTP_USER_AGENT'] et $_SERVER["REMOTE_ADDR"] <!DOCTYPE html> <html> <head> Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h Correction TP N° 2 – Syntaxe de base de PHP
  • 31. ISET Kélibia : H.TOUKABRI 28 <title>TP2 EX1</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php echo "Le type du navigateur du client est --> " . $_SERVER['HTTP_USER_AGENT'] . " <br>"?> <?php echo "L'adresse IP est --> " . $_SERVER["REMOTE_ADDR"] . " <br>"?> </body> </html> Exercice 2 <!DOCTYPE html> <html> <head> <title>TP2 EX2</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php $prenom = "Houda"; define ("salut","Bonjour"); echo salut . " " . $prenom . " <br>"; echo "Affichage du prénom en majuscule : " . strtoupper ($prenom) . " <br>"; echo "Affichage du prénom en minuscule : " . strtolower ($prenom) . " <br>"; echo "Votre prénom contient : " . strlen ($prenom) . " caractères <br>"; ?> </body> </html> Exercice 3 <!DOCTYPE html> <html> <head> <title>TP2 EX3</title>
  • 32. ISET Kélibia : H.TOUKABRI 29 <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php $var = "12m"; echo '$var est égale à ' . $var . " (" . gettype ($var) . ") <br>"; settype ($var, "integer"); echo '$var est de égale à ' . $var . " (" .gettype ($var) . ") <br>"; settype ($var, "double"); echo '$var est de égale à ' . $var . " (" .gettype ($var) . ") <br>"; settype ($var, "string"); echo '$var est de égale à ' . $var . " (" .gettype ($var) . ") <br>"; ?> </body> </html> Exercice 4 1. L’exécution du script donne l’affichage suivant : C:wampwwwfruits&legumes.php:10:int 3 C:wampwwwfruits&legumes.php:11:int 3 C:wampwwwfruits&legumes.php:12:string '12' (length=2) C:wampwwwfruits&legumes.php:13:string '12' (length=2) C:wampwwwfruits&legumes.php:14:string '4 donnent' (length=9) C:wampwwwfruits&legumes.php:15:string '4 donnent' (length=9) C:wampwwwfruits&legumes.php:16:float 3.5 2. La fonction prédéfinie var_dump permet d’afficher les informations structurées d'une variable, y compris son type et sa valeur.
  • 33. ISET Kélibia : H.TOUKABRI 30 Exercice 1 <?php $age = rand(1,100); echo 'la valeur de $age est : ' . $age; echo "</br>"; switch ($age): case $age < 10 : echo "enfant";break; case $age >= 10 && $age <= 19: echo "adolescent";break; case $age >= 20 && $age <= 39: echo "jeune";break; case $age >= 40 && $age <= 59: echo "adulte";break; case $age >= 60: echo "vieux";break; endswitch; ?> Exercice 2 1. Lettres séparées de « | » <?php for ($var=65;$var<=90;$var++){ echo chr($var); if ($var != 'Z') echo ' | '; }?> 2. Pour avoir l’affichage avec des liens internes <?php echo "<table><tr>"; for ($var=65;$var<=90;$var++){ echo "<td id="haut" ><a href="#" . "" . chr($var) ."">" . chr($var) . "</a></td>"; } Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h Correction TP N° 3 – Les structures de contrôle
  • 34. ISET Kélibia : H.TOUKABRI 31 echo "</tr></table>"; echo "<br/>"; for ($var=65;$var<=90;$var++){ echo "<div id="" . chr($var) . "">" . chr($var) . "</div>"; //Boucle pour alimenter le wiki par du texte pour vérifier le fonctionnement des liens internes echo "<p>"; for($i=0;$i<100;$i++){ echo "Texte "; } echo "</p>"; //Lien pour revenir en haut de la page echo "</br><p><a href="#haut"> Haut </a></p>"; }?> Exercice 3 1. L’effet des instructions break est donné par : <?php $i = 0; while ( ++$i ) { echo '----->$i='." $i <br/> "; for ($j=1;$j<=15;$j++) { echo 'boucle for : $j='."$j<br/>"; if (($j==6) || ($j == 8)) { echo ' à $j = ' . $j . 'ou $j = ' . $j . ' on sort de la boucle for<br/> '; break 1; /* Ne sort que de la boucle for. */ } if (($i==2) && ($j==5)) { echo 'à $i=' . $i . 'et $j=' . $j . ' on sort du while et tout s arrête<br/> '; break 2; /* On sort du for et du while */ } } } ?> Le résultat retourné par le code est donné par :
  • 35. ISET Kélibia : H.TOUKABRI 32 ----->$i= 1 boucle for : $j=1 boucle for : $j=2 boucle for : $j=3 boucle for : $j=4 boucle for : $j=5 boucle for : $j=6 à $j = 6 ou $j = 8 ----->$i= 2 boucle for : $j=1 boucle for : $j=2 boucle for : $j=3 boucle for : $j=4 boucle for : $j=5 à $i=2 et $j=5 Si on modifie $j==6 par $j==4, on aura une boucle infinie. En effet, pour $j=4, on n’atteindra jamais la condition if (($i==2) && ($j==5)) car on va sortir de la boucle intérieur à chaque fois que $j atteint la valeur 4. D’où, le programme ne va pas s’arrêter.
  • 36. ISET Kélibia : H.TOUKABRI 33 Exercice 1 1. Création du tableau $Mois $Mois = array ( "Janvier" => 31, "Février" => 28, "Mars" => 31, "Avril" => 30, "Mai" => 31, "Juin" => 30, "Juillet" => 31, "Aout" => 31, "Septembre" => 30, "Octobre" => 31, "Novembre" => 30, "Décembre" => 31 ); 2. Création de la table HTML echo "<table border=1 ><tr align="center">"; echo "<td bgcolor="pink"> Mois </td>"; foreach ($Mois as $cle => $valeur) echo "<td>" . $cle . "</td>"; echo "</tr>"; echo "<tr align="center">"; echo "<td bgcolor="pink"> Jours </td>"; foreach ($Mois as $cle => $valeur) echo "<td>" . $valeur . "</td>"; echo "</tr></table>"; Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h Correction TP N° 4 – Les tableaux
  • 37. ISET Kélibia : H.TOUKABRI 34 3. Réglage de l’affichage <?php $Mois = array ( "Janvier" => 31, "Février" => 28, "Mars" => 31, "Avril" => 30, "Mai" => 31, "Juin" => 30, "Juillet" => 31, "Aout" => 31, "Septembre" => 30, "Octobre" => 31, "Novembre" => 30, "Décembre" => 31 ); echo "Affichage du tableau des mois </br>"; echo "<center><table border=1 ><tr align="center">"; echo "<td bgcolor="pink"> Mois </td>"; foreach ($Mois as $cle => $valeur) echo "<td>" . $cle . "</td>"; echo "</tr>"; echo "<tr align="center">"; echo "<td bgcolor="pink"> Jours </td>"; foreach ($Mois as $cle => $valeur) echo "<td>" . $valeur . "</td>"; echo "</tr></table>"; echo "<caption>table de nombre de jours des mois de l'année</caption></center>"; ?> Exercice 2 1. Parcours du tableau et affichage de la liste des mails for($i=0;$i<count($mails);$i++) echo $mails[$i] , "</br>"; 2. Extraction des noms des hébergeurs des adresses mails echo "<h2>Affichage de la liste des mails</h2>"; for($i=0;$i<count($mails);$i++) { //chaque adresse mail est sous forme nom@hebergeur.domaine echo $mails[$i] , "</br>";
  • 38. ISET Kélibia : H.TOUKABRI 35 //extraction de la partie située après @ $tab[$i]=explode("@",$mails[$i]); //extraction de la partie avant le . $hebergeurs[$i]=explode(".",$tab[$i][1])[0]; } echo "<h2>Affichage des noms des hébergeurs</h2>"; for($i=0;$i<count($hebergeurs);$i++) echo $hebergeurs[$i] . "</br>"; 3. Classement selon fréquence d’apparition echo "<h2>Classement des hébergeurs selon fréquence d'apparition</h2>"; //Création d'un tableau stockant les hébergeurs avec leurs fréquences d'apparition $freq=array(); for($i=0;$i<count($hebergeurs);$i++) if(array_key_exists($hebergeurs[$i],$freq)) $freq[$hebergeurs[$i]]++; else $freq[$hebergeurs[$i]] = 1; //Tri du tableau des fréquences arsort($freq); 4. Placement des hébergeurs dans une table et coloriage //Affichage du tableau de fréquence echo "<table border=1 >"; $cpt = 0; foreach($freq as $cle => $valeur) { if($cpt == 0) echo "<tr bgcolor="red"><td>" . $cle . "</td></tr>"; if($cpt == count($freq)-1) echo "<tr bgcolor="aqua"><td>" . $cle . "</td></tr>"; else echo "<tr><td>" . $cle . "</td></tr>"; $cpt++; } echo "</table>";
  • 39. - ISET Kélibia : H.TOUKABRI 36 Exercice 1 1. Création de la page date.php <!DOCTYPE html> <html> <head> <title>Date en temps réel</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php echo '<p> La date courante est : '. date('l') . ' ' . date('j') . ' ' . date('F') . ' ' . date('Y') .'</p>'; ?> </body> </html> 2. Création de dictionnaires de traduction $jours_Semaine = array ( "Monday" => 'Lundi', "Tuesday" => 'Mardi', "Wednesday" => 'Mercredi', "Thursday" => 'Jeudi', "Friday" => 'Vendredi', "Saturday" => 'Samedi', "Sunday" => 'Dimanche' ); $Mois = array ( "January" => 'Janvier', Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h Correction TP N° 5 – Les fonctions
  • 40. - ISET Kélibia : H.TOUKABRI 37 "February" => 'Février', "March" => 'Mars', "April" => 'Avril', "May" => 'Mai', "June" => 'Juin', "July" => 'Juillet', "August" => 'Aout', "September" => 'Septembre', "October" => 'Octobre', "November" => 'Novembre', "December" => 'Décembre' ); 3. Affichage de la date en français echo '<p> La date courante est : '. $jours_Semaine[date('l')] . ' ' . date('j') . ' ' . $Mois[date('F')] . ' ' . date('Y') .' (Affichage en français)</p>'; Exercice 2 1. Procédure afficheTab5 function afficheTab5(){ echo '<table border="1">'; for($i=0;$i<10;$i++){ echo '<tr>'; echo "<td>$i*5</td><td>". $i*5 ."</td>"; echo'</tr>'; } echo '</table>'; } 2. Le fichier debut.php doit être inclut en utilisant require car sans ce fichier le programme n’aboutit pas. Le contenu de debut.php est donné par : <!DOCTYPE html> <html> <head> <title> Multiplication par 5</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head>
  • 41. - ISET Kélibia : H.TOUKABRI 38 Le fichier fin.php doit être inclut en utilisant require car sans ce fichier le programme n’aboutit pas. Le contenu de fin.php est donné par : </body> </html> Le fichier corps.php réalise le calcul de la table de multiplication par 5 ainsi que l’inclusion des fichiers debut.php et fin.php. Son contenu est donné par : <?php require 'debut.php'; ?> <body> <?php echo '<h1> Affichage de la table de multiplication par 5 </h1>'; function afficheTab5(){ echo '<table border="1">'; for($i=0;$i<10;$i++){ echo '<tr>'; echo "<td>$i*5</td><td>". $i*5 ."</td>"; echo'</tr>'; } echo '</table>'; } afficheTab5(); ?> <?php require 'fin.php'; ?> Exercice 3 1. La fonction ligne est donnée par : <?php function ligne ($c,$n){ $l = ''; for($cpt=0;$cpt<$n;$cpt++) $l .= $c; return $l; }?> 2. La fonction pyramide est donnée par :
  • 42. - ISET Kélibia : H.TOUKABRI 39 <?php function pyramide ($c,$n){ $p = ''; for($cpt=0;$cpt<$n;$cpt++){ $p .= ligne ($c,$cpt+1); $p .= "</br>"; } return $p; }?> 3. La fonction pyramide modifiée : <?php function pyramide ($c,$n){ //Si $n < 10, la pyramide est construite if($n < 10){ $p = ''; for($cpt=0;$cpt<$n;$cpt++){ $p .= ligne ($c,$cpt+1); $p .= "</br>"; } return $p; } else //Si $n > 10, on retourne un message d'erreur return "Impossible de construire la pyramide pour $n = $n"; }?>
  • 43. ISET Kélibia : H.TOUKABRI 40 Exercice 1 Le formulaire (de type GET car il s’agit de passage de paramètres à travers l’URL) peut être écrit dans une page HTML qui appelle une page PHP pour l’affichage des données saisies. On donne le code de la page « ex1.html » <!DOCTYPE html> <html> <head> <title>TP6_ex1</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <form METHOD="GET" ACTION="http://127.0.0.1/TD5/ex1.php"> <table> <TR> <TD ALIGN="left">Donner votre nom</TD> <TD><INPUT NAME="nom"> </TD> </TR> <TR> <TD ALIGN="left">Donner votre prénom</TD> <TD><INPUT NAME="prenom"></TD> </TR> <TR> <TD ALIGN="left">Donner votre âge</TD> <TD><INPUT NAME="age"></TD> </TR> <TR> <TD ALIGN="center" COLSPAN="2"> <INPUT TYPE="submit" VALUE="Valider"> Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 3h Correction TP N° 6 – Les formulaires
  • 44. ISET Kélibia : H.TOUKABRI 41 <INPUT TYPE="reset" VALUE="Réinitialiser"></TD> </TR> </table> </form> </body> </html> La page « ex1.php » est donnée par : <!DOCTYPE html> <html> <head> <title>TP6_ex1_PHP</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php //La fonction extract permet de créer les variables issus du tableau $_GET extract($_GET); //Affichage du contenu des variables envoyées par la page ex1.html echo "Bonjour " . $prenom . " " . $nom . ", vous avez " . $age . " ans.</br>"; ?> </body> </html> Exercice 2 Le formulaire (de type POST car il s’agit d’envoi de paramètres de connexion) peut être écrit dans une page HTML qui appelle une page PHP pour l’affichage des données saisies. On donne le code de la page « ex2.html » <!DOCTYPE html> <html> <head> <title>TP6_ex2</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" />
  • 45. ISET Kélibia : H.TOUKABRI 42 </head> <body> <form NAME="Calculatrice" METHOD="POST" ACTION="http://127.0.0.1/TP6/ex2.php"> <center> <p> <fieldset> <legend>Paramètres d'accès</legend> <label for="login" align= "left" >Nom de l'utilisateur</label> <input type="text" name="login" align= "left" required /> </br> </br> <label for="mdp" align= "left" >Mot de passe</label> <input type="password" name="mdp" align= "left" required /> </fieldset> </br> <INPUT TYPE="submit" VALUE="Valider"> <INPUT TYPE="reset" VALUE="Réinitialiser"> </p> <!--<table> <TR> <TD ALIGN="left">Nom de l'utilisateur</TD> <TD><INPUT type="text" NAME="login" required></TD> </TR> <TR> <TD ALIGN="left">Mot de passe</TD> <TD><INPUT type="password" NAME="mdp" required></TD> </TR> <TR> <TD ALIGN="center" COLSPAN="2"> <INPUT TYPE="submit" VALUE="Valider"> <INPUT TYPE="reset" VALUE="Réinitialiser"></TD> </TR> </table>--> </center> </form> </body> </html> La page « ex2.php » est donnée par : <!DOCTYPE html> <html>
  • 46. ISET Kélibia : H.TOUKABRI 43 <head> <title>TP6_ex2_PHP</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php //La fonction extract permet de créer les variables issus du tableau $_POST extract($_POST); if (($login == "") || ($mdp == "")) echo "Accès interdit : Les deux champs doivent être rensignés !!!"; if(($login != "admin") && ($mdp != "phpmyadmin")) echo "Accès interdit : les paramètres que vous avez fournis sont erronnés !!!"; else echo "Accès autorisé"; ?> </body> </html> Exercice 3 Le formulaire peut être écrit dans une page HTML qui appelle une page PHP pour l’affichage des données saisies. On donne le code de la page « ex3.html » <!DOCTYPE html> <html> <head> <title>TP6_ex3</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <form NAME="Calculatrice" METHOD="GET" ACTION="http://127.0.0.1/TP6/ex3.php"> <center> <table> <TR> <TD ALIGN="left">Donner le premier opérande</TD> <TD><INPUT type="number" NAME="op1" required></TD>
  • 47. ISET Kélibia : H.TOUKABRI 44 </TR> <TR> <TD ALIGN="left">Donner le deuxième opérande</TD> <TD><INPUT type="number" NAME="op2" required></TD> </TR> <TR> <TD ALIGN="left">Sélectionner l'opération à réaliser</TD> <TD> <SELECT NAME="symbol" required> <OPTION VALUE=""></OPTION> <OPTION VALUE="+">Addition</OPTION> <OPTION VALUE="-">Soustraction</OPTION> <OPTION VALUE="*">Multiplication</OPTION> <OPTION VALUE="/">Division</OPTION> </SELECT> </TD> </TR> <TR> <TD ALIGN="center" COLSPAN="2"> <INPUT TYPE="submit" VALUE="Calculer"> <INPUT TYPE="reset" VALUE="Réinitialiser"></TD> </TR> </table> </center> </form> </body> </html> La page « ex3.php » est donnée par : <!DOCTYPE html> <html> <head> <title>TP6_ex3_PHP</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php //La fonction extract permet de créer les variables issus du tableau $_GET extract($_GET); //Tableau de conversion symbol nom opération $tab = array (
  • 48. ISET Kélibia : H.TOUKABRI 45 "+" => "addition", "-" => "soustraction", "*" => "multiplication", "/" => "division" ); //Calcul et affichage du résultat switch($symbol){ case '+':$res = $op1 + $op2;break; case '-':$res = $op1 - $op2;break; case '*':$res = $op1 * $op2;break; case '/':if($op2!=0) $res = $op1 / $op2; else echo "Division impossible, vous avez spécifier un diviseur nul !!! </br>";break; default: echo "Vous n'avez pas spécifiez une opération pour réaliser le calcul !!!"; } if(isset($res)) echo "Le résultat de l'opération " . $tab[$symbol] . " de " . $op1 . " par " . $op2 . " est " . $res . "</br>"; ?> </body> </html> Exercice 4 Le formulaire peut être écrit dans une page HTML qui appelle une page PHP pour l’affichage des données saisies. On donne le code de la page « ex4.html » <!DOCTYPE html> <html> <head> <title>TP6_ex4</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <form METHOD="POST" ACTION="http://127.0.0.1/TP6/ex4.php"> <center> <p> <fieldset> <legend>Paramètres d'accès</legend> <label for="login" align= "left" >Nom de l'utilisateur</label> <input type="text" name="login" align= "left" required /> </br>
  • 49. ISET Kélibia : H.TOUKABRI 46 </br> <label for="mdp" align= "left" >Mot de passe</label> <input type="password" name="mdp" align= "left" required /> </fieldset> </br> <INPUT TYPE="submit" VALUE="Valider"> <INPUT TYPE="reset" VALUE="Réinitialiser"> </p> </center> </form> </body> </html> La page « ex4.php » est donnée par : <!DOCTYPE html> <html> <head> <title>TP6_ex4_PHP</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php //La fonction extract permet de créer les variables issus du tableau $_POST extract($_POST); if (($login == "") || ($mdp == "")) echo "Accès interdit : Les deux champs doivent être renseignés !!!"; if(($login != "admin") || (!preg_match("/^[[:alnum:]_-]{4,10}$/",$mdp))) echo "Accès interdit : les paramètres que vous avez fournis sont erronnés !!!"; else echo "Accès autorisé"; ?> </body> </html> Exercice 5 Le formulaire peut être écrit dans une page HTML qui appelle une page PHP pour l’affichage des données saisies. On donne le code de la page « ex5.html »
  • 50. ISET Kélibia : H.TOUKABRI 47 <!DOCTYPE html> <html> <head> <title>TP6_ex5</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <form METHOD="POST" ACTION="http://127.0.0.1/TP6/ex5.php"> <center> <p> <fieldset> <legend>Formulaire Contact</legend> <label for="cin" align= "left" >CIN</label> <input type="text" name="cin" align= "left" required /> </br> </br> <label for="nom" align= "left" >Nom</label> <input type="text" name="nom" align= "left" required /> </br> </br> <label for="prenom" align= "left" >Prénom</label> <input type="text" name="prenom" align= "left" required /> </br> </br> <label for="dateNaissance" align= "left" >Date de naissance</label> <input type="date" name="dateNaissance" align= "left" /> </br> </br> <label for="adresse" align= "left" >Adresse</label> <input type="textarea" name="adresse" align= "left" /> </br> </br> <label for="codePostal" align= "left" >Code postal</label> <input type="text" name="codePostal" align= "left" required /> </fieldset> </br> <INPUT TYPE="submit" VALUE="Valider"> <INPUT TYPE="reset" VALUE="Réinitialiser"> </p> </center> </form> </body> </html>
  • 51. ISET Kélibia : H.TOUKABRI 48 La page « ex5.php » est donnée par : <!DOCTYPE html> <html> <head> <title>TP6_ex5_PHP</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <?php //La fonction extract permet de créer les variables issus du tableau $_POST extract($_POST); echo 'Résultat de validation des données</br>'; //Vérification de CIN if(!preg_match("/^[0-1][[:digit:]]{7}$/",$cin)) echo 'CIN invalide</br>'; else echo 'CIN valide</br>'; //Vérification du code postal if(!preg_match("/^[[:digit:]]{4}$/",$codePostal)) echo 'Code postal invalide</br>'; else echo 'Code postal valide</br>'; ?> </body> </html>
  • 52. ISET Kélibia : H.TOUKABRI 49 Utilisation de l’outil phpmyadmin pour la création des bases de données (Questions 1 à 6) On peut créer graphiquement les tables et les contraintes d’intégrité. Sauf qu’il faut vérifier le moteur de stockage par défaut de MySQL. Il faut que ce moteur soit innoDB et non pas MyISAM. En effet, le moteur de stockage MyISAM ne tient pas compte des contraintes d’intégrité et des transactions. Pour modifier le moteur de stockage par défaut de MyISAM (moteur par défaut pour les versions antérieures à 5.5) à innoDB, il suffit de modifier le fichier de configuration de MySQL (généralement c’est le fichier my.ini). Les modifications à apporter sont : default-storage-engine=innoDB default_tmp_storage_engine=innoDB Une fois les modifications apportées, il faut redémarrer le serveur. (Questions 7 à 9) L’insertion des données peut être réalisée graphiquement à travers l’interface phpMyAdmin. 10. Il faut vérifier le contenu des tables Accès à travers PDO 1. Le script « connexion.php » est donné par : <?php //Connexion à la base try{ Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 6h Correction TP N° 7 – Le site gestion des films
  • 53. ISET Kélibia : H.TOUKABRI 50 $pdo = new PDO('mysql:host=localhost;dbname=AMDB', 'root', ''); $pdo->setAttribute (PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo $e->getMessage(); die(); } ?> 2. Le fichier « listeFilmsParAS.php » est donné par : <!DOCTYPE html> <html> <head> <title>Formulaire Liste des films par année de sortie</title> <!--La balise meta permet aux utilisateurs de Windows d'utiliser les caractères accentués et le symbole € (euro)--> <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-15" /> </head> <body> <form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ;?>" > <center> <p> <fieldset> <legend>Affichage de la liste des films par année de sortie</legend> <label for="annee" align= "left" >Année de sortie</label> <SELECT name="annee" size="1"> <?php //Connexion à la base de données AMDB require 'connexion.php'; //Exécution de la requête Select pour lister les années (Accès à la table TabAnnée) $res = $pdo->query('SELECT annee FROM TabAnnee'); $data = $res->fetchAll(); //Accès par le nom de la colonne foreach ($data as $ligne) { echo "<OPTION>" . $ligne["annee"]; } ?> </SELECT> </fieldset> </br> <INPUT TYPE="submit" VALUE="Afficher"> <INPUT TYPE="reset" VALUE="Réinitialiser"> </p>
  • 54. ISET Kélibia : H.TOUKABRI 51 <p> <?php if(!empty($_POST['annee'])) { //Requête préparée pour la récupération de IDAnnee dans TabAnnee $req = $pdo->prepare('SELECT idAnnee FROM TabAnnee WHERE annee = :annee'); $req->bindParam(':annee', $_POST['annee'], PDO::PARAM_INT); $req->execute(); $resultat = $req->fetchAll(); //Récupération de idAnnee $IDAnnee = $resultat[0]["idAnnee"]; //Préparation et exécution de la requête préparée Select pour lister les films par année sélectionnée (Accès à la table TabFilm) $req = $pdo->prepare('SELECT titre FROM TabFilm WHERE anneeSortie = :annee'); $req->bindParam(':annee', $IDAnnee, PDO::PARAM_INT); $req->execute(); $resultat = $req->fetchAll(); //Affichage des noms des films foreach ($resultat as $ligne) { echo $ligne["titre"]; } } ?> </p> </center> </form> </body> </html>
  • 55. ISET Kélibia : H.TOUKABRI 52 Création de la base dico La création peut être faite graphiquement en créant les tables puis en ajoutant les contraintes d’intégrité. Mise en place de l’interface 1. Le script « connexion.inc.php » est donné par : <?php //Connexion à la base try{ $pdo = new PDO('mysql:host=localhost;dbname=dico', 'root', ''); $pdo->setAttribute (PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo $e->getMessage(); die(); } ?> 2. La page « index.php » est donnée par <?php include_once('entete.html'); include_once("connexion.inc.php"); //Sélection de tous les identifiants des citations $requete = "SELECT idCitation FROM citation"; $result = $pdo->query($requete); //Calcul du nombre total de citations $nbcitation = $result->rowCount(); if ($nbcitation != 0) { $tirage=rand(1,$nbcitation); Institut Supérieur des Études Technologiques de Kélibia Département de Technologies de l'Informatique Matière : Atelier développement web (PHP) Enseignante : H. TOUKABRI Niveau : L2 - DSI/MDW Durée : 6h Correction TP N° 8 – Le site de citations interactif
  • 56. ISET Kélibia : H.TOUKABRI 53 $requetecit = "SELECT texte,nom,prenom,siecle FROM citation,auteur WHERE idcitation ='$tirage' AND citation.auteur=auteur.idAuteur"; $resultcit = $pdo->query($requetecit); $citdujour = $resultcit->fetch(); if (count($citdujour) != 0) { echo "<hr />"; echo "<h4>" . $citdujour['texte']; echo "<cite>" . ", " . $citdujour['prenom'] . " " . $citdujour['nom'] . ", " . $citdujour['siecle'] . "<sup>ème</sup> siècle </cite></h4>"; echo "<hr />"; } } ?> <form action="afficheCitation.php" method="post"> <fieldset> <legend><b>Rechercher une citation</legend> <table width="100%" border="1" align="left" bordercolor="#800000" summary="Recherche"> <tr> <td colspan="2" align="center"><h2>Recherche de citations</h2></td> </tr> <tr> <td> Mot-clé </<td><input type="text" name="motcle" size="40" maxlength="256"> </td> </tr> <tr> <td> Auteur</<td> <?php $requete = "SELECT nom FROM auteur"; $result = $pdo->query($requete); echo "<select name="auteur" size="1" >"; echo "<option value="tous"> Tous</option>"; while (($tab = $result->fetch()) && (count($tab) != 0)) { echo "<option value="".$tab["nom"]."" >". $tab["nom"]."</option>"; } echo "</select>"; ?> </td> </tr> <tr>
  • 57. ISET Kélibia : H.TOUKABRI 54 <td> Siècle</<td> <select name="siecle" size="1"> <option value=""> Tous</option> <option value="16"> 16ème siècle</option> <option value="17"> 17ème siècle</option> <option value="18"> 18ème siècle</option> <option value="19"> 19ème siècle</option> <option value="20"> 20ème siècle</option> <option value="21"> 21ème siècle</option> </select> </td> </tr> <tr> <td colspan="2">Trier par : auteur <input type="radio" name="tri" value="nom" checked="checked" /> siècle : <input type="radio" name="tri" value="siecle" /></td> </tr> <tr> <td><input type="reset" value="Effacer">&nbsp;&nbsp; <input type="submit" value="Chercher"> </td> </tr> <tr> <td colspan="2"><a href="<?php $_SERVER['PHP_SELF']?>"><button type="button"> Nouvelle recherche </button></a>&nbsp;&nbsp; <a href="saisieCitation.php"><button type="button"> Ajouter une citation </button></b></a> </td> </tr> </table> </fieldset> </form> <?php //include_once('pied.htm'); ?> 3. La page « afficheCitation.php » est donnée par : <?php include_once('entete.html'); //Récupération des valeurs $motcle= $_POST["motcle"]; $auteur= $_POST["auteur"]; $siecle= $_POST["siecle"];
  • 58. ISET Kélibia : H.TOUKABRI 55 $tri= $_POST["tri"]; //Requête $query = "SELECT nom,prenom,texte,siecle FROM auteur AS A, citation AS C WHERE "; //Si mot-clé if($motcle) {$query .="texte LIKE '%$motcle%' ";} else{ $query .= " 1 "; } //si auteur différent de 'tous' if($auteur !="tous") {$query .= "AND nom= '$auteur' ";} else{ $query .= "";} //si siecle if($siecle){$query .= " AND siecle = '$siecle' ";} $query .= " AND A.idAuteur= C.auteur"; $query.=" ORDER BY $tri ASC"; //*************************** //connexion au serveur MySQL //*************************** include_once("connexion.inc.php"); //Envoi de la requête $result = $pdo->query($query)or die("ERREUR RESULTAT"); //Affiche résultats if(!$result) echo "<h2> Pas de réponse </h2>"; else { echo "<h2> Liste des citations : $motcle</<hr>"; while ($tab = $result->fetch()) { if (count($tab) != 0) { echo "<h4>". nl2br($tab["texte"]) ."<br/>"; echo "<cite>" . $tab["prenom"] . " " . $tab["nom"] . ", " . $tab["siecle"] . "<sup> ème</siècle </cite></h4><hr />"; } } } //include_once('pied.htm'); ?> 4. La page « saisieCitation.php » est donnée par <?php include_once('entete.html'); ?> <h2>Enrichissez le dictionnaire de citations</h2>
  • 59. ISET Kélibia : H.TOUKABRI 56 <form method="POST" action="<?php $_SERVER['PHP_SELF']?>"> <fieldset> <legend><b>Formulaire de saisie des citations</b></legend> <table> <tbody> <tr> <td>Nom de l'auteur :</td> <td><input type="text" name="nom" size="40" maxlength="256"><br/></td> </tr> <tr> <td>Prénom de l'auteur : </<td> <td> <input type="text" name="prenom" size="40" maxlength="256"><br/></td> </tr> <tr> <td>Siècle : </td> <td> <select name="siecle" size="1"> <option value="16"> 16ème siècle</option> <option value="17"> 17ème siècle</option> <option value="18"> 18ème siècle</option> <option value="19"> 19ème siècle</option> <option value="20"> 20ème siècle</option> <!-- <option value="null"> Autres</option> --> </select> </td> </tr> <tr> <td colspan="2"> Ecrivez votre citation ici: <br/> <textarea name="texte" cols="70" rows="7"></textarea> </td> </tr> <tr> <td colspan="2"> <input type="reset" name="annuler" value="Effacer">&nbsp;&nbsp; &nbsp;&nbsp;<input type="submit" name="valider" value="Enregistrer"> </td> </tr> </tbody> </table> </fieldset> </form> <?php if(isset($_POST["nom"]) && ($_POST["texte"] != null) && ($_POST["nom"] != null) && ($_POST["prenom"] != null) && ($_POST["siecle"] != null)) { //******************************************
  • 60. ISET Kélibia : H.TOUKABRI 57 //Récupération des valeurs //****************************************** $nom= $_POST["nom"]; $prenom= $_POST["prenom"]; $siecle= $_POST["siecle"]; $texte= $_POST["texte"]; //*************************** //connexion au serveur MySQL //*************************** include_once("connexion.inc.php"); //************************************************************* //Recherche de l'idauteur et du siècle si l'auteur existe déjà //dans la table auteurs //************************************************************* $queryaut = "SELECT idAuteur,siecle FROM auteur WHERE nom='$nom'"; $result = $pdo->query($queryaut)or die("ERREUR RESULTAT"); $tabid = $result->fetch(); //Si l'auteur existe if($tabid) { $idauteur= $tabid['idAuteur']; $siecle= $tabid['siecle']; $query = "INSERT INTO citation (texte,auteur) VALUES ('$texte','$idauteur')"; $pdo->query($query)or die("ERREUR D'INSERTION ".$nom); } //si l'auteur n'existe pas encore else { $queryins="INSERT INTO auteur (nom,prenom,siecle) VALUES ('$nom','$prenom','$siecle')"; $pdo->exec($queryins)or die("ERREUR D'INSERTION auteur"); $idauteur = $pdo->lastInsertId(); $query = "INSERT INTO citation (texte,auteur) VALUES ('$texte','$idauteur')"; $pdo->exec($query)or die("ERREUR D'INSERTION citation"); } } ?>
  • 61. ISET Kélibia : H.TOUKABRI 58 Bibliographie [1] J. Carfantan, PHP & MySQL et CSS. CARDOZA. [2] J. ENGELS, PHP 5 Cours et exercices, 2e éd. EYROLLES, 2009. [3] M. Nebra, « Concevez votre site web avec PHP et MySQL ». OpenClassrooms. [4] P. Rigaux, Pratique de MySQL et PHP : Conception et realisation de sites web dynamiques, 4e éd. DUNOD. [5] « Site officiel de MySQL : https://www.mysql.com/fr/ ». . [6] « Site officiel de PHP : http://php.net/ ». .