M1202 Algorithmique et programmation PHP par l'exemple - 5 Jérôme Landré jerome.landre@univ-reims.fr DUT Métiers du Multimédia et de l'internet I.U.T. de Troyes Université de Reims Champagne-Ardenne
Plan I Fonctions et portée des variables en PHP II Interactions PHP/Javascript III Les erreurs PHP
I Fonctions en PHP 3
Fonctions en PHP On peut créer une fonction ainsi : <?php function calculperimetrecercle($rayon) { $perimetre = 2 * pi() * $rayon; return $perimetre; }?> $r = 4; $peri = calculperimetrecercle($r); echo '<p>périmètre 4 : '.$peri.'</p>'; echo '<p>périmètre 5 : '.calculperimetrecercle(5).'</p>'; Lors de la déclaration de la fonction, les paramètres (ou arguments) N'EXISTENT PAS C'est lors de l'appel de la fonction que les valeurs des paramètres sont passées à la fonction 4
Fonctions en PHP On peut créer une fonction ainsi : <?php function calculperimetrecercle($rayon) { $perimetre = 2 * pi() * $rayon; return $perimetre; }?> $r = 4; $peri = calculperimetrecercle($r); echo '<p>périmètre 4 : '.$peri.'</p>'; echo '<p>périmètre 5 : '.calculperimetrecercle(5).'</p>'; Les paramètres sont passés par valeur (ou par recopie), c'est-à-dire que les paramètres ne sont pas modifiés lors de leur passage dans la fonction 5
Portée des variables Les variables sont locales au bloc dans lequel elles sont créées <?php function test($param1, $param2) { $a = 12; $resultat = $param1 + $param2; return $resultat; } $b = 12; echo '<p> resultat : '.test(5, 4).' - a : '.$a.'- b : '.$b.'</p>';?> Les variables déclarées dans le bloc principal sont des variables GLOBALES Les variables déclarées dans un bloc de programme (comme une fonction) sont LOCALES : en dehors du bloc, elles N'EXISTENT PLUS! 6
Portée des variables Les variables sont locales au bloc dans lequel elles sont créées <?php echo '</p>'; for ($i=0 ; $i<100 ; $i++) { echo $i.' '; } echo '</p>'; echo '<p>valeur de i : '.$i.'</p>';?> 7
Portée des variables Les variables sont locales au bloc dans lequel elles sont créées <?php echo '</p>'; for ($i=0 ; $i<100 ; $i++) { echo $i.' '; } echo '</p>'; echo '<p>valeur de i : '.$i.'</p>';?> 8
Portée des variables Les variables sont locales au bloc dans lequel elles sont créées <?php function afficher() { echo '<p>'; for ($i=0; $i<100; $i++) { echo $i.' '; } echo '</p>'; }?> echo '<p>valeur de i : '.$i.'</p>'; 9
Portée des variables Les variables sont locales au bloc dans lequel elles sont créées <?php function afficher() { echo '<p>'; for ($i=0; $i<100; $i++) { echo $i.' '; } echo '</p>'; }?> echo '<p>valeur de i : '.$i.'</p>'; 10
Portée des variables Les variables sont locales au bloc dans lequel elles sont créées <?php function afficher() { echo '<p>'; for ($i=0; $i<100; $i++) { echo $i.' '; } echo '</p>'; } afficher(); echo '<p>valeur de i : '.$i.'</p>';?> 11
Portée des variables Les variables sont locales au bloc dans lequel elles sont créées <?php function afficher() { echo '<p>'; for ($i=0; $i<100; $i++) { echo $i.' '; } echo '</p>'; } afficher(); echo '<p>valeur de i : '.$i.'</p>';?> 12
Fonctions en PHP Quand on veut modifier la valeur d'un paramètre (d'un argument) dans une fonction, il faut le passer par adresse (ou par référence) <?php function augmentevaleur($val) { $val++; } $a = 4; echo '<p>valeur avant : '.$a.'</p>'; augmentevaleur($a); echo '<p>valeur après : '.$a.'</p>';?> 13
Ce qui donne : Fonctions en PHP 14
Fonctions en PHP Quand on veut modifier la valeur d'un paramètre (d'un argument) dans une fonction, il faut le passer par adresse (ou par référence) <?php function augmentevaleur(&$val) { $val++; } $a = 4; echo '<p>valeur avant : '.$a.'</p>'; augmentevaleur($a); echo '<p>valeur après : '.$a.'</p>';?> 15
Ce qui donne : Fonctions en PHP 16
Fonctions en PHP Un paramètre peut être un tableau <?php $tabnotes = array(12, 10.5, 8, 11, 10.5); function ajouteun(&$tab) { for ($i=0;$i<count($tab);$i++) { $tab[$i]++; } } echo '<p>valeur avant : '.$tabnotes[0].'</p>'; ajouteun($tabnotes); echo '<p>valeur après : '.$tabnotes[0].'</p>';?> 17
Ce qui donne : Fonctions en PHP 18
II Interactions PHP/Javascript 19
Générer du Javascript en PHP PHP permet côté serveur de générer du code Javascript qui va être envoyé et interprété par le navigateur On peut donc FACILEMENT passer des valeurs de PHP vers Javascript (le contraire n'est pas possible de façon simple...) 20
Générer du Javascript en PHP - 1 On va changer la couleur d'un élément CSS grâce à PHP : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>formulaire Couleur</title> </head> <body> <form method="get" action="couleur.php"> Couleur du texte : #<input type="text" name="couleur" value="34e0b9" /> <input type="submit" value="valider" /> </form> </body> </html> 21
Générer du Javascript en PHP - 1 On va changer la couleur d'un élément CSS grâce à PHP : 22
Générer du Javascript en PHP - 1 On va changer la couleur d'un élément CSS grâce à PHP : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>couleurs avec PHP</title> </head> <body style="margin:0px;font-family:sans-serif;"> <p style="width:800px;height:600px; color:#<?php echo $_GET['couleur'];?>"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam pharetra congue consectetur. Nulla accumsan libero non libero blandit venenatis. Quisque libero ligula, tempus non lacinia id, pellentesque quis urna. [...] </p> </body> </html> 23
Générer du Javascript en PHP - 1 On va changer la couleur d'un élément CSS grâce à PHP : 24
Générer du Javascript en PHP - 1 On va changer la couleur d'un élément CSS grâce à PHP : 25
Générer du Javascript en PHP - 1 On va changer la couleur d'un élément CSS grâce à PHP : 26
Générer du Javascript en PHP - 1 On va changer la couleur d'un élément CSS grâce à PHP : 27
Générer du Javascript en PHP - 1 On va changer la couleur d'un élément CSS grâce à PHP : 28
Générer du Javascript en PHP - 2 On va changer le nombre d'éléments (carrés) générés en JS grâce à PHP : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>formulaire Carrés</title> </head> <body> <form method="get" action="carres.php"> Nombre de carrés : <input type="text" name="nbcarres" value="10" /> <input type="submit" value="valider" /> </form> </body> </html> 29
Générer du Javascript en PHP - 2 On va changer la couleur d'un élément CSS grâce à PHP : 30
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>carrés en Javascript</title> </head> <body style="margin:0px;font-family:sans-serif;"> <p style="width:800px;height:600px;">lorem ipsum dolor sit amet, [ ] vehicula.</p> <canvas id="moncanvas" width="800px" height="600px" style="position:absolute;border:1px dashed #ddd;margin-left:auto;marginright:auto;top:0px;left:0px;">votre navigateur ne supporte pas canvas!</canvas> <script> var canvas = document.getelementbyid('moncanvas'); var ctx = canvas.getcontext('2d'); function alea(min,max) { return Math.round(Math.random()*(max-min)+min); } for (var i=0; i< <?php echo $_GET['nbCarres'];?>; i++) { ctx.beginpath(); ctx.fillstyle = 'rgba('+alea(0,255)+','+alea(0,255)+','+alea(0,255)+',0.33)'; x=alea(100,canvas.width-100);y=alea(100,canvas.height-100); larg=alea(20,100);haut=alea(20,100); ctx.fillrect(x,y,larg,haut); ctx.closepath(); } </script> </body></html> 31
Générer du Javascript en PHP - 2 On va changer la couleur d'un élément CSS grâce à PHP : 32
Générer du Javascript en PHP - 2 On va changer la couleur d'un élément CSS grâce à PHP : 33
Générer du Javascript en PHP - 2 On va changer la couleur d'un élément CSS grâce à PHP : 34
Générer du Javascript en PHP - 2 On va changer la couleur d'un élément CSS grâce à PHP : 35
Générer du Javascript en PHP - 2 On va changer la couleur d'un élément CSS grâce à PHP : 36
III Les erreurs PHP 37
Erreurs en PHP PHP est très sensible à la syntaxe des lignes de code Toute erreur empêche le programme PHP de fonctionner correctement Le problème est que les erreurs PHP sont souvent difficiles à corriger Les pages suivantes vont présenter quelques erreurs communes et la manière de les corriger! 38
1) Point-virgule L'erreur la plus fréquente est l'oubli d'un point-virgule à la fin d'une instruction : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p>'."\n" echo $texte;?> </body> </html> 39
1) Point-virgule On obtient une «parse error» : Attention, l'erreur est à la ligne 9 mais PHP indique l'erreur à la ligne 10!!! Règle n 4 : Quand PHP indique une erreur à la ligne N, il faut regarder la ligne N et la ligne N-1! 40
1) Point-virgule L'erreur la plus fréquente est l'oubli d'un point-virgule à la fin d'une instruction : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p>'."\n"; echo $texte;?> </body> </html> 41
1) Point-virgule Ca marche : 42
2) Ouverture PHP Si on oublie d'ouvrir PHP avec «<?php» : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> $texte = '<p>bonjour!</p>'."\n"; echo $texte;?> </body> </html> 43
2) Ouverture PHP Il n'y a pas d'erreur, mais le code PHP n'est pas interprété, il est affiché comme du texte HTML normal : 44
On remet «<?php» : 2) Ouverture PHP <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p>'."\n"; echo $texte;?> </body> </html> 45
Ca marche : 2) Ouverture PHP 46
3) Accolade non fermée Si on oublie une accolade fermante : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p>'."\n"; for ($i=0; $i<5; $i++) { echo $texte;?> </body> </html> 47
3) Accolade non fermée On obtient une erreur de syntaxe, le fichier n'est pas fermé, «unexpected end of file», c'est-à-dire «fin de fichier inattendue» : 48
On corrige : 3) Accolade non fermée <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p>'."\n"; for ($i=0; $i<5; $i++) { echo $texte; }?> </body> </html> 49
Ca marche : 3) Accolade non fermée 50
4) Accolade non ouverte Si on oublie une accolade ouvrante : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p>'."\n"; for ($i=0; $i<5; $i++) echo $texte; }?> </body> </html> 51
4) Accolade non ouverte On obtient une erreur de syntaxe, «unexpected '}'», c'est-à-dire «'}' inattendue» : En effet, l'accolade fermante ne correspond à aucune accolade ouvrante! 52
On corrige : 4) Accolade non ouverte <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p>'."\n"; for ($i=0; $i<5; $i++) { echo $texte; }?> </body> </html> 53
Ca marche : 4) Accolade non ouverte 54
5) Chaîne de caractères non fermée Si on oublie de fermer une chaîne de caractères : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p> ; echo $texte;?> </body> </html> 55
5) Chaîne de caractères non fermée On obtient une erreur de syntaxe, «unexpected ''», c'est-à-dire «'' inattendue» : 56
5) Chaîne de caractères non fermée On corrige : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p>'; echo $texte;?> </body> </html> 57
5) Chaîne de caractères non fermée Ca marche : 58
6) Chaîne de caractères mal collée Si on concatène (colle) mal une chaîne de caractères : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!'.</p>'; echo $texte;?> </body> </html> 59
6) Chaîne de caractères mal collée On obtient une erreur de syntaxe, «unexpected <», c'est-à-dire «< inattendue» : 60
6) Chaîne de caractères mal collée On corrige : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!'.'</p>'; echo $texte;?> </body> </html> 61
6) Chaîne de caractères mal collée Ca marche : 62
7) Trop d'accolades fermées Si on a trop d'accolades fermantes (plus que nécessaire), on obtient une erreur : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p>'."\n"; for ($i=0; $i<5; $i++) { echo $texte; } }?> </body> </html> 63
6) Chaîne de caractères mal collée On obtient une erreur de syntaxe, «unexpected '}'», c'est-à-dire «'}' inattendue» : PHP ne comprend pas pourquoi il y a une accolade fermante toute seule, sans accolade ouvrante... 64
6) Chaîne de caractères mal collée On corrige : <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>ma page</title> </head> <body> <?php $texte = '<p>bonjour!</p>'."\n"; for ($i=0; $i<5; $i++) { echo $texte; }?> </body> </html> 65
6) Chaîne de caractères mal collée Ca marche : 66
Avez-vous des questions? 67