Vous êtes sur la page 1sur 39

Support de TP PHP IRSII 2013-2014

Support proposé par C. Dabancourt, inspiré aussi par des exemples et tutoriels Internet

1 PHP SEANCE N°1 – INTRODUCTION A PHP ............................................................................................... 4


1.1 LE PRINCIPE DU PHP (10’) .................................................................................................................................. 4
1.2 L'ENVIRONNEMENT (1H) ..................................................................................................................................... 4
1.2.1 Les outils .................................................................................................................................................. 4
1.2.1.1 Configurer la machine « LPIRSII » ...................................................................................................................... 4
1.2.1.2 Lancer la machine virtuelle................................................................................................................................... 6
1.2.1.3 Configurer VirtualBox .......................................................................................................................................... 6
1.2.1.4 En cas de problème ............................................................................................................................................... 7
1.2.1.5 En cas de problème (cf windows) ......................................................................................................................... 7
1.2.2 Le traitement de texte (coté client) ........................................................................................................... 7
1.2.3 PHP en ligne de commande ..................................................................................................................... 8
1.3 CONFIGURER L’INTERFACE RESEAU DE MANIERE PERMANENTE ......................................................................... 9
1.4 UTILISATION DE LA DOC ..................................................................................................................................... 9
1.4.1 Si vous n’avez pas internet : installation de la doc (10’) ......................................................................... 9
1.4.2 Si vous avez Internet................................................................................................................................. 9
1.4.3 Trouver les fonctions ................................................................................................................................ 9
1.5 SERIE D’EXERCICE – EXEMPLES DE PROGRAMMES PHP (3H)................................................................................ 9
1.5.1 Exercice n°1 : les variables (20’) ........................................................................................................... 10
1.5.2 Les chaînes de caractères (utilisation des fonctions) ............................................................................. 10
1.5.2.1 Fonction str_replace............................................................................................................................................ 10
1.5.2.2 Fonction fgets ..................................................................................................................................................... 10
1.5.3 Les conditions......................................................................................................................................... 10
1.5.4 les boucles (for et while) ........................................................................................................................ 11
1.5.5 Exercice n°5 : les tableaux (foreach) ..................................................................................................... 11
1.5.6 Les tableaux associatifs .......................................................................................................................... 11
1.5.7 Les fonctions........................................................................................................................................... 11
1.5.8 Les dates ................................................................................................................................................. 11
1.5.9 Portée des variables (include) ................................................................................................................ 12
1.5.10 Lire/écrire un nombre dans un fichier texte ...................................................................................... 12
2 PHP SEANCE N°2 – PASSER DES VARIABLES ......................................................................................... 13
2.1 TESTER APACHE DEPUIS UN NAVIGATEUR ......................................................................................................... 13
2.2 PHP POUR CREER UN SITE WEB ......................................................................................................................... 13
2.2.1 Créer l’utilisateur webadmin ................................................................................................................. 13
2.2.1.1 Voici la méthode pour créer le « webadmin » .................................................................................................... 13
2.2.1.2 Les droits sur le dossier /var/www ...................................................................................................................... 14
2.2.2 Le programme de base « bonjour »........................................................................................................ 14
2.2.3 Exercices sur le navigateur .................................................................................................................... 14
2.3 PHP ET LE HTML (30’) .................................................................................................................................... 15
2.3.1 Les variables d’environnement .............................................................................................................. 15
2.3.2 Exercice n°2 : les boucles (for et while) ................................................................................................. 15
2.4 EXERCICE N°3 : PASSAGE DE VALEURS ENTRE 2 PAGES DANS UN SITE (1H)....................................................... 15

Support de cours PHP Page 1


Support de TP PHP IRSII 2013-2014

2.4.1 La méthode GET (15’)............................................................................................................................ 15


2.4.2 La méthode POST (15’).......................................................................................................................... 15
2.4.3 Valeur passée entre Trois pages (30’).................................................................................................... 15
2.4.4 Exercice n°4 : les formulaires HTML (1h) ............................................................................................ 16
EXERCICE N°4 : DEUX PAGES : LE JEU « PLUS GRAND-PLUS PETIT » (2H).................................................................... 16
CONFIGURATION DU SERVEUR APACHE-PHP : AFFICHER LES MESSAGES D’ERREUR .................................................... 16
2.4.5 Jeu avec formulaire « hidden » .............................................................................................................. 16
2.4.6 Utilisation de session simple php (le panier !) ....................................................................................... 17
2.4.7 Jeu avec SESSION php ........................................................................................................................... 17
2.5 RECUPERER VOS PROGRAMMES ........................................................................................................................ 17
2.6 PHP A L’HEURE DU HTML5 ............................................................................................................................. 18
3 PHP SEANCE N°3 – PHP ET MYSQL ............................................................................................................ 19
3.1 INSTALLER PHPMYADMIN SUR LE SERVEUR ................................................................................................ 19
3.2 EXERCICE N°1 : LIRE UN FICHIER DE FORMAT « CSV » ....................................................................................... 19
3.3 EXERCICE N°2 : CONNEXION-DECONNEXION A UNE BDD MYSQL (1 SEULE TABLE) .......................................... 19
3.4 SELECT-DELETE-UPDATE-INSERT .......................................................................................................... 20
3.4.1 Exercice n°1 : select dans un tableau – 1 page ...................................................................................... 20
3.4.2 Exercice n°2 : gestion des erreurs SQL ................................................................................................. 21
3.4.3 Exercice n°3 : Insert – 2 pages .............................................................................................................. 21
3.4.4 Exercice n°4 : Delete – 1 page ............................................................................................................... 21
3.4.5 Exercice n°5 : Update – 2 pages ............................................................................................................ 21
3.4.6 Exercice n°6 : Tout mettre sur une seule page ....................................................................................... 21
3.5 CONFIGURATION APACHE ................................................................................................................................ 21
3.5.1 Configuration coté serveur ..................................................................................................................... 21
3.5.2 Vérification coté serveur ........................................................................................................................ 22
3.5.3 Vérification coté Client .......................................................................................................................... 22
3.6 EXERCICE N°6 : LES MAGIC QUOTES ................................................................................................................ 23
4 PHP SEANCE N°4 – STRUCTURER UN PROJET – 4H .............................................................................. 24
4.1 EXERCICE N°1 : STRUCTURE D’UNE APPLICATION (POUR DEPLOIEMENT/MAINTENANCE FACILITE) .................. 24
4.2 EXERCICE N°2 : ENTRER PAR UNE SEULE PORTE ............................................................................................... 24
4.3 EXERCICE N°2 : CONFIGURER APACHE ............................................................................................................. 24
4.3.1 Mode réécriture de l’url ......................................................................................................................... 24
4.3.2 fichier .htaccess ...................................................................................................................................... 24
4.4 EXERCICE N°8 : PROTEGER DES PAGES - SESSION .............................................................................................. 25
5 PHP SEANCE N°5 - PROJET – 4H ................................................................................................................. 26
5.1 PROJET A REALISER. TROMBINOSCOPE ............................................................................................................. 26
5.1.1 Faire un dessin précis du site (avec des flèches pour indiquer le passage d’information, le nom et le
numéro associé de chaque page) .......................................................................................................................... 26
5.1.2 Définir la table SQL et la créer dans une BDD « trombinoscope ». ...................................................... 26
5.1.3 Définir et écrire les pages php. .............................................................................................................. 26
6 PHP SEANCE N°6 – DEVOIR = 2H (VERSION 2008).................................................................................. 28
6.1 DEVOIR PAPIER : ECRIRE 3 ALGORITHMES ........................................................................................................ 28
6.2 DEVOIR MACHINE : ECRIRE 2 ALGORITHMES .................................................................................................... 28
7 PHP SEANCE N°7 – LILBRAIRIE FPDF = 2H ............................................................................................. 29
7.1 EXERCICE N°1 : UTILISATION DE LA CLASSE FPDF ............................................................................................ 29
7.2 INSTALLEZ ET TESTEZ LA CLASSE FPDF ET SES EXEMPLES ................................................................................. 29
7.2.1 Utilisation de la classe fpdf .................................................................................................................... 29
7.2.2 Exercice n°2 : Utilisation de la classe fpdf ............................................................................................ 29
8 PHP SEANCE N°8 – AJAX, JQUERY ET PHP – 4H .................................................................................... 30
8.1 AJAX AVEC JQUERY ......................................................................................................................................... 30
8.1.1 Exemple à tester ..................................................................................................................................... 30
8.1.2 Exemple à tester pour retourner un tableau à 2 colonnes : ................................................................. 30
8.1.3 Votre premier programme ajax avec php ............................................................................................... 31
8.1.4 Conseil : comment trouver les erreurs dans un page ajax ? .................................................................. 31

