Vous êtes sur la page 1sur 166

Langage PHP

Ct Serveurs

Principe
Construire une application rpartie :

Sexcutant entre autre sur le poste hbergeant le serveur HTTP. Utilisant le serveur HTTP pour accder aux postes clients. Utilisant HTML comme langage de base pour linteraction avec les utilisateurs. En particulier, recours des clients lgers de type navigateurs WEB.(utilise aussi l'appellation client lger pour les applications laissant 2 quasiment tout le traitement au serveur)

Scripts ct serveur : les quatre leaders du march Perl PHP (Php Hypertext Preprocessor) JSP (Java Server Pages)

ASP (Active Server Pages)


3

Modle du fonctionnement du PHP

Modle du fonctionnement du PHP

Architecture (avec Apache)

APACHE PHP
POST/GET

Rpertoires web

Historique
PHP = Hypertext PreProcessor Site officiel : http://www.php.net Cr en 1994 par Rasmus Lerdorf (PHP : Personnal Home Page.) Premire version : ensemble de scripts perl PHP3 : interprt PHP4 : compil PHP5 : compil Objet
7

PHP, qu'est-ce que c'est ?


Un langage pour la programmation du serveur Permet d'inclure des parties programmes dans du HTML Trs proche du langage C Trs riche en fonctions, notamment pour l'accs aux bases de donnes

Premier programme
La conception du script PHP est ralis avec un diteur quelconque, Ct serveur :
<HTML> <HEAD><TITLE>Mon premier programme</TITLE></HEAD> <BODY> il est sur le serveur <?php print date ("H i s"); ?> </BODY> </HTML>

Premier programme
Ct navigateur
<HTML> <HEAD> <TITLE> Heure </TITLE> </HEAD> <BODY> <P> Sur le serveur, il est actuellement 16:39:27 </P> </BODY> </HTML>

10

Gnralit
Extension du fichier : .php pour du PHP 4 .php3 pour du PHP 3 Dlimiteur : <? ... ?> <?php ... ?> <SCRIPT language="php"> ... </SCRIPT>
11

Les bases du langage

Syntaxe du langage

12

Commentaires
Un script php se commente comme en C : Exemple :
<?php // commentaire de fin de ligne /* commentaire sur plusieurs lignes */ # commentaire de fin de ligne comme en Shell Unix ?>

Tout ce qui se trouve dans un commentaire est ignor. Il est conseill de commenter largement ses scripts.
13

Exemples de commentaires
<?php echo 'Ceci est un test'; // Ceci est un commentaire sur une seule ligne, style c++ /* Ceci est un commentaire sur plusieurs lignes */ echo 'Ceci est un autre test'; echo 'Et un test final'; # Ceci est un commentaire style shell sur une seule ligne ?>

14

Syntaxe du langage
Variables, types et oprateurs

15

Variables, types et oprateurs (I)


Le typage des variables est implicite en php.

Il nest donc pas ncessaire de dclarer leur type au pralable ni mme de les initialiser avant leur utilisation.

Les identificateurs de variable sont prcds du symbole "$" (dollars). Exemple : $variable. Les variables peuvent tre de type entier (integer), rel (double), chane de caractres (string), tableau (array), objet (object), boolen (boolean)... Il est possible de convertir une variable en un type primitif grce au cast (comme en C). Exemple :

$str = "12"; // $str vaut la chane "12" $nbr = (int)$str; // $nbr vaut le nombre 12
16

Boolen
C'est le type le plus simple. Un boolen reprsente une valeur de vrit. Il peut valoir TRUE ou FALSE.
Note: Le type boolen a t introduit en PHP 4.

Syntaxe

Pour spcifier un boolen littral, utilisez le mot cl TRUE ou FALSE. Les deux sont insensibles la casse.
17

Exemple
<?php $valeur = true; echo '<br/>affichage valeur TRUE: "'.$valeur.'"'; $valeur = false; echo '<br/>affichage valeur FALSE: "'.$valeur.'"'; exit; ?>

18

Les entiers
Un entier est un nombre appartenant la classe Z = {..., -2, -1, 0, 1, 2, ...}. Syntaxe

Les entiers peuvent tre spcifis en notation dcimale (base 10), hexadcimale (base 16), ou octale (base 8), optionnellement prcde d'un signe (- ou +). Pour utiliser la notation octale, prcdez le nombre d'un 0 (zro). Pour utiliser la notation hexadcimale, prcdez le nombre d'un 0x.

19

Exemples
<?php
$a = 1234; // un nombre dcimal $a = -123; // un nombre ngatif $a = 0123; // un nombre octal (quivalent 83 dcimales) $a = 0x1A; // un nombre hexadcimal (quivalent 26 dcimales)

?>

20

Nombres dcimaux
Les nombres dcimaux, (aussi connus comme nombres virgule flottante, "floats", "doubles", ou "real numbers") peuvent tre spcifis en utilisant les syntaxes suivantes :

21

Exemple
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?>

22

Les chanes de caractres


Syntaxe

Une chane de caractres littrale peut tre spcifie de 2 faons diffrentes :


Entoure de guillemets simples Entoure de guillemets doubles

23

Entoure de simple guillemet


Entoure de simple guillemet

La faon la plus simple de spcifier une chane de caractres est de l'entourer de guillemet simple (le caractre '). Pour spcifier un guillemet simple littral, vous devrez l'chapper d'un antislash (\). Pour spcifier un antislash littral avant un guillemet simple, ou la fin d'une chane de caractres, chappez-le deux fois (\\).
24

Exemple
<?php echo 'ceci est une chane simple';
echo 'Vous pouvez galement ajouter des nouvelles lignes dans vos chanes de cette faon';

// Affiche : Voulez-vous supprimer C:\*.*? echo 'Voulez-vous supprimer C:\\*.*?';

// Affiche : Ceci n'affichera pas \n de nouvelle ligne echo 'Ceci n\'affichera pas \n de nouvelle ligne';

25

Entoure de guillemet double


