Vous êtes sur la page 1sur 67

Chapitre 1 : Rappels sur le langage PHP Pr. A.

MESRAR

Pr. A. MESRAR --Module Web Avanc--

HTML est un langage de marquage indiquant au navigateur comment doit afficher une page web. Il permet de mettre en forme des textes, d'afficher des images, de crer des tableaux etc...
Pr. A. MESRAR --Module Web Avanc--

Code source de la page web


<html> <head> <title>Le titre de la page web</title> </head> <body> Ceci est une <b>page web</b> avec des <big> mots </big> en gras, en <i>italique</i> et <table width="20%" border="1"> <tr> <td>un</td> <td>tableau</td> </tr> </table> </body> </html>

Pr. A. MESRAR --Module Web Avanc--

Pr. A. MESRAR --Module Web Avanc--

Oui, mais comment :


Afficher l'heure actuelle Traiter les formulaires Envoyer automatiquement des news Grer une base de donnes Nombre de visiteurs etc...

Pr. A. MESRAR --Module Web Avanc--

Langage de script interprt (pas compil) Donc, portable (le mme script marchera sur plusieurs plateformes) Simple apprendre Librairies riches Open Source (gratuit)

Pr. A. MESRAR --Module Web Avanc--

1994 : cration de PHP par Rasmus Lerdorf (compter le nombre de visiteurs de son cv!). Mme anne : connexion des bases de donnes rendue possible. 1995 : PHP 2 1998 : PHP3 (prog. Oriente Objet). 2000 : PHP 4 2004 : PHP 5 (15 millions de pages web)
Pr. A. MESRAR --Module Web Avanc--

<html> <head> <title>Horloge</title> </head> <body> <p> Nous sommes le <?php echo date('d m Y H:i'); ?> </p> </body> </html>

Pr. A. MESRAR --Module Web Avanc--

Lorsqu'un client requiert la page prcdente, le serveur traite les instructions php et les traduit en html. On obtient :
<html> <head> <title>Horloge</title> </head> <body> <p> Nous sommes le 07 10 2010 20:22 </p> </body> </html>

Pr. A. MESRAR --Module Web Avanc--

Code entre <?php et ?> Inclus dans du html Sensible la casse : header() Header() Instructions termines par ; Blocs d'instructions dlimits par { . . . } Commentaires avec // en fin de ligne ou /* . . . */

Pr. A. MESRAR --Module Web Avanc--

Les Variables et Constantes

Pr. A. MESRAR --Module Web Avanc--

Prfixes par $ Dclaration :


La dclaration n'est pas obligatoire Rgles de nommage identiques java et C. La variable est cre la premire utilisation (ex: $var = 1). Par dfaut, elle vaut NULL

Quelques fonctions utiles :


isset() teste l'existence d'une variable unset() supprime une variable empty() teste si une variable est vide

Pr. A. MESRAR --Module Web Avanc--

Dfinies grce define Ex : define('PI', 3.14); On ne peut pas les modifier.


define('CARRE',$a*$a) //ERREUR

Par convention, on les crit en majuscules.

Pr. A. MESRAR --Module Web Avanc--

13

PHP est faiblement typ (typage implicite) PHP connat en interne diffrents types :
Entiers : -152 Flottants : 13.2 Chanes : " Ceci est une chaine " Boolens : TRUE, FALSE Tableaux

Fonctions utiles : get_type(), is_integer(), is_string() ...

Pr. A. MESRAR --Module Web Avanc--

<html> <head> <title>Les Variables</title> </head> <body> <?php $v=10; echo $v; $b=true; echo "<br>".$b; $b1=(2<3); echo "<br>".$b1; $b2=false; echo"<br> ".getType($b2); $var1 = "a"; if(isset($var1)) echo "existe"; else echo "n'existe pas"; ?> </body> </html>

Pr. A. MESRAR --Module Web Avanc--

Oprateurs numriques : identiques ceux du C et du java.


Affectation : = Calcul : + - * / Combin : += -= *= /= Modulo : % Comparaison : == < <= > >= != Incrmentation/dcrmentation : ++ --