Support de cours PHP Page 2


Support de TP PHP IRSII 2013-2014

8.1.5 Exercice avec deux pages : le jeu « plus grand-plus petit » avec Ajax .................................................. 31
8.2 VISUALISER DES TABLES AVEC DATATABLES .................................................................................................. 31
8.3 AFFICHER DES POP-UP DYNAMIQUES ................................................................................................................. 33
8.4 EXERCICE N°4 : REPRENDRE L’APPLICATION « TROMBINOSCOPE ». .................................................................. 34
9 PHP SEANCE N°9 – TRANSACTION & ADODB......................................................................................... 35
9.1 LA BANQUE – LES TRANSACTIONS ..................................................................................................................... 35
9.2 ANALYSER LE CORRIGE DU TP6 ....................................................................................................................... 35
9.3 ANALYSER LE CORRIGE DU TP3 : L’ADAPTER A ADODB ................................................................................. 35
9.4 REPRENDRE LE CORRIGE DU TROMBINOSCOPE : L’ADAPTER A ADODB ........................................................... 35
9.5 PROJET – GESTION DE BATEAUX ....................................................................................................................... 35
10 PHP SEANCE N°10 – SMARTY ...................................................................................................................... 37
10.1 EXERCICE N°0 : TESTER SMARTY ............................................................................................................. 37
10.2 EXERCICE N°1 : TESTER LES EXEMPLES SMARTY ...................................................................................... 37
10.3 EXERCICE N°2 : REPRENDRE TROMBINOSCOPE AVEC SMARTY .................................................................. 37
10.4 EXERCICE N°3 : PROJET – GESTION DE BATEAUX AVEC SMARTY ............................................................... 37
11 PHP SÉANCE N°11 - CMS – 2H ...................................................................................................................... 38
11.1 EXERCICE N°1 : LES CMS ............................................................................................................................ 38
11.2 EXERCICE N°2 : FAIRE UN SITE AVEC SPIP................................................................................................... 38
11.2.1 Création du site ................................................................................................................................. 38
11.2.2 Structuration et données du site : ...................................................................................................... 38
11.2.3 La mise en forme du site (squelette) .................................................................................................. 38
11.3 EXERCICE N°3 : INSERER UNE PAGE PHP DANS SPIP...................................................................................... 38
11.4 EXERCICE N°4 : VOUS POUVEZ ESSAYER DE FAIRE LE MEME TRAVAIL AVEC JOOMLA .................................. 38
12 PHP SEANCE N°12 – UTILISATION D’OUTILS PHP ................................................................................ 39
12.1 PHPCHECKSTYLE ....................................................................................................................................... 39
12.2 INSERER GOOGLEMAP EN PHP .................................................................................................................... 39
12.3 AJAXTERM : UN XTERM VIA LE WEB ............................................................................................................ 39
12.4 GLPI............................................................................................................................................................ 39

Support de cours PHP Page 3


Support de TP PHP IRSII 2013-2014
1 PHP Séance n°1 – introduction à PHP
(13 exercices corrigés) vous pouvez consulter http://fr.php.net/tut.php

1.1 Le principe du PHP (10’)

http://fr.wikipedia.org/wiki/PHP

1.2 L'environnement (1h)

1.2.1 Les outils


 En local (tout sur votre ordinateur : plus rapide !) :
o Un éditeur de texte (Notepad++, Dreamwaver disponible à l’iut))
o une machine Virtuelle « VirtualBox »
o Un navigateur
 Sur un Serveur Distant (en production !)
o Un serveur WEB distant avec PHP et un serveur FTP
o Un éditeur de texte
o Un client FTP (pour déposer les fichiers php)
o un accès en mode terminal (xterm = terminal X)

Sur le client, sous windows (ou linux), vous avez le programme « VirtualBox »

Sous linux, on parle de LAMP (Linux-Apache-Mysql-Php), les pages sont dans le dossier /var/www/
(configuration de apache).

1.2.1.1 Configurer la machine « LPIRSII »


Copier le dossier « LPIRSII » en local (clé USB ou DD ou DD externe).
Lancer le logiciel « VirtualBox », choisissez le menu [Fichier][Importer] pour choisir le fichier du dossier
LPIRSII.

Support de cours PHP Page 4


Support de TP PHP IRSII 2013-2014

Figure 1 : configurer le réseau de la machine Virtuelle « LPIRSII »

1. Dans la configuration de l’USB, décochez la case « Enable USB 2.0 (EHCI) controller »
2. Cliquer sur la partie droite [Réseau…]
VirtualBox possède 5 modes réseau: (cf http://www.commentcamarche.net/faq/3759-vmware-et-virtualbox-les-
differents-types-de-reseau)

 Non attaché : équivaut à une interface Ethernet sur laquelle aucun câble n'est connecté
 NAT : Identique au mode NAT de VMWare.
 Adaptateur réseau hôte : Identique au mode Host-only de VMWare, à l'exception de VirtualBox qui ne
fournit pas de serveur DHCP sur ce réseau privé virtuel. Il vous faudra donc configurer les adresses IP à
la main ou bien utiliser un serveur DHCP sur votre machine hôte (machine physique). (Sous Windows, il
y a tftpd32)
 Réseau interne : Les machines virtuelles sont reliées entre elles mais isolées de l'extérieur
 Bridge (ou "accès par pont"), qui correspond au mode "Bridged" de VMWare: les machines virtuelles
peuvent communiquer totalement entre elles vers l'extérieur via la machine hôte.

Ici, on choisira
 le réseau NAT pour la « Carte 1 »
 ET le « réseau hôte » (ou host-only adapter) pour la « Carte 2 » (bien activer la carte 2 !)

Support de cours PHP Page 5


Support de TP PHP IRSII 2013-2014
1.2.1.2 Lancer la machine virtuelle
Pour se connecter : « irsii », « irsii »

Pour passer « root » : $ sudo su (avec le mot de passe « irsii »)


Pour mettre le clavier du serveur en français : $ sudo loadkeys fr (avec le mot de passe « irsii »)

1.2.1.3 Configurer VirtualBox

1. Cliquer sur [Installer les Additions invité…]

Vous devez créer un réseau local entre votre ordinateur (client) et le serveur ubuntu.

 Sur Client Windows, tapez « ipconfig » en ligne de commande (dans le menu démarrer, en bas à gauche,
tapez « cmd » et un terminal s’ouvrira).
Carte Ethernet VirtualBox Host-Only Network :

Suffixe DNS propre à la connexion. . . :


Adresse IPv6 de liaison locale.: fe80::fc6b:e450:4e20:8b1e%33
Adresse IPv4. . . . . . . . . . . . . .: 192.168.56.1
Masque de sous-réseau. . . . . . . . . : 255.255.255.0
Passerelle par défaut. . . . . . . . . :

 Sur serveur ubuntu, tapez $ ifconfig ,


Puis en root, tapez $ ifconfig eth1 192.168.56.101

Support de cours PHP Page 6


Support de TP PHP IRSII 2013-2014

Testez le ping entre le client Windows (cmd, puis « ping 192.168.56.101 ») et le serveur Linux.
Rq : si le Windows a un pare-feu : le ping sur linux vers 192.168.56.1 NE FONCTIONNE PAS.

En cas de gros problem (ifconfig eth1 ne marche pas !): cherchez le fichier:
/etc/udev/rules.d/ et effacez celui qui à le suffixe “-persistent-net.rules”, on my Ubuntu 9.04 it’s “70-persistent-
net.rules” – Redémarre la machine virtuelle et recommencez le “ifconfig”

1.2.1.4 En cas de problème


