PHP, qu est-ce que c est? Langage de script PHP Un langage pour la programmation du serveur Permet d inclure des parties programmés dans du HTML Un moyen simple (!) de créer dynamiquement des pages HTML Très riche en fonctions, notamment pour l accès aux bases de données Dao (Université d Orléans) Applications Web 82 / 175 Dao (Université d Orléans) Applications Web 83 / 175 Petit exemple PHP Côté client : le formulaire <form action="contact.php" method="post"> <fieldset> <legend>nous contacter</legend> <input type="radio" name="civil" value="m" checked >Monsieur <input type="radio" name="civil" value="mme" >Madame <input type="radio" name="civil" value="mlle" >Mademoiselle <br> Nom et prénom <input type="text" name="nomprenom" size="50pxe" maxlength="10"> <br> Votre commentaire <br> <textarea name="commentaire" rows="5" cols="30"> </textarea> <br> <input type="submit" value="envoyer"> <input type="reset" value="annuler"> </fieldset></form> Petit exemple PHP Le script contact.php, relié au formulaire précédent <!doctype html> <html> <head> <title> Résultat du formulaire</title> </head> <body> <h1> Résultat</h1> $civilite=$_post[ civil ]; $nom=$_post[ nomprenom ]; $comm=$_post[ commentaire ]; echo "J ai reçu les données suivantes, venant du formulaire<br>\n"; echo "Civilité : $civilite <br>"; echo "Nom et prénom : $nom <br>"; echo "Votre commentaire : $comm <br>"; </body> </html> Dao (Université d Orléans) Applications Web 84 / 175 Dao (Université d Orléans) Applications Web 85 / 175
Comment ça marche? Génération de page html : page envoyée au client <!doctype html> <html> <head> <title> Résultat du formulaire</title> </head> <body> <h1> Résultat</h1> J ai reçu les données suivantes, venant du formulair Civilité : M <br>nom et prénom : dupont toto <br> Votre commentaire : un texte de commentaire <br> </body> </html> Dao (Université d Orléans) Applications Web 86 / 175 Dao (Université d Orléans) Applications Web 87 / 175 Commentaires en PHP Tout ce qui se trouve dans un commentaire est ignoré. Il est conseillé de commenter largement ses scripts. Types de commentaires // commentaire de fin de ligne /* commentaire sur plusieurs lignes */ Variables Une variable peut être vue comme un emplacement de la mémoire qui contient une information manipulable par le programme. On peut attribuer à une variable une valeur ou lui appliquer une opération. Syntaxe : $Nom, où Nom est le nom de la variable. Attention : distinction majuscules/minuscules Pas de déclaration de variable en PHP L apparition d un nouveau symbole préfixé par $ entraîne la création d une variable La valeur initiale est "" ou 0 selon le contexte Le typage est dynamique Une même variable peut être utilisée pour stocker plusieurs types de données Des conversions sont appliquées quand c est nécessaire Dao (Université d Orléans) Applications Web 88 / 175 Dao (Université d Orléans) Applications Web 89 / 175
Types scalaires A propos des chaînes de caractères Les entiers $i = 1 ; Les flottants $i = 1.12 ; Les chaînes de caractères $i = "Je suis une chaîne" ; Les booléens $i = true ; NB : 0 ou "" valent false, tout le reste vaut true Apostrophes simples : mise en page quelconque $c = Je suis une chaîne de caractères ; Apostrophes doubles : possibilité d inclure des variables $nom = "Harry Potter"; $c = "Je m appelle $nom"; Dao (Université d Orléans) Applications Web 90 / 175 Dao (Université d Orléans) Applications Web 91 / 175 Production de HTML Fonctions On écrit avec echo ou printf On écrit des chaînes ou des variables En utilisant la concaténation. (point) $nom = "Potter"; $nb=4; echo "Je m appelle $nom"." et je prend le métro ".$nb." fois par jour"; Caractères spéciaux : \n (nouvelle ligne), \r (retour à la ligne), \t (tabulation), \\ (antislash), \$ (caractère dollars), \ (double quote) On peut définir une tache dans une fonction Utile lorsque la tache est demandée dans différents endroits d un script ou dans différents scripts, il suffit d appeler la fonction qui définit la tache : dans un script page.php, on définit deux fonctions function debutpage() { echo "<html>\n"; echo "<body>"\n; function finpage() { echo "</body>\n"; echo "</html>\n"; Dao (Université d Orléans) Applications Web 92 / 175 Dao (Université d Orléans) Applications Web 93 / 175
Utilisation de fonctions Portée de variables Script essaie.php require("page.php"); debutpage(); echo "Bonjour\n"; finpage(); Page HTML générée <html> <body> Bonjour </body> </html> En PHP les variables peuvent être créées et utilisées n importe où dans le script La portée d une variable est la partie du script où la variable peut être utilisée PHP a 3 types de portées de variables locale globale statique Dao (Université d Orléans) Applications Web 94 / 175 Dao (Université d Orléans) Applications Web 95 / 175 Variables globales et locales Mot clé global Une variable déclarée à l extérieure d une fonction est globale et ne peut être utilisée qu à l extérieure de la fonction Une variable déclarée à l intérieure d une fonction est locale et ne peut être utilisée qu à l intérieure de la fonction Le mot clé global permet d accéder à une variable globale à l intérieure d une fonction PHP stocke aussi les variables globales dans le tableau $GLOBAL[index] variable globale $x = 5; // variable globale function test() { // accéder à l intérieure créer une erreur echo "à l intérieure x = $x\n"; test(); echo "à l extérieure x = $x\n"; variable locale function test() { $x = 5; // variable locale echo "à l intérieure x = $x\n"; test(); // accéder à l extérieure créer une erreur echo "à l extérieure x = $x \n"; globale $x = 5; $y = 10; function mytest() { global $x, $y; $y = $x + $y; mytest(); echo $y; // outputs 15 $GLOBAL $x = 5; $y = 10; function mytest() { $GLOBALS[ y ] = $GLOBALS[ x ]+$GLOBALS[ y ]; mytest(); echo $y; // outputs 15 Dao (Université d Orléans) Applications Web 96 / 175 Dao (Université d Orléans) Applications Web 97 / 175
Expresssions Opérateurs Expression : tout ce qui a une valeur 10 $i $i+2 $i == 1 Opérateurs arithmétiques : +,,,/ $i = 2 ; $i = ($i + 1)*3 ; Comparaison : ==, <, >, <=, >= $i == 2 $i <= $j+1 Opérateurs logiques : && (and), (or),! (not) ($i < 1) && ($j >= $i+2) Concaténation de chaînes $nom="harry" ; $prenom="potter" ; $np=$nom." ".$prenom Dao (Université d Orléans) Applications Web 98 / 175 Dao (Université d Orléans) Applications Web 99 / 175 Structure de contrôle conditionnelle Structures de contrôle composées PHP admet les structures de contrôle conditionnelles pour exécuter une partie de code ou une autre Syntaxe if (expression booléenne) { liste d instructions 1 else { liste d instructions 2 Cela signifie que lorsque l expression booléenne est vérifiée, la première liste d instructions sera exécutée. Dans le cas contraire, c est la deuxième liste d instruction qui sera exécutée. Structure if... elseif... else Syntaxe if (expression booléenne 1) { liste d instructions 1 elseif (expression booléenne 2){ liste d instructions 2 else { dernière liste d instructions Dao (Université d Orléans) Applications Web 100 / 175 Dao (Université d Orléans) Applications Web 101 / 175
Structures switch if ($nb<0) { echo "$nb est un nombre negatif"; elseif ($nb>0) { echo "$nb est un nombre positif"; else echo "$nb est nul"; Syntaxe switch (n) { case label1: code to be executed if n=label1; case label2: code to be executed if n=label2; case label3: code to be executed if n=label3;... default: code to be executed if n is different from all labels; Dao (Université d Orléans) Applications Web 102 / 175 Dao (Université d Orléans) Applications Web 103 / 175 switch $favcolor = "red"; switch ($favcolor) { case "red": echo "Your favorite color is red!"; case "blue": echo "Your favorite color is blue!"; case "green": echo "Your favorite color is green!"; default: echo "Your favorite color is neither red, blue, or green!" Les boucles PHP admet également les boucles qui permettent de répéter des instructions de manière itérative. Trois types de boucles : WHILE... DO... WHILE... FOR... FOREACH... Le choix est en fonction du nombre de répétitions : au moins 1 fois ou au moins 0 fois La boucle foreach est adaptée pour les tableaux Dao (Université d Orléans) Applications Web 104 / 175 Dao (Université d Orléans) Applications Web 105 / 175
Boucle WHILE boucle while Syntaxe WHILE while (expression booléenne) { liste d instructions L ordre d exécution : 1 l expression booléenne est examinée, 2 si elle est vraie alors la liste d instructions est exécutée, puis on revient au point 1 (répétition), 3 si elle est fausse alors la boule while s arrête. La liste d instructions est exécutée 0 ou plusieurs fois. Afficher tous les entiers de 0 à un entier stocké dans $n avec la boucle WHILE $i = 0; while ($i <= $n) { echo "$i\t"; $i = $i+1; Dao (Université d Orléans) Applications Web 106 / 175 Dao (Université d Orléans) Applications Web 107 / 175 Boucle DO...WHILE boucle DO... WHILE Syntaxe DO...WHILE do { liste d instructions while (expression booléenne); L ordre d exécution : 1 la liste d instructions est exécutée, 2 puis l expression booléenne est examinée, si elle est vérifiée, on revient au point 1 (répétition), sinon la boule do...while s arrête. La liste d instructions est exécutée au moins une fois. Afficher tous les entiers de 0 à un entier stocké dans $n avec la boucle DO... WHILE $i = 0; do { echo "$i\t"; $i = $i+1; while ($i <= $n); Dao (Université d Orléans) Applications Web 108 / 175 Dao (Université d Orléans) Applications Web 109 / 175
Boucle FOR boucle FOR Syntaxe FOR for (instruction1; expression booléeene; instruction2){ liste d instructions L ordre d exécution : 1 l instruction1 exécutée 2 si l expression booléenne est vraie, la liste d instructions est exécutée 3 l instruction2 exécutée, on recommence du point 2 (répétition) La liste d instructions est exécutée 0 ou plusieurs fois. Afficher tous les entiers de 0 à un entier stocké dans $n avec la boucle FOR for ($i=0; $i <= $n; $i++) { echo "$i\t"; Dao (Université d Orléans) Applications Web 110 / 175 Dao (Université d Orléans) Applications Web 111 / 175 Tableaux Un tableau (array) est une variable spéciale, qui regroupe plusieurs variables sous le même nom, chacune étant différenciée des autres par un indice En PHP, la fonction array() permet de créer un tableau En PHP, trois types de tableau existent : Tableaux indexés par des indices numériques Tableaux associatifs, éléments accessibles par une clé Tableaux multidimensionnels. Tableau avec indices numériques Les indices commencent par 0 On peut créer un tableau rempli ou remplir les cases d un tableau une par une : $cars = array("volvo", "BMW", "Toyota"); $t[0] = "bonjour" $t[1] = 123 $t[2] = "bonsoir" On peut aussi utiliser une boucle pour remplir une série de cases : for ($i=3; $i < count($t); $i++) { $t[$i] = $i * 3; Dao (Université d Orléans) Applications Web 112 / 175 Dao (Université d Orléans) Applications Web 113 / 175
Nombre d éléments d un tableau Fonction count($var) renvoie le nombre d éléments dans le tableau $var count() peut renvoyer 0 si $var n a pas été affecté, ou si c est un tableau vide. Il faut utiliser isset() pour tester si la variable existe $a[0] = 1; $a[1] = 3; $a[2] = 5; $n = count ($a); // $n vaut 3 ici $x = count(null); // $x vaut 0 $y = count(false); // $y vaut 1 Tableau associatif Les tableaux associatifs utilisent des clés pour accéder aux éléments Deux méthodes existent pour créer un tableau associatif : $age = array("peter"=>"35", "Ben"=>"37", "Joe"=>"43"); $age[ Peter ] = "35"; $age[ Ben ] = "37"; $age[ Joe ] = "43"; On accède aux éléments par les clés : $age = array("peter"=>"35", "Ben"=>"37", "Joe"=>"43"); echo "Peter is ". $age[ Peter ]. " years old."; Dao (Université d Orléans) Applications Web 114 / 175 Dao (Université d Orléans) Applications Web 115 / 175 Afficher le contenu d un tableau L utilisation de echo $t ne permet pas d afficher le contenu du tableau t Il faut passer par les cases une par une for ($i=0; $i<count($t); $i++) { echo "case numéro $i : ".$t[$i]. " <br>\n"; On peut utiliser la boucle foreach $colors = array("red", "green", "blue", "yellow"); Afficher le contenu d un tableau associatif Pour accéder à tous les éléments d un tableau associatif, on peut utiliser la boucle foreach $age = array("peter"=>"35", "Ben"=>"37", "Joe"=>"43"); foreach($age as $x => $x_value) { echo "Cle=". $x. ", Valeur=". $x_value; echo "<br>"; foreach ($colors as $value) { echo "$value <br>"; Dao (Université d Orléans) Applications Web 116 / 175 Dao (Université d Orléans) Applications Web 117 / 175
Fonctions de tri de tableau sort() et rsort() Trier un tableau d après l ordre lexicographique ou numérique PHP fournit quelques fonctions de tri de tableau sort() : trier tableau dans l ordre croissant rsort() : trier tableau dans l ordre décroissant asort() : trier tableau dans l ordre croissant des valeurs ksort() : trier tableau dans l ordre croissant des clés arsort() : trier tableau dans l ordre décroissant des valeurs krsort() : trier tableau dans l ordre décroissant des clés Script PHP $cars = array("volvo", "BMW", "Toyota"); sort($cars); $clength = count($cars); for($x = 0; $x < $clength; $x++) { echo $cars[$x]."<br>\n"; $numbers = array(4, 6, 2, 22, 11); rsort($numbers); $arrlength = count($numbers); for($x = 0; $x < $arrlength; $x++) { echo $numbers[$x]."<br>\n"; Résultat HTML BMW<br> Toyota<br> Volvo<br> 22<br> 11<br> 6<br> 4<br> 2<br> Dao (Université d Orléans) Applications Web 118 / 175 Dao (Université d Orléans) Applications Web 119 / 175 asort() et arsort() ksort() et krsort() Trier un tableau associatif par valeurs (par l ordre croissant ou décroissant) Trier un tableau associatif par clés (par l ordre croissant ou décroissant) Script PHP Résultat HTML Script PHP Résultat HTML $age = array("peter"=>"35", "Ben"=>"37", "Joe"=>"43"); asort($age); Key=Peter, Value=35 Key=Ben, Value=37 Key=Joe, Value=43 $age = array("peter"=>"35", "Ben"=>"37", "Joe"=>"43"); krsort($age); Key=Peter, Value=35<br> Key=Joe, Value=43<br> Key=Ben, Value=37<br> foreach($age as $x => $x_value) { echo "Key=". $x. ", Value=". $x_value; echo "<br>\n"; foreach($age as $x => $x_value) { echo "Key=". $x. ", Value=". $x_value; echo "<br>\n"; Dao (Université d Orléans) Applications Web 120 / 175 Dao (Université d Orléans) Applications Web 121 / 175