Exemple :
$a = 1; $a++; $a+=4; $a *= 2;
Pr. A. MESRAR --Module Web Avanc--

Sans interpolation : ' . . . ' $a="Ali"; Echo 'Salut. $a'; // affichera : // salut. $a

Avec interpolation " . . . " $a="Amine"; Echo "Salut. $a";


Pr. A. MESRAR --Module Web Avanc--

// affichera : // salut Amine

Affichage : echo Exemple : echo "<p>La variable $a</p>"; Oprateur : Concatnation :


$a="bonjour " ; $b=" ami " ; $c=$a.$b; $c sera "bonjour ami"

Comparaison : == < <= >= !=

Pr. A. MESRAR --Module Web Avanc--

PHP utilise la syntaxe du C (et du java)


($i=0;$i<100 100; for ($i=0;$i<100; $i++){ ... } switch($var){ case 'a' : . . . break; default: . . . break; } ($a>10 10){ if ($a>10){ ... } else{ ... }

($i<100 100){ while ($i<100){ ... }

Pr. A. MESRAR --Module Web Avanc--

1. Qu'affichent les instructions suivantes?


$a=1; $b="2+$a"; $a=2; echo
$b . $a;

Ecrire un programme, qui en fonction de la valeur d'une variable $jour (entier compris entre 1 et 7) affiche le jour de la semaine.

2.

3.

Faites afficher la table de multiplication par 7.

Pr. A. MESRAR --Module Web Avanc--

Les fonctions

Pr. A. MESRAR --Module Web Avanc--

21

Syntaxe similaire au C (et java), sans le typage Dfinition d'une fonction : function factoriel($n){
. . . return $res; }

Appel d'une fonction : $nombre= fact(4); Les variables dfinies l'extrieur de la fonction n'y sont pas connues. Rcursivit possible. En sortie, les paramtres passs la fonction sont inchangs (passage par valeur). Mais on peut passer les paramtres par rfrence (&):

Function puissance(&$nombre,&$indice){ . . . }
Pr. A. MESRAR --Module Web Avanc-22

Passage Par valeur


Mode par dfaut Les paramtres effectifs gardent leur valeurs aprs lappel de la fonction, mme si cette dernire les modifie lintrieur de son corps. => la fonction travaille sur une copie des paramtres
Pr. A. MESRAR --Module Web Avanc-23

Exemple : fonction_pass_val.php
<?php function doubler($a) { $a=$a*2; print("valeur du paramtre dans la fonction:$a<br>"); } $b=5; print("valeur du paramtre avant l'appel:$b<br>"); doubler($b); print("valeur du paramtre aprs l'appel:$b<br>"); ?>
Pr. A. MESRAR --Module Web Avanc-24

Passage par rfrence


Le changement dun paramtre effectif sera perceptible de lextrieur.
=> la fonction travaille sur le paramtre et non sur sa copie

Notation : prcder le paramtre formel par & function nom_fonction(&$param1,&$param2,)

Pr. A. MESRAR --Module Web Avanc--

25

Exemple :fonction_passage_ref.php
<?php function doubler(&$a) { $a=$a*2; print("valeur du paramtre dans la fonction:$a<br>"); } $b=5; print("valeur du paramtre avant l'appel:$b<br>"); doubler($b); print("valeur du paramtre aprs l'appel:$b<br>"); ?>
Pr. A. MESRAR --Module Web Avanc-26

Fonctions rcursives
Dans le corps dune fonction on peut trouver un appel elle-mme Exemple : fonction_recursive.php factorielle
<?php function fact($a) { if ($a==1) return(1); else return($a*fact($a-1)); } $b=5; $c=fact($b); print("$b ! = $c"); ?>
Pr. A. MESRAR --Module Web Avanc-27

Ecrivez la fonction qui calcule le carr d'un nombre. Qu'affiche le programme ci-dessous? Et si l'on rajoute un & devant chacun des paramtres?
//dclaration de la fonction function puissance($nombre,$indice){ $resultat=$nombre; for ($x=$indice; $x>0; $x--){ $resultat = $resultat * $nombre; } $nombre=$resultat; return $nombre; } //Utilisation de la fonction $nombre=2; $indice=5; echo $nombre." puissance ".$indice." vaut ".puissance($nombre, $indice)."<br>";
Pr. A. MESRAR --Module Web Avanc-28

Les tableaux

Pr. A. MESRAR --Module Web Avanc--

29

Un tableau est une structure qui peut contenir plusieurs valeurs Les donnes dun tableau ne sont pas forcment de mme type

10

bon

12.3

La taille dun tableau est dynamique

Pr. A. MESRAR --Module Web Avanc--

30

Deux types de tableaux :


Tableaux scalaires Tableaux associatifs

Pr. A. MESRAR --Module Web Avanc--

31

Dclarations : $fruits=array(); Affectations :


$fruits[0]="pommes"; $fruits[1]= "poires"; $fruits[]="oranges";

Dclaration+affectation :
$fruits=array("pommes", "poires", "oranges");

Quelques fonctions utiles sur les tableaux : sizeof(), sort(), count(), in_array() ...

Pr. A. MESRAR --Module Web Avanc--

Dclaration : $calories=array(); Affectations : $calories["pommes"]=300; Affectation + dclaration :

$calories["bananes"]=500;

$calories=array("pommes"=>300, "bananes"=>500);

Exemple : $tab["nom"]="Le

Cadet"; echo $tab["nom"];

Pr. A. MESRAR --Module Web Avanc--

33

Pour un tableau numrique, mthode classique:


for ($i=0; $i<count($tab); $i++){ echo "$tab[$i]\n"; }

Pour un tableau associatif : foreach


foreach ($tableau as $indice => $valeur){ echo "$indice : $valeur\n"; }

Pr. A. MESRAR --Module Web Avanc--

34

On peut crer des tableaux de tableaux => tableaux multidimensionnels. Pour parcourir de tels tableaux, il faut en gnral imbriquer plusieurs boucles foreach Exemple :
$couleurs=array("vives"=>array("rouge"=>"FF0000", "vert"=>"00FF00", "bleu"=>"0000FF"), "douces" => array("rose"=>"FE9ABC", "jaune"=>"FDF189"));

Pr. A. MESRAR --Module Web Avanc--

35

Crez un tableau qui associe au Maroc, l'Algrie, et la Tunisie leurs capitales (Rabat, Alger, Tunis), puis faites crire une phrase qui recense les pays prsents dans le tableau et affiche leurs capitales ("la capitale du Maroc est Rabat", etc)

Pr. A. MESRAR --Module Web Avanc--

36

PHP et MySQL

Pr. A. MESRAR --Module Web Avanc--

37

PHP interagit avec des bases de donnes pour produire des pages web dynamiques PHP : l'interfaage avec plusieurs SGBDs
Access DB2 MySQL Oracle SQL server ...

MySQL reste le plus utilis avec PHP

Pr. A. MESRAR --Module Web Avanc--

38

Pourquoi MySQL ?
Disponible pour toutes les plates-formes (Windows, UNIX, Linux) Prsent chez de nombreux hbergeurs Gratuit et Open source (www.mysql.com) Simple installer et utiliser (Requtes SQL) Performance : rapidit, scalabilit, scurit et stabilit Gestion puissante des privilges et des droits daccs Outil accompagnant puissant phpMyAdmin

Pr. A. MESRAR --Module Web Avanc--

39

Architecture de MySQL
Client MySQL

Serveur MySQL

Client Apache/PHP

BD

Pr. A. MESRAR --Module Web Avanc--

40

Objectifs :
Cration de documents web partir dune BD Alimentation dune BD partir du web Mise jour dune BD partir du web Suppression dans une BD
Pr. A. MESRAR --Module Web Avanc-41

Du ct Serveur MySQL
Reoit la requte SQL Excute la requte SQL Renvoie le rsultat

Pr. A. MESRAR --Module Web Avanc--

42

Du ct de PHP
Extrait les donnes du client Envoie la requte SQL MySQL Reoit le rsultat de la requte Formate et envoie le rsultat au client

Pr. A. MESRAR --Module Web Avanc--

43

Serveur

Client

Serveur WEB
Page HTML Donnes de la requte

Requte
Rseau

Page HTML

Moteur PHP
Formatage de la rponse

rponse Serveur MySQL

Requte SQL BD

Pr. A. MESRAR --Module Web Avanc--

44

Client
Serveur

Serveur WEB
Page

Requt e
Rseau

Page HTML

HTML

Donnes de la requte

Moteur PHP
Formatage de la rponse

rponse

Requte SQL Serveur MySQL

Le serveur MySQL nest pas forcement sur la mme machine du serveur web BD

Pr. A. MESRAR --Module Web Avanc--

45

Cration/suppression et modification des tables CREATE, DROP, ALTER Slection/Ajout/modification et suppression des donnes SELECT, INSERT, UPDATE, DELETE

Pr. A. MESRAR --Module Web Avanc--

46

Rserves ladministrateur
Cration de BD : CREATE DATABASE Attribution des privilges : GRANT

Pr. A. MESRAR --Module Web Avanc--

47

Moteur PHP Demande de Connexion Acceptation de Connexion Slection dune BD

Serveur MySQL

Acceptation de la slection de BD Requte SQL Rsultat de la Requte SQL

Fermeture de Connexion

Fermeture de Connexion
Pr. A. MESRAR --Module Web Avanc-48

Etablissement de Connexion MySQL


$lien_db = mysql_connect (serveur, login, passwd)

Slection d une BD
mysql_select_db(base)

Excution dune requte et renvoi du rsultat


$resultat = mysql_query ($requete)

Formatage du rsultat sous forme dobjet


mysql_fetch_array ($resultat)

Fermeture de connexion
mysql_close($lien_db)

Pr. A. MESRAR --Module Web Avanc--

49

Une seule ligne dans le rsultat


mysql_fetch_row($resultat)
retourne une ligne de rsultat sous forme de tableau indic

mysql_fetch_array($resultat)
retourne une ligne de rsultat sous forme de tableau associatif

Pr. A. MESRAR --Module Web Avanc--

50

Exemple 1 <?php $liendb = mysql_connect("localhost","root",""); mysql_select_db("BD", $liendb ); $sql = "SELECT nom, prenom FROM Etudiant where CNE = 99"; $resultat = mysql_query($sql, $liendb ); $eleve = mysql_fetch_array($resultat); $nom = $eleve["nom"]; $prenom = $eleve["prenom"]; echo "$nom <br> $prenom"; mysql_close($liendb); ?>

Pr. A. MESRAR --Module Web Avanc--

51

Plusieurs lignes dans le rsultat


mysql_num_rows($resultat)
retourne le nombre de lignes du rsultat de la requte

Plusieurs appels des fonctions


mysql_fetch_row($resultat) mysql_fetch_array($resultat)
A chaque appel le pointeur du rsultat passe la ligne suivante

Pr. A. MESRAR --Module Web Avanc--

52

Exemple2 <?php $liendb = mysql_connect("localhost","Dupont","toto"); mysql_select_db("BD", $liendb ); $sql = "SELECT nom, prenom FROM Etudiant"; $resultat = mysql_query($sql, $liendb ); while( $eleve = mysql_fetch_array($resultat)) { $nom = $eleve["nom"]; $prenom = $eleve["prenom"]; echo "$nom $prenom <br>"; } mysql_close($liendb); ?>

Pr. A. MESRAR --Module Web Avanc--

53

<?php $liendb = mysql_connect("localhost","Dupont","toto"); mysql_select_db("BD", $liendb ); $sql = "SELECT nom, prenom FROM Etudiant; $resultat = mysql_query($sql, $liendb ); $n = mysql_num_rows($resultat); for($i=0;$i<$n;$i++) { $eleve = mysql_fetch_array($resultat); $nom = $eleve["nom"]; $prenom = $eleve["prenom"]; echo "$nom $prenom <br>"; } mysql_close($liendb); ?>

Pr. A. MESRAR --Module Web Avanc--

54

mysql_free_result($resultat)
libre les ressources alloues pour stocker un rsultat de requte

mysql_num_fields($resultat)
retourne le nombre de champs du rsultat de la requte

mysql_affected_rows($resultat)
retourne le nombre d'enregistrements de la base affects par une requte (cration, mise jour...)

Pr. A. MESRAR --Module Web Avanc--

55

Interface Graphique conviviale Simplicit


pas besoin de retenir la syntaxe du langage SQL

Rserv ladministrateur
Cration de BD, des tables Cration des utilisateurs Attributions des privilges Dmarrage et arrt du serveur MySQL etc

Pr. A. MESRAR --Module Web Avanc--

56

Complment de cours Les Fichiers

Pr. A. MESRAR --Module Web Avanc--

57

Objectifs
Stockage permanent des donnes chez le serveur Accs ces donnes nimporte quel moment Modifier ou supprimer ces donnes

Pr. A. MESRAR --Module Web Avanc--

58

Utilisation des fichiers


Stockage des donnes de petite taille (ne ncessitant pas une BD) Template ou fichier modle
Gnrer une page HTML partir dun fichier modle

Utilisation conjointe avec les BDs


Cache

Pr. A. MESRAR --Module Web Avanc--

59

Ouverture dun fichier


Indispensable avant toute utilisation du fichier Notation $fd = fopen(nom_fichier,mode);
nom_fichier : nom du fichier local ou une URL(fichier distant) mode : mode douverture du fichier $fd : identificateur qui sera utilis pour exploiter le fichier

Pr. A. MESRAR --Module Web Avanc--

60

Modes douverture dun fichier


a : ajout la fin du fichier sil existe, sinon le fichier est cr a+ : lecture et ajout la fin du fichier sil existe, sinon le fichier est cr r : mode lecture uniquement r+ : lecture et criture au dbut du fichier w : criture seule, cration du fichier ou crasement de son contenu sil existe w+ : criture et lecture, cration du fichier ou crasement de son contenu sil existe

Pr. A. MESRAR --Module Web Avanc--

61

Lecture dun fichier


fread($fd,n);
Lit n caractres du fichier ou ce qui reste si la fin du fichier est atteinte

fgets($fd,[n]);
Lit n caractres si n est prsent Lit tous les caractres jusqu la fin de ligne ou la fin du fichier si n est absent

fgetc($fd);
Lit un seul caractre du fichier

Pr. A. MESRAR --Module Web Avanc--

62

Ecriture dans un fichier


fwrite($fd,$chaine,[n]);
Ecrit n caractres de $chaine dans le fichier si n est prsent Ecrit toute la chane $chaine dans le fichier si n est absent

fputs($fd,$chaine,[n]);
Mme chose que fwrite
Pr. A. MESRAR --Module Web Avanc-63

Dplacement dans un fichier


rewind($fd);
Se positionner au dbut dun fichier

fseek($fd,n,[ref]);
Se dplacer de n caractres partir dune position donne
SEEK_SET partir du dbut (par dfaut) SEEK_CUR partir de la position courante SEEK_END partir de la fin

Pr. A. MESRAR --Module Web Avanc--

64

Suppression, renommage et copie d un fichier


unlink(nom_fichier);
Supprime le fichier

rename(ancien_nom,nouveau_nom);
Renomme le fichier ancien_nom par nouveau_nom

copy(source,destination)
Copie le fichier source dans le fichier destination
Pr. A. MESRAR --Module Web Avanc-65

Test de la fin d un fichier


feof($fd);
Teste si la fin du fichier est atteinte

Taille dun fichier


filesize(nom_fichier);
Retourne le nombre de caractres contenus dans le fichier

Pr. A. MESRAR --Module Web Avanc--

66

Fermeture d un fichier

fclose($fd);
Ferme le fichier la fin de son utilisation

Pr. A. MESRAR --Module Web Avanc--

67