En root, sur le serveur : root$ rm /etc/udev/rules/*
Relancer le serveur root$ reboot

1.2.1.5 En cas de problème (cf windows)


Vérifier sous windows avec « ipconfig » l’adresse de la virtualBox :

1.2.2 Le traitement de texte (coté client)


a. Si notepad++ est en anglais, le mettre en français.

Menu [settings][Preference], onglet [General], choisir “français” dans le menu [localization].

b. menu « langage » : choisir « PHP »

c. ouvrir et configurer l’option FTP

Support de cours PHP Page 7


Support de TP PHP IRSII 2013-2014

Figure 2 : configurer un profil "irsii"

Figure 3 : Le login = « irsii » et le mot de passe = « irsii ».

Pour se connecter :

Figure 4 : se connecter

Vous pouvez alors modifier / sauver les fichiers du dossier.

1.2.3 PHP en ligne de commande

Support de cours PHP Page 8


Support de TP PHP IRSII 2013-2014
Langage PHP est un langage de script utilisé par les administrateurs système, tout comme le perl et le python.
Pour écrire un script, je vous le conseille : sa syntaxe est « plus simple » que celle du perl, et il fournit plus de
librairie que le bash (accès ldap…)

A faire : écrire le programme « /home/irsii/TP1/bonjour1.php » suivant (sur le serveur ubuntu) :

<?php
echo " bonjour " ;
print " tout le monde ";
?>

A faire : aller sur le terminal du serveur (utilisateur irsii, dossier /home/irsii), et testez :
irsii$ cd /home/irsii/TP1/
irsii$ php bonjour.php

1.3 Configurer l’interface réseau de manière permanente


En étant connecté en administrateur (root), modidier (avec vi ou nano directement sur le serveur, ou avec
notepad++ depuis le client) le fichier « /etc/network/interfaces » en ajoutant les lignes suivantes :
auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

Et relancer le réseau… (Selon la version supportée par le serveur)


 /etc/init.d/networking restart
 Service networking restart

1.4 Utilisation de la doc

1.4.1 Si vous n’avez pas internet : installation de la doc (10’)


Décompresser le fichier « php_manual_fr.tar.gz ».
Installer la doc PHP :, au format HTML directement sur l’ordinateur client (windows) dans un dossier de votre
choix, avec un lien dans « les favoris » de votre navigateur.

1.4.2 Si vous avez Internet


Moteur de recherche…

1.4.3 Trouver les fonctions


Tout en bas de la 1ere page, vous accédez à la liste des fonctions du langages.

Ensuite, avec la fonction « recherche » de votre navigateur, accédez par exemple à la fonction « str_replace ».

1.5 Série d’exercice – exemples de programmes php (3h)


Support de cours PHP Page 9
Support de TP PHP IRSII 2013-2014
Vous pouvez consulter la documentation, et particulièrement l’« Index des fonctions »
Les programmes seront testés directement sur le serveur avec la commande :
irsii:/home/irsii/TP1/$ php exercice1.php

1.5.1 Exercice n°1 : les variables (20’)


 Les variables sont définies par le caractère « $ ». Elles ne sont pas typées.
Définir et afficher les variables suivantes :
$a= 1 ; // un commentaire
$b= 21.55 ;
$c= 22,66 ; // erreur
$d= $a + $b ;
$e= " attention \n";
$f= " à vous";
$g= $e.$f ;
$h= " le resultat = ". $a+$b ;
$i= $a<$b ;

echo ”a= $a \n” ;


print ”a= $a \n” ;
echo ”a= ”.$a. ” \n” ;
printf(”a= %d \n”, $a) ;

rq : il y a une erreur (21.55). Remarquez à l’avant dernière ligne l'usage du « . » pour accoler (juxtaposer) plusieurs
valeurs.

 En utilisant la documentation, ajoutez quelques lignes au programme précédent pour tester les fonctions
« isset », « unset », « empty », « is_null »

 De même, testez « is_numeric », « is_int », « is_string », « ctype_digit ».

1.5.2 Les chaînes de caractères (utilisation des fonctions)


Utilisation de la documentation (fichier php_manual_fr.tar) !!

Lire toute la liste des fonctions traitant des chaînes de caractères « str… » (prendre 10’).

1.5.2.1 Fonction str_replace


Dans un fichier « exercice2a.php », définir la chaîne de caractère suivante :
$ch1 = " Au début, ils rient de vous, ensuite ils vous combattent, et à la fin, vous
gagnez";
Utilisez les fonctions de chaînes uniquement pour afficher $ch1 :
" Au tout début, ils rient, ensuite ils vous combattent, et à la fin, vous GAGNEZ";

1.5.2.2 Fonction fgets


Dans un fichier « exercice2b.php », qui va lire le fichier texte (« exercice1.php ») et l’écrire à l’écran en majuscule.
Pour cela, vous utiliserez l’exemple de doc pour la fonction « fgets » pour lire un fichier ligne par ligne.

1.5.3 Les conditions


Structure conditionnelle : RESPECTER TOUJOURS L’INDENTATION !!
if (condition1){
//
}else if (condition2){
//
}else{
//
}

Support de cours PHP Page 10


Support de TP PHP IRSII 2013-2014
Vous pouvez aussi l’écrire
if (condition1)
{ //
}
else if (condition2)
{ //
}
else
{ //
}

Dans un fichier « exercice3.php », définir une valeur numérique au début (une variable note entre 0 et 20).
Votre programme affiche ensuite si le nombre est pair ou s’il est impair.
Votre programme affiche ensuite « mauvais » si la note est inférieure à 8, « pas bon » si elle est inférieure à 10,
« correct » si elle est entre 10 et 12 inclus, « bon » jusqu’à 16, « TB » jusqu’à 20.

Indication1 :
== != < > <= >= || &&
Égalité Différent Inf strict. Sup strict. Inf ou égal Sup ou égal OU ET

Indication2 : l’opération modulo « % » permet de trouver le reste d’une division entière.

1.5.4 les boucles (for et while)


Écrire dans la table de multiplication de 10x10. Vous utiliserez la boucle « for » et la boucle « while ».

\n : pour un retour à la ligne (équivalent de <br/> en html)


\t : pour une tabulation

1.5.5 Exercice n°5 : les tableaux (foreach)


Dans un fichier « exercice5.php », reprendre l’exercice précédent en stockant tous les résultats de la table de
multiplication préalablement dans un tableau :
$multiplication[][]
Tester la fonction « print_r ».
Afficher le tableau en utilisant la boucle « foreach ».

1.5.6 Les tableaux associatifs


Dans un fichier « exercice6a.php », testez les exemples de la doc sur les tableaux associatifs. Tester la fonction
« print_r ».

Dans un fichier « exercice6b.php », créez un tableau associatif qui stocke la liste d’étudiants :
$etudiant[0][‘nom’]=”toto” ; $etudiant[0][‘prenom’] =”ptoto” ; $etudiant[0][‘age] =”10” ;
(Créez 4 étudiants de la même façon)
Utiliser une boucle « foreach » pour afficher les données.

Voir le chapitre 9 du cours : http://www.grappa.univ-lille3.fr/polys/php/

1.5.7 Les fonctions


 Dans un fichier « exercice7.php », créez une fonction « estPair » et « estImpair » qui indique si le nombre
entier passé en paramètre est pair ou impair. Si le nombre n’est pas entier, la fonction indique
« impossible ». Tester cette fonction dans le même fichier (tous les cas possibles !).
 Donnez le même nom à deux variables : une dans le programme appelant, et une dans une fonction
appelée. Vérifiez que la fonction ne modifie pas la valeur de la variable du programme appelant.

1.5.8 Les dates


Dans un fichier « exercice8.php », créez une date qui correspond au 30/8/1989. Affichez trois fois de suite la date
qui correspond à « maintenant ». Affichez que la date de « maintenant » est bien supérieure au 30/8/1989…

Support de cours PHP Page 11


Support de TP PHP IRSII 2013-2014
1.5.9 Portée des variables (include)
Définir une variable et une fonction dans un fichier « exercice9a.inc ».
Dans un fichier « e9b.php », appelez la fonction et afficher la variable du fichier « exo9a.inc ».
Dans un fichier « e9c.php », faire de même en passant par le fichier « e9b.php ».

1.5.10 Lire/écrire un nombre dans un fichier texte


Dans un fichier « e11.php », ajoutez une ligne à un fichier texte « liste.txt » : vous y placerez un nombre entier
entre 1 et 100 définit au hasard par le système (fonction rand).

Support de cours PHP Page 12


Support de TP PHP IRSII 2013-2014
2 PHP Séance n°2 – passer des variables
2.1 Tester apache depuis un navigateur
A faire : avec firefox (sur le client), cherchez l’adresse

http://192.168.56.101/

Attention : si ça ne fonctionne pas : il FAUT ajouter une exception pour éviter de passer par le proxy du navigateur
pour l’adresse 192.168.56.101. Par exemple, avec « firefox », [Outils][option][avancé][réseau][paramètre] et
ajouter l’adresse du serveur (192.168.56.101) dans la liste « no proxy for : »

2.2 PHP pour créer un site web

2.2.1 Créer l’utilisateur webadmin


on a créé un utilisateur spécial pour faire du web : webadmin (groupe www-data, comme apache)

C’est l’utilisateur « webadmin » qui crée les pages dans /var/www/


Et c’est l’utilisateur « apache » qui lit le contenu des pages dans /var/www/

User Group Autre (o)


Fichier (php) Lire Lire
RIEN
écrire (rarement écrire)
Dossier Lire Lire
Ecrire Executer(parcourir) RIEN
Executer(parcourir) (rarement écrire)

2.2.1.1 Voici la méthode pour créer le « webadmin »


root@ubuntu:/var/www# adduser webadmin
Adding user `webadmin' ...
Adding new group `webadmin' (1001) ...
Adding new user `webadmin' (1001) with group `webadmin' ...
Creating home directory `/home/webadmin' ...
Copying files from `/etc/skel' ...
Support de cours PHP Page 13
Support de TP PHP IRSII 2013-2014
Enter new UNIX password: LE MOT DE PASSE : irsii
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for webadmin
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]

on crée un groupe pour l’associer à l’utilisateur webadmin


le groupe “www-data” existe déjà (c’est le groupe de apache)
root@ubuntu:/var/www# usermod webadmin -g www-data

2.2.1.2 Les droits sur le dossier /var/www


root@ubuntu:/var/www# chown -Rf webadmin:www-data /var/www/
root@ubuntu:/var/www# find /var/www/ -type d -exec chmod 750 {} \;
root@ubuntu:/var/www# find /var/www/ -type f -exec chmod 640 {} \;

Le dossier TP1 : tous les droits pour “webadmin”, “apache” peut lire les fichiers presents et le traverser
Le fichier « index.html » : « webadmin » peut le lire et le modifier, « apache » peut seulement le lire.
 Créer un compte sur le notepad++, pour que la connexion se fasse avec l’utilisateur “webadmin”, et le
dossier « /var/www/ ».

Rq : sur le serveur, pour se connecter, taper : $ su webadmin

2.2.2 Le programme de base « bonjour »


A faire : depuis notepad++,
1. créer un profile « webadmin » qui pointe sur « /var/www »
2. créer le dossier TP1
3. écrire le programme « /var/www/TP1/bonjour2.php » suivant (sur le serveur ubuntu) :

<html><body>
<?php
echo " bonjour " ;
print " tout le monde ";
?>
</body></html>

A faire : avec firefox (sur le client), cherchez l’adresse

http://192.168.56.101/TP1/bonjour2.php

2.2.3 Exercices sur le navigateur


Vous pouvez reprendre quelques exercices de la partie 1, pour y ajouter les balises <html><body> et
</body></html> afin de voir le résultat de vos programmes php sur le navigateur.

Ps : sous linux, avec le shell, on peut ajouter une ligne assez simplement dans vos fichiers :
A la fin avec un ‘echo’ :

Support de cours PHP Page 14


Support de TP PHP IRSII 2013-2014
$ echo "</body></html>" >> exo1.php
En première ligne avec sed (et ‘1i’) :
$ sed -i '1i<html><body>' exo1.php

2.3 PHP et le HTML (30’)


Avec l'utilisateur « webadmin », créez un dossier TP2 dans le dossier /var/www/

2.3.1 Les variables d’environnement


Dans un fichier « indentite.php », identifiez et affichez les éléments suivants :
 l’adresse ip du navigateur
 le dossier où se trouve le fichier « e8.php »
 l’adresse du serveur et le port
Utilisez la fonction « phpinfo( ) », et lisez la liste des informations accessibles (5’).

2.3.2 Exercice n°2 : les boucles (for et while)


Écrire dans un tableau HTML la table de multiplication de 10x10. Vous utiliserez la boucle « for » et la boucle
« while ».
Rappel d’un tableau d’une ligne et de deux colonnes en html :
<table border=1>
<tr>
<td> valeur1 </td><td> valeur2 </td>
</tr>
<tr>
<td> valeur3 </td><td> valeur4 </td>
</tr>
</table>

2.4 Exercice n°3 : passage de valeurs entre 2 pages dans un site (1h)

2.4.1 La méthode GET (15’)


Écrire le code dans le fichier « /www/TP2/exercice3a.php » (créer le dossier « tp1 »)
<form action=”appel.php” method=”get”>
<input type=”text” name=”nom1” value=”valeur1”>
<input type=”hidden” name=”nom2” value=”valeur2”>
<input type=”submit” name=”nom3” value=”valeur3”>
</form>

La valeur sera retrouvée dans la page suivante (appel.php) grâce à la variable « $_GET »
< ?php
$a = $_GET[”valeur1”] ;
?>

2.4.2 La méthode POST (15’)


Transformer le code de l’exercice 3b avec la méthode « POST » (method=”post”>).
if (isset($_POST['nom'])) $nom=$_POST['nom'];
else $nom="";
Pour tester l’existence d’une variable

2.4.3 Valeur passée entre Trois pages (30’)


Écrire 3 pages « exo33a.php », « exo33b.php », « exo33c.php ». Mettre sur chaque page un formulaire qui permet
de passer la valeur de A à B à C à A…
 La valeur est saisie par l’utilisateur dans la page A.php.
 Elle est affichée dans B.php (mais non saisie)
 Elle est re-saisie dans C.php.

Support de cours PHP Page 15


Support de TP PHP IRSII 2013-2014
2.4.4 Exercice n°4 : les formulaires HTML (1h)
A faire :
 utilisez le fichier HTML (« formulaires.html ») avec tous les types de formulaires HTML, ajoutez trois
boutons de validation.

 Afficher tous les résultats dans la page PHP (« traitement.php »)

 Autre question : que se passe-t-il si on place 2 formulaires dans la page « formulaires.html » ?

Remarque : Si vous avez de multiples fois le même input dans un formulaire : utilisez un tableau !
Pour un formulaire avec un tableau, le nom des variables sera indiqué avec « [ ] », par exemple : (il sera ensuite
récupéré en get ou post sous forme de tableau).
<input type=”text” name=”nom[]” value=”valeur1”>

Exercice n°4 : deux pages : le jeu « plus grand-plus petit » (2h)

Configuration du serveur apache-php : afficher les messages d’erreur


Pour pouvoir modifier simplement les fichiers de configuration, le plus simple est de travailler à distance avec np++
avec le compte « root ».
irsii$ sudo su
(entrer le mot de passe « irsii »)
root$ passwd
(changer le mot de passe de « root », avec « irsii »)
Et sous notepad++ :
Créer une nouvelle connexion, user=root, dossier distant=/etc/

Modifier le fichier « /etc/php5/apache2/php.ini » et modifier la ligne


display_errors = Off
A remplacer par :
display_errors = On
sauver le fichier sous notepad++ et puis, sur le serveur, relancer le serveur apache :
irsii$ sudo su
(entrer le mot de passe « irsii »)
root$ /etc/init.d/apache2 restart

Maintenant, les erreurs de codes (oublie d’un « ; », les erreurs « bêtes » seront affichées).

2.4.5 Jeu avec formulaire « hidden »


 Créez un dossier /var/www/TP2/jeuA
Au début (dans la page accueil.php), le jeu place un nombre aléatoire qui sera passé en « hidden ». Le joueur
dispose alors de 10 essais pour trouver le nombre.
Saisie.php

Accueil.php Essai :_10_


[valider]
[début]

Tester.php

[perdu]
(ou)
[Gagner]

Support de cours PHP Page 16


Support de TP PHP IRSII 2013-2014
2.4.6 Utilisation de session simple php (le panier !)
Pour passer d’une page à l’autre des valeurs sans mettre de formulaires avec des variables cachées (hidden), vous
avez la possibilité d’utiliser la variable d’environnement $_SESSION.
Indication : sous free, vous avez la possibilité de tester cela en créant un dossier « session » à la racine de votre
site.
<?php // page1.php

session_start();

echo 'Bienvenue à la page numéro 1';

$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();
?>
Suivie par
<?php // page2.php

session_start();

echo 'Bienvenue sur la page numéro 2<br />';

echo $_SESSION['favcolor']; // green


echo $_SESSION['animal']; // cat
echo date('Y m d H:i:s', $_SESSION['time']);

// Vous pourriez utiliser la constante SID ici, tout comme dans la page page1.php
echo '<br /><a href="page1.php">page 1</a>';
?>
Exemple de code extrait de la documentation

2.4.7 Jeu avec SESSION php


 Créez un dossier /var/www/TP2/jeuB
Vous ferez le même jeu en utilisant les variables de SESSION nommées « $_SESSION[”nbInconnu”] » et
« $_SESSION[”nbCoup”] ».
Voir l’exercice précédent. A faire : (internet = plusieurs connections simultanées ??)
 Tester le jeu (la même page) avec 2 onglets (en même temps) sur firefox
 Tester le jeu avec firefox ET Internet Explorer
Conclure.

2.5 Récupérer vos programmes


Lancer l’outil portable « filezilla »,

Ouvrez une connexion sur votre serveur


Récupérer tous vos fichiers sur votre clé USB.

Support de cours PHP Page 17


Support de TP PHP IRSII 2013-2014
2.6 PHP à l’heure du HTML5
2 remarques importantes
 Les variables de session existent en html5 ; et ça change la conception du programme php
 Les vérifications des champs de saisies doivent se faire en javascript pour plus d’interactivité avec
l’utilisateur. Il n’empêche que la vérification en php doit aussi exister avant de travailler avec la BDD.

Support de cours PHP Page 18


Support de TP PHP IRSII 2013-2014
3 PHP Séance n°3 – PHP et Mysql
(BDD mysql en PHP et Sessions)

3.1 Installer phpmyadmin SUR LE SERVEUR


Grace à Filezilla (installer la version portable), déposer le fichier « phpMyAdmin-3.4.6-all-languages.tar » sur le
serveur « /var/www/ » avec

Le compte « webadmin ». Puis sur le serveur, tapez les commandes suivantes :

Webadmin$ cd /var/www/
Webadmin$ tar zxvf phpMyAdmin-3.4.6-all-languages.tar
Webadmin$ mv phpMyAdmin-3.4.6-all-languages/ phpmyadmin
Vous pouvez tester depuis firefox : http://192.168.56.101/phpmyadmin
Se connecter avec « root » et « irsii » (mot de passe de mysql défini lors de l’installation de mysql)

Vous pouvez tester (sur le serveur) la connexion :


$ mysql –uroot -p
(avec le mot de passe ‘irsii’)
mysql> use mysql
mysql> select * from user ;
… le plus simple reste d’utiliser phpMyAdmin à travers le navigateur !

3.2 Exercice n°1 : lire un fichier de format « csv »


Créez un fichier csv (avec 3 colonnes séparées par le caractère point-virgule ” ;” : nom, prénom, âge avec 3 ou
4 personnes).Parcourez ce fichier texte pour alimenter un tableau associatif php. Puis triez par nom/prénom/âge
et affichez ce tableau.

3.3 Exercice n°2 : connexion-déconnexion à une BDD mysql (1 seule table)


Avec phpMyAdmin, créez la BDD « seance3 » avec la table « produit » :
NP Produit Couleur QS
Integer Varchar(20) Varchar(20) Integer
Avec la documentation, créer un fichier « fonctionSQL.php » qui contient la fonction de connexion et la fonction
déconnexion. Testez.
define( " DATABASE_SERVER ", "localhost" );
define( "DATABASE_USERNAME ", "root" );
define( "DATABASE_PASSWORD ", "qcm2" );
define( "DATABASE_NAME ", "TP3" );
define( "SITE_RACINE", "www.irsii.com/" );
define( "FICHIER_RACINE", "/var/www/irsii/" );

Support de cours PHP Page 19


Support de TP PHP IRSII 2013-2014

//connexion
$link = mysqli_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD,
DATABASE_NAME) or die(echo "Error " . mysqli_error($link));

echo 'Connecté correctement';


mysqli_close ($link );

3.4 SELECT-DELETE-UPDATE-INSERT
Exemple de doc :
http://www.php.net/manual/fr/mysqli-result.fetch-assoc.php
http://php.net/manual/fr/mysqli-result.fetch-array.php

3.4.1 Exercice n°1 : select dans un tableau – 1 page


Avec la documentation, créer dans le fichier « fonctionSQL.php » la fonction qui retourne un tableau contenant
la liste des noms de la table « produit ». Tester. Afficher la table « produit » dans un tableau html grâce à la page
« select.php ».

// la syntaxe suivante est vivement recommandée !


$requete = <<< STR
SELECT np, libelle, qs
FROM Produit
WHERE qs > %d
AND couleur=”%s”;
STR; // changez la requête !

$Query = sprintf($requete , 15, ”rouge”); // %d est remplacé par la valeur 15 !

if ($result = mysqli_query($link, $Query)) {

/* Récupère un tableau associatif */