Si la chane de caractres est entoure de guillemet double ("), PHP interprtera plus de squences chappes pour les caractres spciaux :

26

27

Chanes de caractres (II)


Oprateur de concatnation de chanes : . (point)
Exemple 1 :

$a = "Salam"; $b= " tout le monde"; echo $a.$b;


Exemple 2 : $prenom = " Batou "; $nom = $prenom. " Larbi "; Exemple 3 :

$filiere = " 3me anne "; $filiere.= " SIR "; echo $filiere;

28

Chanes de caractres (III)


Affichage dune chane avec print :
Exemples:
print 'Hello Word.'; print "Nom : ". $name; print("Bonjour");

Quelques fonctions:
strlen($str) : retourne le nombre de caractres dune chane strtolower($str) : conversion en minuscules strtoupper($str) : conversion en majuscules trim($str) : suppression des espaces de dbut et de fin de chane substr($str,$i,$j) : retourne une sous chane (entre les positions i et j) strnatcmp($str1,$str2) : comparaison de 2 chanes addslashes($str) : dspcialise les caractres spciaux (, , \) ord($char) : retourne la valeur ASCII du caractre 29

Chanes de caractres (IV)


On peut dlimiter les chanes de caractres avec la syntaxe Here-doc. Exemple :
$essai = <<<EOD Ma chane essai sur plusieurs lignes. EOD; echo $essai;

La valeur de la variable $essai est dlimite par un identifiant que vous nommez librement. La premire apparition de cet identifiant doit tre prcde de 3 signes infrieurs <. Sa deuxime apparition doit se faire en premier sur une nouvelle ligne. 30

Exemple
<HTML> <HEAD> <TITLE>New Document</TITLE> </HEAD> <BODY> <?php $str = <<<EOD Exemple de chane sur plusieurs lignes en utilisant la syntaxe Heredoc. EOD; echo $str; ?> </BODY> </HTML>

31

Variables, types et oprateurs (II)


Quelques fonctions : empty($var) : renvoie vrai si la variable est vide isset($var) : renvoie vrai si la variable existe unset($var) : dtruit une variable gettype($var) : retourne le type de la variable settype($var, type) : convertit la variable en type type (cast) is_long(), is_double(), is_string(), is_array(), is_object(), is_bool(), is_float(), is_numeric(), is_integer(), is_int() Une variable peut avoir pour identificateur la valeur dune autre variable. Syntaxe : ${$var} = valeur; Exemple : $variable = chaineVar; ${$ variable } = 2002; print $chaineVar; // la variable $chaineVar vaut 2002
32

Variables, types et oprateurs (III)


Oprateurs arithmtiques : + (addition), - (soustraction), * (multipli), / (divis), % (modulo), ++ (incrment), --(dcrment). Ces deux derniers peuvent tre pr ou post fixs Oprateurs dassignement : = (affectation), *= ($x*=$y quivalent $x=$x*$y), /=, +=, -=, %=

33

Variables, types et oprateurs (IV)


Oprateurs logiques : and, && (et), or, || (ou), xor (ou exclusif), ! (non) Oprateurs de comparaison : == (galit), < (infrieur strict), <= (infrieur large), >, >=, != (diffrence)

34

Syntaxe du langage

Les Constantes

35

Constantes
Lutilisateur peut dfinir des constantes dont la valeur est fixe une fois pour toute. Les constantes ne portent pas le symbole $ (dollars) en dbut didentificateur et ne sont pas modifiables.
define(var,valeur) : dfinit la constante var (sans $) de valeur valeur
Exemple :
define("author","Irisi "); Print author; // affiche irisi define("MY_Year","2011"); print MY_Year; // affiche 2011
36

Syntaxe du langage

Mathmatiques

37

Mathmatiques
Il existe une myriade de fonctions mathmatiques.

abs($x) : valeur absolue ceil($x) : arrondi suprieur floor($x) : arrondi infrieur pow($x,$y) : x exposant y round($x,$i) : arrondi de x la ime dcimale max($a, $b, $c ) : retourne largument de valeur maximum pi() : retourne la valeur de Pi

38

Mathmatiques
Et aussi :

cos, sin, tan, exp, log, min, pi, sqrt

Nombres alatoires : rand($x,$y) : valeur alatoire entre x et y srand() : initialisation du gnrateur alatoire

39

Syntaxe du langage

Les Tableaux

40

Tableaux (I)
Un tableau peut tre initialis avec la syntaxe array. Exemple :
$name=3; $tab_colors = array('red', 'yellow', 'blue', 'white'); $tab = array(SIR', 2013, 20.5, $name);//on peut mettre nimporte quel type

$prenoms[] = "Ali"; $villes[0] = "Marrakech"; $prenoms[] = "Justin"; $villes[1] = "Londres"; $prenoms[] = "Moha"; $villes[2] = "Atlass"; echo $prenoms[1]; // pour accder au 2me lment

41

Tableaux (II)
Parcours dun tableau.
$tab = array(SIR, 3, FSTG); Exemple 1 :
$i=0; while($i < count($tab)) { // count() retourne le nombre dlments echo $tab[$i].\n; $i++; }

Exemple 2 :
foreach($tab as $elem) { echo $elem.\n; }

La variable $elem prend pour valeurs successives tous les lments du tableau $tab.
42

Tableaux (III)
Quelques fonctions:

count($tab), sizeof : retournent le nombre dlments du tableau in_array($var,$tab) : teste si la valeur de $var existe dans le tableau $tab

list($var1,$var2) : transforme une liste de variables en tableau


range($i,$j) : retourne un tableau contenant un interval de valeurs shuffle($tab) : mlange les lments dun tableau sort($tab) : trie alphanumrique les lments du tableau

43

Tableaux associatifs (I)


Un tableau associatif est appel aussi dictionnaire ou hashtable. On associe chacun de ses lments une cl dont la valeur est de type chane de caractres. Linitialisation dun tableau associatif est similaire celle dun tableau normal.
Exemple 1 : $personne = array("Nom" => "SIR", "Prnom" => " 3me anne"); Exemple 2 : $personne["Nom" ] = " SIR ";

$personne[" Prnom "] = " 3me anne "; Ici la cl Nom est associe la valeur SIR.

44

Tableaux associatifs (II)


Parcours dun tableau associatif.
$personne = array ("Nom" => " SIR", "Prnom" => " 3me anne
Exemple 1 : foreach($personne as $elem) { echo $elem; } ");

Ici on accde directement aux lments du tableau sans passer par les cls.
Exemple 2 : foreach($personne as $key => $elem) { echo $key : $elem; } Ici on accde simultanment aux cls et aux lments.
45

Exemple
<?php // ceci $a = array( 'couleur' => 'rouge', 'gout' => 'sucre' , 'forme' => 'rond', 'nom' => 'pomme', 4 // cette cl sera 0 ); // est compltement quivalent $a['couleur'] = 'rouge'; $a['gout'] = 'sucre'; $a['forme'] = 'rond'; $a['nom'] = 'pomme'; $a[] = 4; // cette cl sera 0 $b[] = 'a'; $b[] = 'b'; $b[] = 'c'; // va crer le tableau array( 0 => 'a' , 1 => 'b' , 2 => 'c' ) // ou plus simplement array('a' , 'b' , 'c' ) ?>

46

Les tableaux
Quelques fonctions array_count_values($tab) : retourne un tableau associatif contenant les valeurs du tableau $tab comme cls et leurs frquence comme valeur array_keys($tab) : retourne un tableau contenant les cls du tableau associatif $tab array_values($tab) : retourne un tableau contenant les valeurs du tableau associatif $tab array_search($val,$tab) : retourne la cl associe la valeur $val Llment dun tableau peut tre un autre tableau.

Les tableaux associatifs permettent de prserver une structure de donnes.

Exemples
<?php $array = array(1, "hello", 1, "world", "hello"); print_r(array_count_values($array)); ?> rsultats: Array ( [1] => 2 [hello] => 2 [world] => 1 ) ------------------------------------------------------------<?php $array = array(0 => 100, "color" => "red"); print_r(array_keys($array)); $array = array("blue", "red", "green", "blue", "blue"); print_r(array_keys($array, "blue")); $array = array("color" => array("blue", "red", "green"), "size" => array("small", "medium", "large")); print_r(array_keys($array)); ?> rsultats: Array ( [0] => 0 [1] => color ) Array ( [0] => 0 [1] => 3 [2] => 4 ) Array ( [0] => color [1] => size ) --------------------------------------------------------------------------<?php $array = array("size" => "XL", "color" => "gold");

Les tableaux
Quelques fonctions reset($tab) : place le pointeur sur le premier lment current($tab) : retourne la valeur de llment courant next($tab) : place le pointeur sur llment suivant prev($tab) : place le pointeur sur llment prcdant each($tab) : retourne la paire cl/valeur courante et avance le pointeur
Exemple :
<?php $colors = array("red", "green", "blue"); $nbr = count($colors); reset($colors); for($i=1; $i<=$nbr; $i++) { echo current($colors)."<br>"; next($colors) } ?>

Les fonctions I
Une fonction est un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel dans le corps du programme principal. Comme tout langage de programmation. PHP permet lcriture des fonction. La syntaxe est la suivante: function ma_fonction($argument1, $argument2,) { Liste des instructions; Return ($valeur_de_retour); } Une fonction peut ne pas avoir de valeurs dentre (arguments) ou encore retourner de valeurs (le cas dune fonction daffichage de message derreur).

Les fonctions II
Variable locale et variable globale dune fonction Toute variable dclare au sein dune fonction est de porte locale de cette fonction. Elle nest pas reconnue dans le reste du programme. global permet de travailler sur une variable de porte globale au programme. Le tableau associatif $GLOBALS permet daccder aux variables globales du script ($GLOBALS[var] accde la variable $var).
Exemple :
<?php function test() { $foo = "variable locale"; echo "$foo dans le contexte global : " . $GLOBALS["foo"] . "<br>"; echo "$foo dans le contexte courant : " . $foo . "\n"; } $foo = "Exemple de contenu"; test(); ?>

Les fonctions III


Forcer le passage de paramtres par rfrence Exemple : function change(&$var) { // force le passage par rfrence $var += 100; // incrmentation de +100 } $toto = 12; // $toto vaut 12 change($toto); echo $toto; // $toto vaut 112

Les fonctions IV
Mme sans paramtre, un entte de fonction doit porter des parenthses ( ). Les diffrents arguments sont spars par une virgule et le corps de la fonction est dlimit par des accolades { }. Quelques exemples : function afficher($str1, $str2) { // passage de deux paramtres echo $str1, $str2; } function bonjour() { echo Bonjour; } function GetColor() { return black; } // passage daucun paramtre

// retour dune variable

Les fonctions V
En version 3 du PHP (version interprte), une fonction ne peut tre appele quaprs sa dfinition. En version 4 et 5 (compiles) une fonction peut tre appele avant sa dfinition. Exemple : function f1() { // dfinition de la fonction f1 echo fonction f1; } f1(); // appel de la fonction f1 dfinie plus haut f2(); // appel de la fonction f2 pas encore dfinie function f2() { // dfinition de la fonction f2 echo fonction f2; } Cet exemple affichera : fonction f1fonction f2!.

Les fonctions VI
Il est possible de faire retourner plusieurs valeurs dune fonction en utilisant les tableaux ayant pour lments les variables retourner. Dans lappel de la fonction, il faudra alors utiliser la procdure list() qui prend en paramtre les variables qui ont doit affecter les valeurs retournes. On affecte list() le retour de la fonction. Exemple : function trigo($nbr) { return array(sin($nbr), cos($nbr), tan($nbr)); // retour dun // tableau } $r = M_PI; list($a, $b, $c) = trigo($r); /* affectation aux variables $a,$b et $c des lments du tableau retourn par la fonction trigo */

Fonctions dans une autre fonction


<?php function foo() { function bar() { echo "Je n'existe pas tant que foo() n'est pas appel.\n"; } } /* Impossible d'appeler bar() ici car il n'existe pas. */ foo(); /* Maintenant, nous pouvons appeler bar(), car l'utilisation de foo() l'a rendu accessible. */ bar(); ?>

Valeur par dfaut des arguments de fonctions


<?php function servir_cafe ($type = "cappuccino") { return "Servir un $type.\n"; } echo servir_cafe(); echo servir_cafe(null); echo servir_cafe("espresso"); ?>

Les arguments valeur par dfaut doivent tre en premier : valide


<?php function faireunyaourt ($flavour, $type = "acidophil us") { return "Prparer un bol de $type $flavour.\n"; } echo faireunyaourt ("framboise"); // fonctionne co mme voulu ?>

Les valeurs de retour


<?php function carre ($num) { return $num * $num; } echo carre (4); ?>

Retourner un tableau d'une fonction


<?php function petit_nombre() { return array (0, 1, 2); } list ($zero, $un, $deux) = petit_nombre(); var_dump($zero, $un, $deux); ?>

Exemple de fonction variable


<?php function foo() { echo "dans foo()<br />\n"; } function bar($arg = '') { echo "Dans bar(); l'argument tait '$arg'.<br />\n"; } // Ceci est une fonction dtourne de echo function echoit($string) { echo $string; } $func = 'foo'; $func(); // Appel foo() $func = 'bar'; $func('test'); // Appel bar() $func = 'echoit'; $func('test'); // Appel echoit() ?>

Exemple de mthode variable


<?php class Foo { function Variable() { $name = 'Bar'; $this->$name(); // Appelle la mthode Bar() } function Bar() { echo "C'est Bar"; } } $foo = new Foo(); $funcname = "Variable"; $foo->$funcname(); // Appelle $foo->Variable()

?>

Fonctions rcursives
<?php function recursion($a) { if ($a < 20) { echo "$a\n"; recursion($a + 1); } }

recursion(3); ?>

Les inclusions
On peut inclure dans un script PHP le contenu dun autre fichier. require insert dans le code le contenu du fichier spcifi mme si ce nest pas du code php. ( quivalent au prprocesseur #include du C) Syntaxe: require(fichier.php); include value et insert chaque appel (mme dans une boucle) le contenu du fichier pass en argument. Syntaxe: include(fichier.php); Les inclusions sont trs utiles lors de lappel dune base de donne. Les paramtres de connexions sont stocks sur un fichiers part.

Exemple avec include()


vars.php
<?php
$color = 'verte'; $fruit = 'pomme'; ?>

test.php
<?php echo "Une $couleur $fruit"; // Une include 'vars.php'; echo "Une $couleur $fruit"; // Une verte pomme ?>

Inclusion de fichiers dans une fonction


<?php

function foo() { global $couleur;


include 'vars.php'; echo "Une $couleur $fruit"; } /* vars.php est dans le contexte de foo() * * donc $fruit n'est pas disponibles hors de * * cette fonction. $couleur l'est, car c'est * * une variable globale */ foo(); // Une verte pomme echo "Une $couleur $fruit"; // Une verte

?>

La fonction require permet dinsrer le contenu dun fichier lintrieur dun autre fichier. Cette fonction a donc pour effet de raliser un copier coller lendroit o elle est crite. Vous comprendrez immdiatement lintrt de cette fonction ! En effet, vous avez dsormais la possibilit dconomiser lcriture de code ou de texte. La syntaxe : <?php require("NomDuFichier"); ?> La description : NomDuFichier est le nom du fichier depuis lequel vous souhaitez raliser linsertion.

Exemple
Voici le fichier entete.php : <html> <head> <title> Le site INFOS PLUS</title> </head> <body> <h1>Le site INFOS PLUS</h1> <h1> Le site d'astuces votre services...</h1> <p>Contactez-moi au numro de tlphone suivant :</p> <p>INFOS PLUS PARIS : <i>01.99.01.01.01</i></p> <p>Je vous attends ! Venez vite !</p> Voici le code du fichier index.php :

<? // insertion de l'entte require("entete.php"); ?> <h1>bonjour</h1> <h1>Prsentation</h1> <p>Ce site vous propose des centaines d'astuces concernant l'utilisation de l'outil informatique.</p> <p>C'est d'actualit, non ?</p> <p>Pour continuer la visite, cliquez sur le lien page suivante...</p> <p><a href="suite.php">Page suivante</a></p> </body> </html> Voici le code du fichier suite.php :
<? // insertion de l'entte require("entete.php"); ?> <h1>La suite</h1> <p>Salut !</p> <p>Maintenant, si vous voulez continuer de visiter ce site, il va falloir me dire d'o vous tes...</p> <p>En fait, il n'y a pas de suite !</p> <p><a href="index.php">Alors retourner la page d'accueil...</a></p> </body>

Arrt prmatur
Pour stopper prmaturment un script, il existe deux fonctions. die arrte un script et affiche un message derreur dans le navigateur. Exemple : if(mysql_query($requette) == false) die(Erreur de base de donnes la requte); exit larrte aussi mais sans afficher de message derreur. Exemple : function mafonc() { exit(); } Ces fonctions stoppent tout le script et pas seulement le bloc en cours.

Les sessions I
Les sessions permettent le passage des variables (variables de session) dune page une autre tout au cours de la visite du site web. Les variables de session ne sont pas visibles dans lURL et peuvent tre de types diffrents (tableau, float). Cette mthode permet de conserver les paramtres de connexions dun visiteur et conserver ses choix (sauvegarder son panier ecommerce par exemple) Les informations de sessions sont conserves en local sur le serveur tandis quun identifiant de session est post sous la forme dun cookie chez le client.

Les sessions II
Fonctions session_start() : dmarre une session session_destroy() : dtruit les donnes de session et ferme la session session_start() doit tre prsente sur toutes les pages qui utilisent les variables de sessions et doit tre dclare avant tout envoie au navigateur du client. Une variable de session est manipule de la faon suivante:

$_SESSION[nom_de_la_variable]
Exemple: $_SESSION[etablissement]=ENSA;

Les fichiers I
Les fichiers en PHP sont trs souvent utilises pour stocker les donnes. Les bases de donnes sont encore plus puissantes ce niveau, mais il est parfois ennuyeux de les utiliser pour accueillir certaines formes de donnes. Exemple : un compteur de visite Il existe une multitude de fonctions ddies l'utilisation des fichiers. La plus simple est la fonction file_get_contents(). Elle prend comme paramtre le nom du fichier et elle affecte son contenu une variable type chane de caractre. Exemple: Le fichier test.txt contient le texte suivant: Salut, cest un test Pour afficher le contenu de ce fichier sur une page web: $str=file_get_contents(test.txt); echo $str; // affiche: Salut, cest un test

Les fichiers II
La manipulation de fichier se fait grce un identifiant de fichier. Quelques fonctions: fopen($file ,$mode) : ouverture du fichier identifi par son nom $file et dans un mode $mode particulier, retourne un identificateur de fichier $fp ou FALSE si chec fclose($fp) : ferme le fichier identifi par le $fp fgets($fp, $length) : lit une ligne de $length caractres au maximum. Si la longueur de la ligne est infrieur $length, lit jusqu la fin de la ligne. fputs($fp, $str) : crit la chane $str dans le fichier identifi par $fp fgetc($fp) : lit un caractre feof($fp) : teste la fin du fichier retourne TRUE ou FALSE file_exists($file) : indique si le fichier $file existe dans le dossier courant. Retourne TRUE ou FALSE. Le nom du fichier peut tre une arborescence de rpertoire.

Les fichiers III


Quelques fonctions - suite - : filesize($file) : retourne la taille du fichier $file en octet filetype($file) : retourne le type du fichier $file unlink($file) : dtruit le fichier $file copy($source, $dest) : copie le fichier $source vers $dest readfile($file) : affiche le fichier $file rename($old, $new) : renomme le fichier $old en $new fseek($fp,$pos) : place le pointeur du fichier identifi par $fp la position $pos. Modes douverture de fichiers: 'r' lecture seule 'r+' lecture et criture 'w' cration et criture seule 'w+ cration et lecture/criture

Les fichiers IV
Exemple typique daffichage du contenu dun fichier : <?php $file = fichier.txt ; if( $fd = fopen($file, r)) { // ouverture du fichier en lecture while ( ! feof($fd) ) { // teste la fin de fichier $str .= fgets($fd, 1024); /* lecture jusqu fin de ligne o des 1024 premiers caractres */ } fclose ($fd); // fermeture du fichier echo $str; // affichage } else { die(Ouverture du fichier <b>$file</b> impossible.); } ?>

Les fichiers V
La fonction fopen permet douvrir des fichiers dont le chemin est relatif ou absolu. Elle permet aussi douvrir des ressources avec les protocols HTTP ou FTP. Elle renvoie FALSE si louverture choue. Exemples : $fp = fopen(../docs/rapport.txt, r); $fp = fopen(http://www.php.net/,r); $fp = fopen(ftp://user:password@www.fstg-marrakech.ac.ma/, w);

Dates et heures I
Les fonctions de dates et heures sont trs utilises sur internent. En PHP il existe plusieurs fonctions qui permettent de manipuler les dates. Quelques fonctions : date($format) : retourne une chane de caractres contenant la date et/ou lheure locale au format spcifi getdate() : retourne un tableau associatif contenant la date et lheure checkdate($month, $day, $year) : vrifie la validit dune date mktime ($hour, $minute, $second, $month,$day, $year) : retourne le timestamp UNIX correspondant aux arguments fournis cest--dire le nombre de secondes entre le dbut de l'poque UNIX (1er Janvier 1970) et le temps spcifi time() : retourne le timestamp UNIX de lheure locale

Dates et heures II
Les formats pour date d j l D w z m n F M Y y h g Jour du mois sur deux chiffres [01..31] Jour du mois sans les zros initiaux Jour de la semaine textuel en version longue et en anglais Jour de la semaine textuel en trois lettres et en anglais Jour de la semaine numrique [0..6] (0: dimanche) Jour de l'anne [0..365] Mois de l'anne sur deux chiffres [01..12] Mois sans les zros initiaux Mois textuel en version longue et en anglais Mois textuel en trois lettres Anne sur 4 chiffres Anne sur 2 chiffres Heure au format 12h [01..12] Heure au format 12h sans les zros initiaux

Dates et heures III


Les formats pour date - suite H G i s a A L S t Z Heure au format 24h [00..23] Heure au format 24h sans les zros initiaux Minutes [00..59] Secondes [00.59] am ou pm AM ou PM Boolen pour savoir si l'anne est bissextile (1) ou pas (0) Suffixe ordinal anglais d'un nombre (ex: nd pour 2) Nombre de jour dans le mois donn [28..31] Dcalage horaire en secondes [-43200..43200]

Dates et heures IV
Les cls du tableau associatif retourn par getdate seconds : secondes minutes : minutes hours : heures mday : jour du mois wday : jour de la semaine, numrique mon : mois de l'anne, numrique year : anne numrique yday : jour de l'anne numrique weekday : jour de la semaine, textuel complet en anglais month : mois textuel complet en anglais

Les Instructions

81

Tests : if... then... else


Si une condition est vrai alors on excute des instructions sinon (facultatif) on en excute d'autre. On peut changer de condition avec un 'elseif'. syntaxe :
if ( condition1 ) { Action 1 } elseif ( condition2 ) { Action 2 } } else { Action 3 }
82

Tests : if... then... else


exemple :
if ($a==$b) { echo "A est } elseif ($a > echo "A est } else { echo "A est }

gal B"; $b) { suprieur B"; infrieur B";

83

Tests : switch... case... default


la condition est associe la valeur d'une variable, de plus l'instruction 'break'.
Exemple : switch ($a) { case $b: echo "A est gal B"; break; case >$b: echo "A est suprieur B"; break; default: echo "A est infrieur B"; break; }
84

Boucles
while ( condition ) { Action; }
do { Action; } while (condition); for (expr1; expr2; expr3) { Action; }

85

Boucles
$i=1; while ($i <= 10) { echo "- $i -"; $i++; } $i=1; do { echo "- $i -"; $i++; } while ($i <= 10) for ($i = 1; $i <= 10; $i++) { echo "- $i -"; }
86

Break;Continue
Break :Cette instruction permet de sortir de n'importe quelle boucle, n'importe quel moment. Continue : Cette instruction permet de ne pas excuter le code contenu dans la boucle et de passer l'itration suivante. for ($i=1; $i<=10; $i++) { if ($i<=5) { echo $i; } else { break; } echo "- "; } // cette boucle affichera : 1 - 2 - 3 - 4 - 5

87

Interaction avec lusager


get, post et les formulaires

88

Bonnes pratiques
Il faut absolument vrifier toute valeur reue de la part dun usager (par exemple dans $_GET).

La variable est-elle initialise ? La variable est-elle du bon type ? La variable contient-elle une valeur raisonnable ?

89

Interaction avec lusager Formulaires HTML

90

Formulaires HTML
Le langage HTML permet de dfinir des formulaires en se servant du conteneur <form>.

On peut ainsi crer des pages beaucoup plus interactives quavec seulement des liens

91

Formulaires HTML (Suite)


Le conteneur <form> accepte plusieurs arguments:

action: lURL du script ou du programme dclencher (en principe, sur le serveur) method: post ou get

get inclut les paramtres dans lURL, directement visibles pour lusager post inclut les paramtres dans le corps de la requte HTTP
92

Formulaires HTML : Exemple POST


exemple (fichier test.html) :

<HTML> <FORM ACTION="test.php" METHOD=POST> <INPUT TYPE=hidden NAME= IGSI" VALUE="bonjour"> Nom : <INPUT TYPE=text NAME="nom"> <INPUT TYPE=submit VALUE="Envoyer"> </FORM> </HTML>

93

Formulaires HTML : Exemple GET


Code HTML classique :
<form action="traitement.php" method="get"> <p> Formation: <input type="text" name="Form" /> <br /> cole: <input type="text" name="ecole" /> <input type="submit" value="OK" /> </p> </form>

94

Formulaires HTML : Exemple GET


On rcupre les donnes et on les affiche (fichier traitement.php)
<?php $formation = $_GET["Form"]; $ecole = $_GET["ecole"]; echo "Vous tes de l'cole $ecole."; echo " <br /> "; echo "Vous tes en ".$formation."."; ?>
95

Autre utilit de $_GET


Adresse : http://serveur/page.php?a=bonjour&b=bye

$_GET["a"] vaut "bonjour" $_GET["b"] vaut "bye"

96

Transmission
Chaque champ a un nom GET : les donnes sont transmises dans lURL test.php POST : transmission dans le protocole HTTP (invisible sur lURL)

97

Champs de formulaire : <INPUT>


Trs gnral: saisie de texte, ou choix dans des listes. L'attribut TYPE vaut:

TEXT pour les chanes de caractres HIDDEN pour les champs cachs CHECKBOX pour un choix multiple RADIOBOX pour un choix exclusif SUBMIT pour dclencher l'action FILE pour transmettre un fichier
98

Champs de formulaire : <INPUT> (Suite)


<input type= "file"> <textarea></textarea> <select><option></select> <input type= "checkbox"> <input type= "radio"> <input type= "hidden"> <input type= "password"> <input type= "text"> Fichier Zone de texte Zone de liste Case cocher Bouton doption Champ invisible Mot de passe Champ

99

Champs <SELECT>
Permet de choisir une ou plusieurs valeurs dans une liste
<SELECT NAME='realisateur' SIZE=3> <OPTION VALUE=1>Alfred Hitchcock <OPTION VALUE=2 SELECTED>Maurice Pialat <OPTION VALUE=3>Quentin Tarantino </SELECT>
100

Champs <SELECT>: MULTIPLE


L'option MULTIPLE permet de slectionner plusieurs valeurs
<HTML> <form action= test.php" method="post"> Nom : <input type="text" name="Master" VALUE="Master" <br /> Email : <input type="text" name="igsi"><br /> COURS : <br /> <select multiple name= cours[]"> <option value=" BD ">BD</option> <option value=" java ">java</option> <option value=" php ">php</option> </select><br /> <input type="submit" name="submit" value="me contacter!"> </form> </HTML>

101

Champ <TEXTAREA>
Pour entrer du texte libre:
<TEXTAREA NAME= description COLS=30 ROWS=3> texte libre de description </TEXTAREA>

L'attribut MAXLENGTH indique la longueur maximale du texte.


102

Traitement des donnes en PHP


On rcupre, sous forme de variable PHP, les champs d'un formulaire Pour les valeurs scalaires -> une variable Pour les fichiers -> un nom de fichier temporaire

103

Que se passe-t-il quand on valide ?


Le programme client transmet au programme serveur les informations sous la forme:
$_POST["titre"]=t $_POST["annee"]=a

Et on peut maintenant utiliser ces donnes pour fabriquer une page HTML
<?php if ($_POST["annee"]<1920) echo Desole, on a pas.; ?>
104

Passage de valeurs multiples

105

Passage de valeurs multiples


<H1>Passage de valeurs multiples</H1> <FORM ACTION="ExPHP.php" METHOD=POST"> Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre" > <TABLE><TR><TH>Prnom</TH><TH>Nom</TH></TR> <TR><TD><INPUT TYPE=TEXT SIZE=30 NAME="prenom[]"> <TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]"> <TR><TD><INPUT TYPE=TEXT SIZE=30 NAME="prenom[]"> <TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]"> <TR><TD><INPUT TYPE=TEXT SIZE=30 NAME="prenom[]"> <TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]"> </TABLE> <H1>Votre choix</H1> <INPUT TYPE=SUBMIT VALUE='Valider'> <INPUT TYPE=RESET VALUE='Annuler'> </FORM>

106

Que se passe-t-il quand on valide ?


Le programme client transmet au programme serveur les infos sous la forme: titre=t&prenom[]=p1&nom[]=n1&prenom[]=p2&nom[]=n2&... Pour le script PHP, cela donne:

<?php $titre = $_POST['titre']; $prenom=$_POST['prenom']; $nom=$_POST['nom']; echo "Pour le film $titre j'ai reu les acteurs suivants :<P>\n"; for ($i=0; $i <3; $i++) echo "<B> $prenom[$i] $nom[$i]<B><BR>\n";
?>

=> on cre deux tableaux PHP !

107

Ce que fait le script


Une

boucle sur les tableaux permet de rcuprer les valeurs.

<?php $titre = $_POST['titre']; $prenom=$_POST['prenom']; $nom=$_POST['nom']; echo "Pour le film $titre j'ai reu les acteurs suivants :<P>\n"; $nbActeurs = count($prenom); for ($i=0; $i < $nbActeurs; $i++) echo "<B> $prenom[$i] $nom[$i]<B><BR>\n"; ?>

->

A utiliser aussi pour les champs SELECT multiples.

108

Les Fonctions

109

Les Fonctions
Comme dans tout langage structur, en PHP, les fonctions sont la base dune programmation claire et efficace. Une fonction est une sorte de sous-programme isol du reste du code,

Excutable tout moment, depuis nimporte quelle partie du code principal ou nimporte quelle autre fonction, par simple appel. De plus, les avantages des fonctions sont :

La non rptition de la mme squence de code De cet avantage dcoulent : Le gain de productivit. La meilleure lisibilit du code. La maintenance facilite.

110

Fonction : Dclaration
Dclaration :

La syntaxe de dclaration sappuie sur le mot cl function. Suivi du nom de la fonction, puis de parenthses (obligatoires) destines accueillir les ventuels paramtres passer la fonction.

exemple 1: function bonjour( ) { echo Bonjour ! ; } exemple 2: function bonjour2( ) { return Bonjour ! ; }

111

Dclaration, paramtres, valeurs de retour


function Hello($qui, $texte = 'Salam') { if(empty($qui)){ // $qui est vide, on retourne faux return false; }else{ echo "$texte $qui"; // on affiche le texte return true; // fonction excute avec succs } }

112

Ainsi cette fonction peut tre appele de deux faons diffrentes


<?php // Passage des deux paramtres hello("cher ami", "Bienvenue"); // affiche "Bienvenue cher ami" // Utilisation de la valeur par dfaut du deuxime paramtre hello("cher ami"); // affiche Salam cher ami" ?>

Travailler sur des variables

Variables globales ou variables locales.

Global
Une variable prcde du mot cl global sera visible dans l'ensemble du code, c'est--dire que sa porte ne sera pas limite la fonction seulement. Ainsi, toutes les fonctions pourront utiliser et modifier cette mme variable

Le niveau static permet de dfinir une variable locale la fonction, qui persiste durant tout le temps d'excution du script. Par dfaut, la variable possde le niveau local, c'est--dire que la variable ne sera modifi qu' l'intrieur de la fonction et retrouvera la valeur qu'elle avait juste avant l'appel de fonction la sortie de celle-ci.

<?php $chaine = "Nombre de camions : "; function ajoute_camion($mode='') { global $chaine; static $nb=0; $nb++; // on incrmente le nombre de camions if($mode == "affiche"){ echo $chaine.$nb; // on affiche le nombre de camions } } ajoute_camion(); // nb == 1 ajoute_camion(); // nb == 2 ajoute_camion(); // nb == 3 ajoute_camion("affiche"); // affiche Nombre de camions : 4 ?>

Dclaration, paramtres, valeurs de retour


Le passage des paramtres

le passage par valeur. le passage par rfrence

function formation (&$phrase) { $phrase= "Formation Irisi" ; } $chaine = "Phrase qui va disparatre" ; formation ($chaine) ; echo $chaine
118

Les Fichiers

119

Retourner plusieurs variables


Lorsque vous souhaitez qu'une fonction retourne plusieurs valeurs, le plus simple est d'utiliser un tableau. <?php function nom_fonction() { ..... return array( $variable1, $variable2, $variable3 ); // on retourne les valeurs voulues dans un tableau } $retour = nom_fonction(); echo "$retour[0] - $retour[1] - $retour[2]"; ?>

La rcursivit

Les fonctions rcursives sont des fonctions qui s'appellent elles-mmes. Ce type de fonction se rvle indispensable pour parcourir une arborescence par exemple. Voici un exemple. <?php function fonction_recursive($n=0) { $n++; echo "$n <br>"; if($n < 10){ // si n est infrieur 10 on continue fonction_recursive($n); }

} fonction_recursive(); // affiche les nb de 1 10 ?>

Fichiers (I)
La manipulation de fichier se fait grce un identifiant de fichier. Quelques fonctions:

fopen($file [,$mode]) : ouverture du fichier identifi par son nom $file et dans un mode $mode particulier, retourne un identificateur $fp de fichier ou FALSE si chec fclose($fp) : ferme le fichier identifi par le $fp fgets($fp, $length) : lit une ligne de $length caractres au maximum fputs($fp, $str) : crit la chane $str dans le fichier identifi par $fp fgetc($fp) : lit un caractre
122

Fichiers (IV)
La fonction fopen permet douvrir des fichiers dont le chemin est relatif ou absolu. Elle permet aussi douvrir des ressources avec les protocoles HTTP ou FTP. Elle renvoie FALSE si louverture choue. Exemples : $fp = fopen(../docs/faq.txt, r); $fp = fopen(http://www.php.net/,r); $fp = fopen(ftp://user:password@fstg.ma/, w); Les modes douverture : 'r' (lecture seule), 'r+' (lecture et criture), 'w' (cration et criture seule), w+ (cration et lecture/criture), 'a(cration et criture seule ; place le pointeur de fichier la fin du fichier), 'a+' (cration et lecture/criture ; place le pointeur de fichier la fin du fichier)
123

Fichiers (II)
Quelques fonctions (Suite):

feof($fp) : teste la fin du fichier file_exists($file) : indique si le fichier $file existe filesize($file) : retourne la taille du fichier $file filetype($file) : retourne le type du fichier $file unlink($file) : dtruit le fichier $file copy($source, $dest) : copie le fichier $source vers $dest readfile($file) : affiche le fichier $file rename($old, $new) : renomme le fichier $old en $new

124

PHP - La gestion des fichiers textes en php


PHP Fichier - Comment ouvrir un fichier ? La fonction fopen est utilis pour ouvrir un fichier.

Le premier paramtre de la fonction est le nom du fichier et le second paramtre est le mode dans lequel vous pouvez ouvrir votre fichier.

<html> <body> <?php $f=fopen("exemple.txt","r"); ?> </body> </html>

Si la fonction fopen() echoue lors de l'ouverture du fichier, celle ci retourne 0


Exemple : L'exemple ci dessous gnre un message si la fonction fopen() est incapable d'ouvrir le fichier spcifi.

<html> <body> <?php if (!($f=fopen("exemple.txt","r"))) exit("Unable to open file!"); ?> </body> </html>

PHP Fichier - Fermer un fichier


La fonction fclose() est utilis pour fermer un fichier. Syntaxe : <?php fclose($f); ?>

PHP Fichier - crire dans un fichier.


L'criture dans un fichier texte se fait avec la fonction fwrite().

Pour faire des retour la ligne vous devez utiliser : "\r\n"

<?php $f = 'exemple.txt'; $text = "ma chaine de caractres"; $handle = fopen($f,"w");

// regarde si le fichier est accessible en criture if (is_writable($f)) { // Ecriture if (fwrite($handle, $text) == FALSE) { echo 'Impossible d\'crire dans le fichier '.$f.''; exit; }
echo 'Ecriture termin'; fclose($handle); } else { echo 'Impossible d\'crire dans le fichier '.$f.''; } ?>

PHP Fichier Compter le nombre de lignes.


<?php $f = 'exemple.txt'; if(file_exists($f)) { $tab = file($f); // place le fichier dans un tableau $nb = count($tab); // compte le nombre de ligne echo $nb; // Affiche le rsultat }

?>

PHP Fichier - Trouver la fin d'un fichier


La fonction feof() est utilis pour dterminer si le pointeur est plac la fin du fichier ou lister un fichier jusqu'au dernier caractre. <?php if (feof($f)) echo 'Fin du fichier'; ?>

PHP Fichier - Comment lire caractre par caractre ?


<?php if (!($f=fopen("exemple.txt","r"))) exit("Impossible d'ouvrir le fichier."); while (!feof($f)) { $texte=fgetc($f); echo $texte; } fclose($f); ?>

La Messagerie

134

Mail (I)
La fonction mail envoie un message lectronique.

Syntaxe : mail($recipient, $subject, $message[, $headers, $params]); Exemple : $message = "Comment Ecrire du code PhP" mail("vous@fstg.ma", Aide sur PHP, $message);

135

Mail (II)

Exemple plus complet :


<?php $recipient = " abdali <abdali@fstg.ma>, "; $recipient .= " abdali <abdali@yahoo.fr>"; $subject = "Notre rendez-vous"; $message = "Je vous propose le samedi 15 juin \n"; $message .= "--\r\n"; // Dlimiteur de signature $message .= " Fin de message"; $headers = "From: Directeur <directeur@fstg.ma>\n"; $headers .= "Cc: vdirecteur@fstg.ma\n"; mail($recipient, $subject, $message, $headers); ?>

136

Accs aux dossiers

137

Accs aux dossiers (I)


Il est possible de parcourir les rpertoires grce ces quelques fonctions :

chdir($str) : Change le dossier courant en $str. Retourne TRUE si succs, sinon FALSE. getcwd() : Retourne le nom du dossier courant (en format chane de caractres). opendir($str) : Ouvre le dossier $str, et rcupre un pointeur $d dessus si succs, FALSE sinon closedir($d) : Ferme le pointeur de dossier $d. readdir($d) : Lit une entre du dossier identifi par $d. Cest--dire retourne un nom de fichier de la liste des fichiers du dossier point. Les fichiers ne sont pas tris. Ou bien retourne FALSE sil ny a plus de fichier. rewinddir($d) : Retourne la premire entre du dossier identifi par $d.

138

Accs aux dossiers (II)


Exemple 1:
<?php if ($dir = @opendir(.)) { // ouverture du dossier while($file = readdir($dir)) { // lecture dune entre echo "$file<br />"; // affichage du nom de fichier } closedir($dir); // fermeture du dossier } ?>

$dir est un pointeur vers la ressource dossier $file est une chane de caractres qui prend pour valeur chacun des noms de fichiers retourns par readdir()

139

Accs aux dossiers (III)


Il existe un autre moyen daccder aux dossiers : lutilisation de la pseudo classe dir. En voici les attributs : handle : valeur du pointeur path : nom du dossier

En voici les mthodes : read() : quivalent readdir($d) close() : quivalent closedir($d)


Constructeur : dir($str) : retourne un objet dir et ouvre le dossier $str
140

Accs aux dossiers (IV)


Exemple 2 :
<?php $d = dir(.); // ouverture du dossier courant echo Pointeur: .$d->handle.<br />; echo Chemin: .$d->path.<br />; while($entree = $d->read()) { // lecture dune entre echo $entree.<br />; } $d->close(); // fermeture du dossier ?>

Cet exemple est quivalent au prcdent. Ils listent tous les deux les fichiers et sous rpertoires du dossier courant.
141

Dates et heures

142

Dates et heures (I)


Les fonctions de dates et heures sont incontournables sur Internet et sont indispensables pour la conversion en franais des dates fournies par la base de donnes MySQL qui les code au format anglophone (YYYY-DD-MM hh:mm:ss).

Quelques fonctions :
date($format) : retourne une chane de caractres contenant la date et/ou lheure
locale au format spcifi getdate() : retourne un tableau associatif contenant la date et lheure

checkdate($month, $day, $year) : vrifie la validit dune date mktime ($hour, $minute, $second, $month,$day, $year) : retourne le timestamp UNIX correspondant aux arguments fournis cest--dire le nombre de secondes entre le dbut de l'poque UNIX (1er Janvier 1970) et le temps spcifi time() : retourne le timestamp UNIX de lheure locale
143

Dates et heures (III)


Les formats pour date :
d Jour du mois sur deux chiffres [01..31] j Jour du mois sans les zros initiaux l Jour de la semaine textuel en version longue et en anglais D Jour de la semaine textuel en trois lettres et en anglais w Jour de la semaine numrique [0..6] (0: dimanche) z Jour de l'anne [0..365] m Mois de l'anne sur deux chiffres [01..12] n Mois sans les zros initiaux F Mois textuel en version longue et en anglais M Mois textuel en trois lettres Y Anne sur 4 chiffres y Anne sur 2 chiffres h Heure au format 12h [01..12] g Heure au format 12h sans les zros initiaux H Heure au format 24h [00..23] G Heure au format 24h sans les zros initiaux i Minutes [00..59] s Secondes [00.59] a am ou pm A AM ou PM L Boolen pour savoir si l'anne est bissextile (1) ou pas (0) S Suffixe ordinal anglais d'un nombre (ex: nd pour 2) t Nombre de jour dans le mois donn [28..31] 144 U Secondes depuis une poque Z Dcalage horaire en secondes [-43200..43200]

Dates et heures (IV)


Les cls du tableau associatif retourn par getdate :

seconds : secondes minutes : minutes hours : heures mday : jour du mois wday : jour de la semaine, numrique mon : mois de l'anne, numrique year : anne, numrique yday : jour de l'anne, numrique weekday : jour de la semaine, textuel complet en anglais month : mois, textuel complet en anglais
145

Dates et heures (II)


Exemple 1 :
echo date(''Y-m-d H:i:s''); /* affiche la date au format MySQL : 2002-09-27 20:30:29 */

Exemple 2 :
if(checkdate(15-04-2005)) echo cest le grand oral!!! ;

Exemple 3 :
$ aujourdhui = getdate(); $mois =$aujourdhui['mon']; $ jour =$aujourdhui['mday']; $annee =$aujourdhui['year']; echo ''$jour/$mois/$annee''; // affiche 29/4/2006
146

PHP et MySQL

147

Modle client/serveur
Une application SGBD tourne sur le serveur. Le serveur est accessible par un client qui peut tre sur la mme machine ou distant. Un pilote ODBC est disponible. Dans le cas du web, le client est le module PHP.

148

Architecture Apache-PHPMySQL
APACHE PHP
GET /PAGE.PHP

Rpertoires web

MySQL

SQL

149

PHP et MySQL
PHP offre un grand nombre de fonctions pour exploiter les BD dont MySQL.

Connexion Requte Administration Etc

Cependant, PHP doit tre compil avec les bons paramtres.


150

Architecture rseau

Serveur HTTP

Serveur MySQL
HTTP TCP:80 MYSQL TCP:3306

Client web Parefeu


151

PHP, squence de requte


1. 2. 3. 4. 5. Dfinition de la connexion Connexion Excution de la requte Extraction des rsultats de la requte Fin de la connexion, implicite ou spcifie

152

MySQL: commandes de base


Pour se connecter :

mysql -h serveur -u nom -p base CREATE DATABASE nomBase;

Pour crer une base :

Pour crer un utilisateur :


GRANT ALL PRIVILEGES ON nomBase.* TO nom@localhost IDENTIFIED BY motDePasse;
153

Instructions PHP pour MySQL : Connexion


Dfinition de la connexion

int mysql_connect ([string hostname [:port] [:/path/to/socket] [, string username [, string password]]])
int mysql_connect () int mysql_connect (string hostname) int mysql_connect (string hostname:port) int mysql_connect (string username) int mysql_connect (string username, string password) int mysql_connect (string hostname, string username, string password)

Interprtation :

154

Exemple 1 de connexion

if( $id = mysql_connect("localhost", "dut", "passwd") ) { if( $id_db = mysql_select_db("Database") ) { echo "Succs de connexion. "; /* code du script */ } else { die("Echec de connexion la base. "); } mysql_close($id); } else { die("Echec de connexion au serveur de base de donnes. "); }

155

Exemple 2 de connexion
@ mysql_connect("localhost", "igsi", "passwd") or die("Echec de connexion au serveur."); @mysql_select_db("database") or die("Echec de slection de la base.");

Cet exemple est quivalent au prcdent mais plus court crire. Le symbole @ (arobase) permet dviter le renvoie de valeur par la fonction quil prcde. On pourra avantageusement intgrer ce code dans un fichier que lon pourra joindre par include(). Cest aussi un moyen de scuriser le mot de passe de connexion.
156

Instructions PHP pour MySQL : Accs la Base


Slection de la base de donnes

int mysql_select_db (string database_name [, int link_identifier]) int mysql_select_db (string database_name ) int mysql_select_db (string database_name , int link_identifier)

Interprtation

157

Instructions PHP pour MySQL : Requte


Excution de la requte

int mysql_query (string query [, int link_identifier]) int mysql_query (string query ) int mysql_query (string query , int link_identifier)

Interprtation

158

Interrogation (I)

Pour envoyer une requte une base de donne, il existe la fonction : mysql_query($str) qui prend pour paramtre une chane de caractres qui contient la requte crite en SQL et retourne un identificateur de rsultat ou FALSE si chec. Les requtes les plus couramment utilises sont : CREATE (cration dune table), SELECT (slection), INSERT (insertion), UPDATE (mise jour des donnes), DELETE (suppression), ALTER (modification dune table), etc.
159

Interrogation (II)
Exemple : $result = mysql_query("SELECT address FROM users WHERE name=\"$name\""); Cet exemple recherche ladresse de lutilisateur portant pour nom la valeur de la chane $name. Lidentificateur de rsultat $result permettra dautres fonctions dextraire ligne par ligne les donnes retournes par le serveur. Attention, contrairement Oracle SQL, les requtes MySQL ne se terminent pas par un point virgule ; et nautorisent pas les SELECT imbriqus.

160

Extraction des donnes (I)


Une fois la requte effectue et lidentificateur de rsultat acquis, il ne reste plus qu extraire les donnes retournes par le serveur. Sous Oracle, laffichage des rsultats dune requte se fait ligne par ligne, sous MySQL, cest pareil. Une boucle permettra de recueillir chacune des lignes partir de lidentifiant de rsultat.
SQL > SELECT * FROM users; ID NAME ADDRESS ---------------------------1 ali marrakech 2 Fatima casa 3 BACHIR SAFI

1re ligne 2me ligne 3 ligne


161

Instructions PHP pour MySQL : Rsultats


Extraction des rsultats

array = mysql_fetch_row (int result) array mysql_fetch_array (int result) objet mysql_fetch_object (int result) int mysql_close ([int link_identifier])

Fin de la connexion

162

Extraction des donnes (II)


mysql_fetch_row($result) : retourne une ligne de rsultat sous la forme dun tableau. Les lments du tableau tant les valeurs des attributs de la ligne. Retourne FALSE sil ny a plus aucune ligne.
Exemple 1 :
$requet = "SELECT * FROM users"; if($result = mysql_query($requet)) { while($ligne = mysql_fetch_row($result)) { $id = $ligne[0]; $name = $ligne[1]; $address = $ligne[2]; echo "$id - $name, $address <br />"; } } else { echo "Erreur de requte de base de donnes."; }
163

Extraction des donnes (III)


mysql_fetch_array($result) : retourne un tableau associatif. Les cls tant les noms des attributs et leurs valeurs associes leurs valeurs respectives. Retourne FALSE sil ny a plus aucune ligne. Exemple 2 :
$requet = "SELECT * FROM users"; if($result = mysql_query($requet)) { while($ligne = mysql_fetch_array($result)) { $id = $ligne["id"]; $name = $ligne["name"]; $address = $ligne["address"]; echo "$id - $name, $address <br />"; } } else { echo "Erreur de requte de base de donnes."; }

Ici, on accde aux valeurs de la ligne par lattribut dans le tableau associatif. 164

Extraction des donnes (IV)


mysql_fetch_object($result) : retourne un objet. Les attributs de lobjet correspondent ceux de la ligne de rsultat. Et les valeurs des attributs de lobjet correspondent ceux de la ligne de rsultat. Retourne FALSE sil ny a plus aucune ligne. Exemple 3 :
$requet = "SELECT * FROM users"; if($result = mysql_query($requet)) { while($ligne = mysql_fetch_object($result)) { $id = $ligne->id; $name = $ligne->name; $address = $ligne->address; echo "$id - $name, $address <br />"; }} else { echo "Erreur de requte de base de donnes."; }

Ici, on accde aux valeurs par leur attribut dans lobjet.

165

Fonctions additionnelles
Quelques fonctions supplmentaires trs utiles :

mysql_free_result($result) : efface de la mmoire du serveur les lignes de rsultat de la requte identifies par $requet. Trs utile pour amliorer les performances du serveur. mysql_insert_id([$id]) : retourne lidentifiant dun attribut cl primaire AUTO_INCREMENT de la dernire insertion. mysql_num_fields($result) : retourne le nombre dattributs du rsultats. mysql_num_rows($result) : retourne le nombre de lignes du rsultats. Et ainsi permet de remplacer le while par un for.

166