Bases de données et Sites Web. Li345 Le langage PHP 2 ème partie généralités tableaux structures de contrôle 1
Rappel : CGI et bases de données Architecture 3 tiers MySQL : stockage, protection des données, interface SQL PHP: extrait données et les met en forme reçoit des données et les stocke Le navigateur fournit l interface graphique Navigateur : http://serveur/script.php Serveur web : exécute le code PHP, produit un doc. HTML -> navigateur 2
Script PHP : HTML dynamique Fichier.php contenant du code PHP [dans du HTML]. Tout code PHP doit être inclus dans une balise <?php...?> (pour être interprété par le serveur Web) Le code PHP produit du HTML avec la commande echo <HTML> <HEAD> <TITLE>HTML avec PHP</TITLE></HEAD> <BODY bgcolor= white > Ici c est du HTML statique. <P> <?php echo "Ici c est du HTML dynamique";?> </P> </BODY></HTML> 3
Syntaxe de PHP : commentaires & valeurs Instructions séparées par des point-virgule; commentaires : 1. entre les signes «/*» et «*/» ; 2. en commençant une ligne par «//» : 3. en commençant une ligne par «#». Littéral = valeur «en dur», non modifiable Littéraux : numérique: 1 ou 3.14 ou chaîne de caractères: Tintin en Amérique encadré par des guillemets doubles. Constantes = valeur référencée par un symbole non modifiable Créé avec la commande define : define ( PI, 3.14116 ) Permet d éviter les fautes de frappe ou de les corriger facilement 4
Syntaxe de PHP : variables Variable = symbole référençant une valeur. syntaxe : un $ suivi du nom. Ex.:$adresse peut référencer des valeurs de différents types, au cours de l exécution : un nombre, puis une chaîne,... pas de déclaration de variable. Attention: minuscules et majuscules : $adresse $Adresse 5
Syntaxe de PHP : types de données Entiers: 1, 2, 3, 12980 Décimaux: 3.14, 1.23, 2093.2988 Booléens (TRUE ou FALSE) Les chaînes de caractères (entre " ") Les tableaux et les objets Typage très souple: PHP convertit le type en fonction de l opération effectuée. Fonctions : isset(), is_string(), is_int(), is_array(), 6
Manipulation de données en PHP $v1 = 2; $v2 = $v1 + 1; /* affectation $v1 + $v2 : conversion en numérique (vaut donc 5). Opérateurs arithmétiques classiques (+ - * /) et % pour le modulo. " $v1 " :inclut la valeur de $v1 dans la chaîne Concaténation de chaînes: chaine1. chaine2 $c = "$v1 + $v2 = "; /* 2 + 3 = $c = $c. $v1+$v2 ; /* 2 + 3 = 5 $c.= "<BR> ; /* 2 + 3 = 5 <BR> echo $c; Donnera dans le HTML produit : 2+3 = 5 <BR> 7
Tableaux en PHP Tableau = suite de valeurs référencées par un indice (tableaux indicés) ou par une clé (tableaux associatifs) La paire (indice, valeur) ou (clé, valeur) est un élément du tableau. La taille des tableaux est dynamique: on ajoute des éléments à volonté. 8
Tableaux indicés Syntaxe : <NomTableau>[<indice>] $tab[0] = "élément 1 "; $tab[1] = "élément 2 "; $tab[2] = 120; PHP peut affecter automatiquement les indices (ajout en fin de liste). $tab[] = "élément 1 "; // $tab[0]! $tab[] = "élément 2 "; // $tab[1]! $tab[] = 120; // $tab[2]! Pour initialiser un tableau, on peut utiliser la commande array. $tab = array ( "élément 1 ", "élément 2 ", 120); NB: indices automatiques commencent à 0. 9
Tableaux associatifs Adressage par clé unique $mes["vertigo"] = "Hitchcock"; $mes["sacrifice"] = "Tarkovski"; $mes["alien"] = "Scott"; Ici aussi, initialisation par array. $mes = array ("Vertigo" =>"Hitchcock", "Sacrifice" => "Tarkovski", "Alien" => "Scott"); 10
Tableaux à plusieurs dimensions Un élément est désigné par plusieurs indices ou clés. $tab[0][0] = "En haut à gauche"; $tab[0][1] = "En haut à droite"; $tab[1][0] = "En bas à gauche"; $tab[1][1] = "En bas à droite"; Valeur de $tab[i]: un tableau à une dimension. $mes = array ( "Vertigo" => array ( "Alfred","Hitchcock"), "Sacrifice" => array ( "Andrei", "Tarkovski"), "Alien" => array ( "Ridley", "Scott") ); 11
Structures de contrôle Permettent de diriger le flux d exécution vers un ensemble d instruction, ou bloc. Les tests: if-else, switch. Les boucles: while, for, do, foreach. 12
Conditionnelle : if-then-else if (expression) { // Bloc si expression est vraie. } else { // Bloc si expression est fausse. } // Ici le script continue. ATTENTION : Une erreur très courante: $i = 1; $j = 2; // Renvoie FALSE: i est différent de j. if ($i == $j)... // Renvoie la valeur de $j, soit TRUE! if ($i = $j)... 13
Exemple avec if-then-else if ($a == 2) { echo La variable a vaut 2 } else { if ($a == 3) { echo La variable a vaut 3 } else { echo La variable a ne vaut ni 2 ni 3 } } Possibilité d utiliser elseif 14
Conditionnelle : switch switch (expression) { Case valeur1 : {bloc1} Case valeur2 : {bloc2} Default : {bloc_default} } // Ici le script continue. Attention : dès qu une valeur correspond à l expression, tout le reste du code du switch est exécuté. En principe, on finit chaque bloc par break pour sortir du switch 15
Boucle While Permet d exécuter un bloc d instructions tant qu une condition est remplie. while (expression) { // Ici, expression est vraie. } Exemple: $a = 0; while ($a < 10) { echo a vaut $a ; $a = $a + 1;} On peut aussi faire un do {bloc} while (expr), bloc est alors exécuté au moins une fois 16
Boucle For For (initialisation; test; incrément) {bloc}; Plus concis que le While For ($v1=1;$v1<10;$v1++){echo $v1}; Mais aussi For ($v1=1,$v2=10;$v1<$v2;$v1++, echo $v1); Exercice : la même chose avec un while 17
Boucle foreach Permet de parcourir un tableau. Tableau indicé: foreach ($tableau as $valeur) { /* bloc */ } Tableau associatif: foreach ($tableau as $cle => $valeur) { /* bloc */ } À chaque passage dans le bloc, $valeur contient la valeur de l élément courant ($cle contient la clé pour les tableaux associatifs). 18
Break, exit, continue Dans une boucle : Break permet de sortir de la boucle Exit sort du script Continue va directement à la prochaine évaluation de la condition de la boucle 19
Exemples PHP permet de récupérer automatiquement les paramètres transmis par HTTP. Ces paramètres sont stockés dans des tableaux prédéfinis. le tableau $_SERVER contient les paramètres CGI sur le contexte de la demande. le tableau $_POST contient les paramètres transmis en mode POST. le tableau $_GET contient les paramètres transmis en mode GET. le tableau $_REQUEST contient tous les paramètres! 20
Exemple 1 : affichage des paramètres CGI dans un tableau <HTML><HEAD> <TITLE>Paramètres CGI</TITLE> </HEAD> <BODY> <?php // Script affichant les paramètres CGI. $serveur = $_SERVER[ SERVER_SOFTWARE ]; $client = $_SERVER[ HTTP_USER_AGENT ]; echo "<TABLE BORDER=1>"; echo "<TR><TD>Le serveur<td>$serveur"; echo "<TR><TD>Le client<td>$client"; echo "</TABLE><P>";?> 21
Exemple 2 : affichage des paramètres GET <HTML><HEAD> <TITLE>Paramètres GET</TITLE> </HEAD> <BODY> <TABLE border=2> <?php // Script affichant les paramètres GET. foreach ($_GET as $cle => $valeur) { echo "<TR><TD>$cle<TD>$valeur"; }?> </TABLE></BODY></HTML> 22
Exemple 3 : Bonjour <HTML><HEAD> <TITLE>Dis bonjour</title> </HEAD><BODY> <?php if (isset($_request[ nom ]) and isset($_request[ prenom ])) { $nom = $_REQUEST[ nom ]; $prenom = $_REQUEST[ prenom ]; echo "Bonjour $prenom $nom"; } else echo "Mais qui êtes-vous?";?> </BODY></HTML> 23