while ($row = mysqli_fetch_assoc($result)) {
printf ("%s (%s)\n", $row["np"], $row["libelle"]);
}
printf("Le Select retourne %d lignes.\n", mysqli_num_rows($result));
/* Libération des résultats */
mysqli_free_result($result);
}

$requete = <<< STR


SELECT id, name
FROM mytable
STR;

if ($result = mysqli_query($link, $ requete)) {

/* Récupère un tableau associatif */


while ($row = mysqli_fetch_row($result)) {
printf ("%s (%s)\n", $row[0], $row[1]);
}

/* Libère le jeu de résultats */


mysqli_free_result($result);

Support de cours PHP Page 20


Support de TP PHP IRSII 2013-2014
}
Exemple de code

3.4.2 Exercice n°2 : gestion des erreurs SQL


Avec la documentation, modifiez le fichier « fonctionSQL.php » pour afficher un message d’erreur en cas de
dysfonctionnement. Tester (par exemple, en coupant le serveur mysqld).
echo mysqli_errno($link) . ": " . mysqli_error($link) . "\n";
Exemple de code extrait de la documentation

Rq : vous aurez des centaines d’appels différents à la base dans votre programme. En cas d’erreur, il faut donner
un message à l’utilisateur qui vous permet de savoir (facilement et exactement) où a eu lieu l’erreur ! Chaque
appel doit être différencié avec un code, par exemple « ERR-02-B » avec 01, 02, 03… un numéro de fichier, et
A, B, C… le numéro de la requête dans la page (si vous avez 5 requêtes dans la page 01, les erreurs seront codées
de ERR-01-A à ERR-01-E)

3.4.3 Exercice n°3 : Insert – 2 pages


Avec la documentation, créer dans le fichier « fonctionSQL.php » la fonction qui permet d’insérer un nouveau
tuple dans la table « produit ». Tester.
La saisie se fera dans le fichier « insert.php ».
$sql = <<< STR
INSERT INTO infos_tbl(id, nom, prenom,email, icq, titre, url)
VALUES('','$s','$s','$s','$s','$s','$s')
STR;
$Query = sprintf($requete, $nom', $prenom, $email, $icq, $titre, $url);
if (mysqli_query($link, $Query) === TRUE) {
printf("ligne insérée avec succès.\n");
}
echo 'Vos infos ont été ajoutées.';
Exemple de code pour insérer en php sous mysql

3.4.4 Exercice n°4 : Delete – 1 page


Créer la page « delete.php » inspirée de la page « select.php », qui contiendra une colonne de plus avec un bouton
permettant de supprimer la ligne du bouton cliqué.

3.4.5 Exercice n°5 : Update – 2 pages


Créer la page « update.php » inspirée de la page « select.php », qui contiendra une colonne de plus avec un bouton
permettant de modifier les informations de la ligne du bouton cliqué, puis de valider ou d’annuler les changements.

3.4.6 Exercice n°6 : Tout mettre sur une seule page


Regrouper toutes les fonctions sur une seule page « prg.php ».

3.5 Configuration Apache

3.5.1 Configuration coté serveur

Support de cours PHP Page 21


Support de TP PHP IRSII 2013-2014
Expliquer rapidement : vous travaillez en local, il faut que votre navigateur, en allant chercher « tp3.irsii.fr » aille
sur 192.168.56.101.

Faire en sorte de connecter votre site « /var/www/tp3/prg.php » qui se connecte avec


http://192.168.56.101/tp3/prg.php puisse se connecter avec http://tp3.irsii.fr/prg.php

Pour cela, n’oubliez pas de


 changer la configuration d’apache
################################################################
vi /etc/apache2/sites-available/irsii.fr.conf

<VirtualHost 192.168.56.101:80>
DocumentRoot "/var/www/irsii/"
ServerName irsii.fr
ServerAlias www.irsii.fr
<Directory />
allow from all
Options +Indexes
</Directory>
</VirtualHost>

 Vous devez dire à apache de rendre « enabled » le site « available » avec la commande suivante :

root$ sudo a2ensite irsii.fr.conf


Vous pouvez vérifier que le fichier est dans le dossier « sites-enabled ».

Modifier également sur le serveur le fichier “/etc/hosts”


192.168.56.101 irsii.fr
(Sur le serveur, vous pouvez vérifier la connexion avec un « ping irsii.fr ».

3.5.2 Vérification coté serveur


Interrogation du serveur SANS NAVIGATEUR !!
telnet irsii.fr 80
ou bien
telnet 127.0.0.1 80
Le port 80 est celui généralement utilisé par le serveur pour recevoir une connexion.
Et :
GET / http/1.0
Puis appuyez 2 fois sur « entrée », et si tout se passe bien on aura la réponse d’apache…

3.5.3 Vérification coté Client


COTE CLIENT (Navigateur web) : par exemple sou IE

Support de cours PHP Page 22


Support de TP PHP IRSII 2013-2014
Modifier le proxy par défaut pour indiquer l’adresse du serveur 192.168.56.101 et affichez l’adresse « irsii.fr »
ou « www.irsii.fr ».

3.6 Exercice n°6 : les Magic Quotes


Pour éviter les « SQL-Injection ».
Voir : http://www.phpfrance.com/tutoriaux/index.php/2005/04/17/29-les-magic-quotes

Support de cours PHP Page 23


Support de TP PHP IRSII 2013-2014
4 PHP Séance n°4 – Structurer un Projet – 4h
4.1 Exercice n°1 : structure d’une application (pour déploiement/maintenance facilité)
 L’idée consiste à ne pas avoir de fichier à la racine du projet. Seulement les fichiers « index.php » qui
affichera la page désirée.
 Pour « installer » le site, il suffit de :
o Copier en une fois tout le dossier principal
o Modifier un seul (et unique) fichier de configuration
o Si besoin, lancer un script SQL pour gérer la BDD.

Structure de l’application : (non exhaustif)


/projet/etc/ ‘ le(s) fichier(s) de configuration
/projet/module/ ‘ les pages « php »
/projet/css/
/projet/js/ allez voir et TESTEZ : http://jqueryui.com/
/projet/tmp/
/projet/images/
/projet/lib/ ‘ les librairies spécifiques utilisées

4.2 Exercice n°2 : entrer par une seule porte


Structure : passer toujours par la page « index.php ».
Créer un projet qui permet de naviguer entre 3 pages « a.php » et « b.php » et « c.php », grâce à des liens href et
à des formulaires (au choix).

$num=$_GET[”num”] ;
a.php
if ($num==1) $p=”a” ;
else if ($num==2) $p=”b” ;
else if ($num==3) $p=”c” ;
else exit;
b.php
$page= ”module/”.$p.”.php”;
include ($page);
index.php?num=2
c.php
Index.php

4.3 Exercice n°2 : configurer Apache

4.3.1 Mode réécriture de l’url


Connectez-vous en root sur le serveur.

root@ubuntu:~# a2enmod rewrite


Enabling module rewrite.
Run '/etc/init.d/apache2 restart' to activate new configuration!
root@ ubuntu:~# /etc/init.d/apache2 restart
* Restarting web server apache2 ... waiting [ OK ]
root@ ubuntu:~#

4.3.2 fichier .htaccess


Mettre à la base de votre site web le fichier « .htaccess » : (ne pas oublier le point devant !)

<IfModule mod_rewrite.c>

Support de cours PHP Page 24


Support de TP PHP IRSII 2013-2014
Options +FollowSymLinks
Options +Indexes

RewriteEngine on
RewriteBase /

RewriteRule ^page-([0-9]+)*$ index.php?num=$1 [L,QSA]


</IfModule>

4.4 Exercice n°8 : protéger des pages - session


Pour entrer sur un site de 3 pages (a, b, c), vous devez d’abord entrer un mot de passe. Vous pouvez naviguer
autant que vous le désirez, mais sans naviguer pendant 2 minutes, vous serez déconnecté.
Indication : le mot de passe sera « abc ». Dans la session, sera indiquée la date exacte de la dernière connexion…
Si cette date n’existe pas : le mot de passe est demandé. Si cette date est trop ancienne (2’ d’écoulées) : le mot de
passe est demandé.

Dès qu’une page est ouverte :


 Si on n’est pas encore connecté : demande du mdp
 Si on était connecté
o On vérifie que le temps passé entre la dernière page ouverte et maintenant n’excède pas 2 minutes.
o On ouvre la page et on réinitialise le temps d’ouverture de la dernière page à « maintenant »…

Support de cours PHP Page 25


Support de TP PHP IRSII 2013-2014
5 PHP Séance n°5 - PROJET – 4h
Créez le dossier /var/www/trombi

5.1 Projet à réaliser. Trombinoscope


1) l’administrateur
 il dépose des images dans un répertoire « photo/vrac/ » (au moyen d’un fichier .zip), ou un tableau d’images.
 les groupes disponibles seront définis par l’administrateur directement dans un fichier de configuration.

2) l’étudiant
 lors de son premier passage, il doit donner
 son mail
 son groupe
 et cliquer sur sa photo
 la photo est identifiée, et déplacée dans un répertoire « photo/numéro du groupe/ »
 lors des passages suivants :
 il peut visualiser le trombinoscope (choix par groupe, par nom, par prénom)

5.1.1 Faire un dessin précis du site (avec des flèches pour indiquer le passage d’information, le nom
et le numéro associé de chaque page)

5.1.2 Définir la table SQL et la créer dans une BDD « trombinoscope ».

5.1.3 Définir et écrire les pages php.

Support de cours PHP Page 26


Support de TP PHP IRSII 2013-2014

Si vous avez du temps, la page administrateur doit permettre de modifier un étudiant :


 Le supprimer
 Remettre sa photo dans vrac
 Changer ses informations
 Le changer de groupe

Support de cours PHP Page 27


Support de TP PHP IRSII 2013-2014
6 PHP Séance n°6 – devoir = 2h (version 2008)
6.1 Devoir papier : écrire 3 algorithmes
EXO1 : Écrire deux pages en php. La première permet à l’utilisateur de saisir 2 nombres.
La deuxième page affiche les 2 nombres (le plus grand sera en gras <b>).

EXO2 : Expliquez le principe du client-serveur pour PHP par un dessin & moins de 10 lignes.

EXO3 : Écrire le jeu du pendu.

6.2 Devoir machine : écrire 2 algorithmes


EXO1 : Définir le programme « exo1.php » qui affiche dans un formulaire à choix multiple le nom des fichiers
du dossier courant. Ajouter un bouton pour « supprimer » le fichier et un bouton pour « afficher » le fichier.

EXO2 : Écrire le jeu du pendu « pendu.php ». Le mot sera stocké dans une variable de session.

OU

EXO2 : Écrire un programme « exo2.php » qui permet de saisir dans un menu déroulant (de 1 à 8) le nombre de
champs texte à saisir. Les saisir, valider et les sauvegarder dans une table.
(BDD= « devoir1 », table = « exo2 », champ= « nom » (varchar(20)).

Support de cours PHP Page 28


Support de TP PHP IRSII 2013-2014
7 PHP Séance n°7 – lilbrairie FPdf = 2h
7.1 Exercice n°1 : Utilisation de la classe fpdf

7.2 Installez et testez la classe fpdf et ses exemples


Faire le tutoriel donné avec fpdf.

7.2.1 Utilisation de la classe fpdf


Faire une page php qui demande :
 Le nom du serveur MySql
 Le nom de la base de données
 Le nom d’utilisateur et son mot de passe
 Le nom d’une table
La validation entraîne la création d’un fichier pdf qui contient les données de la table dans un tableau.

7.2.2 Exercice n°2 : Utilisation de la classe fpdf


Ecrire la page php qui génère le trombinoscope au format PDF.
En haut : le nom du groupe.
Dans un tableau, les étudiants avec leur nom, prénom.

Il sera possible de choisir le nombre de photos sur la page (en nombre de colonnes)

Support de cours PHP Page 29


Support de TP PHP IRSII 2013-2014
8 PHP Séance n°8 – Ajax, Jquery et PHP – 4h
AJAX avec JQuery.
Ajax permet d’échanger des données entre la page html (via le javascript) et un fichier sur le serveur (php) sans
recharger la page html !

8.1 Ajax avec JQuery

8.1.1 Exemple à tester


Créer un fichier « page.html » avec le script javascript suivant :
Vous importerez bien sur le fichier de jquery : http://jquery.com/download/
<html><body>

<script type="text/javascript">
function go(){
$.ajax({
type: "POST",
url: "question.php",
data: "valeur=5",
success: function(data){
alert( "Data Saved: " + data );
$('#mabalise').html(data); // javascript remplace le code html de « #mabalise »
}
});
}
</script>

bonjour<br/>
les doublons : <div id="mabalise"></div><br/>
<input type=submit name=action value='recalculer les notes' onclick='go( );' >
</body></html>

Et sur le serveur, la page « question.php » : qui écrit (avec echo) le texte qui sera retourné de manière transparente
à la variable « $data » de la page, et le javascript continue son exécution en success...

<?php
session_start();
if (!isset($_SESSION["nbQ"])) $_SESSION["nbQ"]=1 ;

$v=$_POST["valeur"] ;

$nbQ=$_SESSION["nbQ"];

$_SESSION["nbQ"]=$nbQ+$v;
$data="valeur :".$nbQ;
header("content-type: text/plain");
header("Pragma: no-cache");
header("Expires: 0");
echo ($data);
?>
Tester et comprendre le mécanisme…

8.1.2 Exemple à tester pour retourner un tableau à 2 colonnes :


La page php peut écrire (et donc retourner) un tableau.
Sur le serveur, la page « question2.php » : qui écrit (avec echo) le texte qui sera retourné de manière transparente
à la variable javascript « data » de la page, et le javascript continue son exécution en success...

<?php
$data = " { \"aaData\": [\n"; //[[1, 2], [11, 22], [111, 222]] }";

Support de cours PHP Page 30


Support de TP PHP IRSII 2013-2014
header("Content-type: application/txt");
header("Pragma: no-cache");
header("Expires: 0");
echo ($data);
?>
Affichez le tableau à 2 dimensions dans le javascript.

8.1.3 Votre premier programme ajax avec php


On veut faire deux menus déroulants :
Choix1 Choix2
arbre Sapin
arbre Chêne
arbre Olivier
animal Chien
animal Chat
Dans le premier menu déroulant, choisir « arbre » ou « animal », et le 2ème menu apparaît avec uniquement les
choix2 possibles (la page « question3.php » retourne le code html via ajax).

8.1.4 Conseil : comment trouver les erreurs dans un page ajax ?


1. Vous pouvez facilement faire une sortie texte dans le programme ajax :

/******************************************
$Fnm = "/tmp/mon_fichier.txt";
$inF = fopen($Fnm,"a");
$ptr = ftell($inF);
fwrite($inF,"***\n action= $Query \n ***");
fclose($inF);
******************************************/
...reste à aller voir le fichier « /tmp/mon_fichier.txt »

2. autre solution (complémentaire) : utiliser firebug et regarder le retour de prg php.

8.1.5 Exercice avec deux pages : le jeu « plus grand-plus petit » avec Ajax
- Au début, le jeu place un nombre aléatoire dans une variable de session en php (cf « début du jeu » avec ajax).
Ensuite, le joueur dispose de 10 essais pour trouver le nombre. Toujours sur la même page...avec ajax. Qui
retourne si le nombre est ok ou pas...
- la page php peut retourner :
« perdu », « trop grand», « trop petit » ou « gagné »
la page « html » définit les fonctions
function debut( )
et
function essai(nb){
data: "valeur="+nb

et dans le javascript, vous traitez le resultat :


success: function(data){

alert( "Data Saved: " + data );

if (data=...)...
}

8.2 Visualiser des tables avec DataTables

Support de cours PHP Page 31


Support de TP PHP IRSII 2013-2014
C’est LA méthode pour afficher un tableau ! http://datatables.net/

Affichez une table de votre BDD.


Voici le code php (à adapter) : « tableau.php »
$requete = <<< STR
SELECT *
FROM
WHERE ;
STR;

$Query = sprintf($requete , $_SESSION["id"] );


$result = mysqli_query($Query);

if (!$result) {
echo "ERR02B - Impossible d'exécuter la requête ($requete) dans la base : " .
mysql_error();
exit;
}

$data = "{ \"aaData\": [\n"; //exemple = [[1, 2], [11, 22], [111, 222]]
}";
$i=0;
while ( $aRow = mysql_fetch_array( $result ) )
{
if ($i!=0) $ligne=",\n";
else $ligne="";
$i++;

$ligne=$ligne."[\"".addslashes($aRow['numero'])."\",\"".addslashes($aRow['nom'])."\",\
" "."<input TYPE='submit' value='voir' onclick='voir(".$aRow['id'].");' >"." \",\"
"."<input TYPE='submit' value='suppr' onclick='sup(".$aRow['id'].");' >"." \" ]";

$data=$data.$ligne;
}
$data=$data."\n] }";
header("content-type: text/plain");
header("Pragma: no-cache");
header("Expires: 0");
echo ($data);

et du côté du html (dans un fichier « tableau.html ») , voici un exemple de dataTables :

$(document).ready(function() {
$('#example').dataTable( {
// "bProcessing": true,
"bServerSide": false,
"aaSorting" : [[2, 'asc']],
"sAjaxSource": "page.php",
"oLanguage": { "sProcessing": "Traitement en cours...",
"sLengthMenu": "Afficher _MENU_ éléments",
"sZeroRecords": "Aucun élément à afficher",
"sInfo": "Affichage de l'élement _START_ à _END_ sur _TOTAL_
éléments",
"sInfoEmpty": "Affichage de l'élement 0 à 0 sur 0 éléments",
"sInfoFiltered": "(filtré de _MAX_ éléments au total)",
"sInfoPostFix": "",
"sSearch": "Rechercher:",
"sUrl": "",
"oPaginate": {
"sFirst": "Premier",
"sPrevious": "Précédent",
"sNext": "Suivant",
Support de cours PHP Page 32
Support de TP PHP IRSII 2013-2014
"sLast": "Dernier"
}
}
} );

et le code html pour afficher le tableau (aussi dans le fichier « tableau.html ») :

<table cellpadding="0" cellspacing="0" border="1" class="display" id="example" width="95%"


>
<thead>
<tr>
<th>numéro</th>
<th>nom</th>
<th>Visualiser</th>
<th>Supprimer</th>
</tr>
</thead>
<tbody>
</tbody>
</table>

… il faudra importer les bons fichiers...

8.3 afficher des pop-up dynamiques


Voir ce site (c’est obligatoire !) http://jqueryui.com/dialog/#modal-form

Choisissez un exemple, implémentez-le...

dans le html :
<div id="dialogAjouter" title="Ajouter un Etudiant" style="display:none;">
<button id="ajouter1">Ajouter un nouvel étudiant</button>

et la fonction javascript
$(function() {
$( "#ajouter1" )
.click(function() {
$("#dialogAjouter").dialog({
modal: true,
buttons: {
"Ajouter": function() {
num=document.getElementsByName("anumero")[0].value;
nom=document.getElementsByName("anom")[0].value;
prenom=document.getElementsByName("aprenom")[0].value;

$.ajax({
type:'GET',
url:'ajouter_etudiant.php',
data:'a=a&num=' + num + '&nom=' + nom + '&prenom='+
prenom,
success: function(data){
alert(data);
$("#dialogAjouter").dialog( "close" );
},
error: function(){
alert('failure');
}
});
},
Cancel: function() {

Support de cours PHP Page 33


Support de TP PHP IRSII 2013-2014
$( this ).dialog( "close" );
}
},
});
});
});

8.4 Exercice n°4 : reprendre l’application « trombinoscope ».


Utilisez les technologies
- Popup pour changer le nom/groupe des étudiants (dans un menu administrateur)
- Ajax pour rendre plus conviviale le site de trombinoscope (Faites preuve d’imagination).

Support de cours PHP Page 34


Support de TP PHP IRSII 2013-2014
9 PHP Séance n°9 – Transaction & ADODB
9.1 la banque – les transactions
Créer une BDD « banque », une table innoDB « compte » avec 5 clients…

Faire trois pages php :


DAB
Guichet (cheque et liquide)
Achat carte bleue

Le but : faire fonctionner les trois pages en même temps, pour empêcher les conflits d’écritures simultanées sur
la table « compte ».

9.2 Analyser le corrigé du TP6


Pour sécuriser un site, vous pouvez « cacher » les pages appelées.
Tester le code suivant : « tp6-num.zip » (avec et sans numéro)
Tester le code suivant « tp7-num-session.zip » (avec numéro & temps de connexion limité).

9.3 Analyser le corrigé du TP3 : l’adapter à ADODB


Installer & Tester « tp7-adodb-tp3-bis.zip »

ADOBD (Active Data Objects Data Base) permet d'effectuer simplement des requêtes en SQL sous MySQL,
PostgreSQL, Interbase, Informix, Oracle, MS SQL 7, Foxpro, Access, ADO, SAP DB, SQLite, Sybase, DB2 pour
des applications Web faite en PHP.

sitographie :
http://fr.wikipedia.org/wiki/ADOdb
http://phplens.com/lens/adodb/docs-adodb.htm

9.4 Reprendre le corrigé du trombinoscope : l’adapter à ADODB


- à la fin, installer le trombinoscope avec un autre SGBDR… (l’installation doit prendre moins de 5 minutes)

9.5 Projet – gestion de bateaux


On veut gérer un port de plaisance qui loue des places pour amarrer les bateaux.

Il y a environ 150 emplacements. Chacun pouvant accepter un type de bateau :


Type A : moins de 5 mètres
Type B : moins de 10 mètres
Type C : moins de 17 mètres

Les propriétaires des bateaux font des réservation à partir d’une date pour un nombre de jours données (par
exemple, à partir du 10/6/2006 pour 3 jours : l’emplacement sera réservé le 10/6, 11/6 et 12/6, l’emplacement
pourra être loué à un autre client à partir du 13/6…).

Les réservations se font exclusivement avec le type de bateaux.

Chaque bateau est identifié par une immatriculation de 3 caractères suivis de 2 chiffres.

Il sera possible dans le futur, d’obtenir l’agrément pour les plus gros bateaux de type D.

Support de cours PHP Page 35


Support de TP PHP IRSII 2013-2014

Support de cours PHP Page 36


Support de TP PHP IRSII 2013-2014
10 PHP Séance n°10 – SMARTY
http://fr.wikipedia.org/wiki/Smarty

Le Modèle MVC « a.php » et « a.tpl »


1 include(_SMARTY);
2 $smarty = new Smarty;

3 $smarty->template_dir = './module';
$smarty->compile_dir = './temp/';
$smarty->config_dir = './temp/';
$smarty->cache_dir = './temp/';

4 // le CODE PHP CALCULE les VALEURS


5 $smarty->assign('tab',$tableau);

6 $smarty->display("$page.tpl");

<HTML><BODY>
CONSULTER
{html_options options=$tab }
</BODY></HTML>

10.1 Exercice n°0 : Tester SMARTY


Télécharger le projet « tp-smarty.zip »
Copier le dossier « tp-smarty » dans « www »
Créer la BDD « trombi »
Utiliser le script SQL « tp-smarty\Base-de-donnees.sql » pour la BDD « trombi »
Modifier la configuration dans « tp-smarty\etc\variable.inc »
Tester

10.2 Exercice n°1 : Tester les exemples SMARTY


Dans le projet « tp-smarty.zip », créer deux fichiers :
« tp-smarty\module\c.php » et « tp-smarty\module\c.tpl »
Et ajouter dans « tp-smarty\etc\config.inc » l’association « num=3  page=c »
Lire la documentation en Français sur le site de SMARTY
Dans chaque exemple, vous avez 2 parties : le code php ET le code Smarty. Faire du copier-coller des exemples
dans, respectivement, « c.php » et « c.tpl »
Regardez le résultat dans « http://localhost/tp-smarty/index.php?num=3 »

… et recommencez avec divers exemples…

10.3 Exercice n°2 : reprendre trombinoscope avec SMARTY


à la fin, installer le trombinoscope avec une autre BDD… (en moins de 5 minutes)

10.4 Exercice n°3 : projet – gestion de bateaux avec SMARTY


Reprendre l’exercice de la séance n°7 en utilisant SMARTY.

Support de cours PHP Page 37


Support de TP PHP IRSII 2013-2014
11 PHP Séance n°11 - CMS – 2h
11.1 Exercice n°1 : les CMS
Un système de gestion de contenu ou SGC ((en) Content Management Systems ou CMS) est une famille de
logiciels destinés à la conception et à la mise à jour dynamique de site web ou d'application multimédia. Ils
partagent les fonctionnalités suivantes :
Ils permettent à plusieurs individus de travailler sur un même document ;
Ils fournissent une chaîne de publication (workflow) offrant par exemple la possibilité de mettre en ligne le
contenu des documents ;
Ils permettent de séparer les opérations de gestion de la forme et du contenu ;
Ils permettent de structurer le contenu (utilisation de FAQ, de documents, de blogs, de forums de discussion,
etc.) ;

http://fr.wikipedia.org/wiki/Syst%C3%A8me_de_gestion_de_contenu

Voici des exemples réels de sites SPIP :


http://www.urbasolar.com/
http://www.theatre2lacte.com/
http://fabulousnet.free.fr/
http://www.chantier-capvert.fr/
http://www.apard.com/

11.2 Exercice n°2 : faire un site avec SPIP

11.2.1 Création du site


Installer SPIP en local dans un dossier (voir le fichier PDF joint).
http://www.spip.net/rubrique151.html
Notez sur un papier les mots de passe et les comptes utilisateurs que vous définissez.

11.2.2 Structuration et données du site :


Faire un site qui reprend ce cours « Introduction PHP »
Vous créerez une rubrique par séance : 10 en tout.
Chaque rubrique possèdera une sous rubrique par exercice.
Chaque sous-rubrique possèdera au moins un article (l’énoncé) et des fichiers ou des liens s’ils sont disponibles…
N’oubliez pas de publier les articles

11.2.3 La mise en forme du site (squelette)


Utilisez un squelette tout fait pour rendre votre site agréable.

11.3 Exercice n°3 : insérer une page php dans Spip


Il vous sera utile d’inclure des pages php dans votre article spip.
http://www.eklesia.net/spip.php?article47

11.4 Exercice n°4 : vous pouvez essayer de faire le même travail avec Joomla
Il vous sera utile d’inclure des pages php dans votre article spip.

Support de cours PHP Page 38


Support de TP PHP IRSII 2013-2014
12 PHP Séance n°12 – utilisation d’outils PHP
Regardez les applications ci-dessous et installez-testez celles que vous voulez.

12.1 PHPCheckStyle
Configurer et utiliser cet outil pour rendre plus standard votre code php.

12.2 Insérer googleMap en PHP


Un exercice simple et sympathique :
http://fardeen.biz/index.php/tutoriel-application-google-map-avec-php/

12.3 AjaxTerm : un xterm via le web


http://nawer.freecontrib.org/index.php?2006/05/24/203-ajaxterm-un-terminal-a-distance-dans-un-simple-
navigateur

12.4 GLPI
Gestion Libre du parc informatique
Voir fichier zip

Support de cours PHP Page 39

Vous aimerez peut-être aussi