Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parBlancheflour Durieux Modifié depuis plus de 10 années
1
1
2
Sommaire Quest-ce que PHP ? Les structures de base Traitements de base Traitements de chaînes Utilisation des tableaux Fonctions usuelles Formulaires et superglobales Environnement web et superglobales Les cookies et Les sessions Gestion des objets Gestion de chiers Gestion des ux et Flux de sortie PHP Envoyer et recevoir des e-mails Travailler avec une base de données 2
3
Sommaire Erreurs et exceptions XML : concepts et SimpleXML XML avancé Les services web Les templates Les systèmes de cache Gestion des images Expressions régulières Sécurité Outils de développement PHP Les CMS Les frameworks 3
4
Quelques fonctions très utiles Fonctions usuelles 4 print_r (variable) : Lafchage de tableaux ou dobjets var_dump(): Lafchage de tableaux ou dobjets mt_rand([minimum,maximum]) : générateur de nombres aléatoires « Mersenne Twister »
5
Informations de conguration Fonctions usuelles PHP peut communiquer tout ce quil sait sur sa conguration grâce à la célèbre fonction phpinfo(). En mettant simplement un appel à cette fonction dans un script, PHP renvoie une page HTML avec des informations sur le système, les options qui ont servi pendant la compilation, les extensions activées, les variables denvironnement, les entêtes HTTP et les informations de conguration. 5
6
Informations de conguration Fonctions usuelles 6
7
Informations de conguration Fonctions usuelles 7 Les options de la fonction phpinfo() :
8
Informations de conguration Fonctions usuelles 8 <?php // Affiche toutes les informations phpinfo(); // Affiche uniquement le module d'information phpinfo(INFO_MODULES); // phpinfo(10) fournirait les informations correspondant // au module 8 et au module 2 (addition des valeurs). ?> <?php // Affiche toutes les informations phpinfo(); // Affiche uniquement le module d'information phpinfo(INFO_MODULES); // phpinfo(10) fournirait les informations correspondant // au module 8 et au module 2 (addition des valeurs). ?>
9
Coloration syntaxique de code Fonctions usuelles 9 Vous avez peut être remarqué sur certains sites traitant de PHP que le code donné dans les tutoriaux est coloré. Cette coloration nest généralement pas faite à la main. PHP propose par défaut une fonction, highlight_string(), qui permet de colorer un code PHP et de lenvoyer à lafchage. Il est aussi possible dafcher directement le contenu dun chier de cette façon. Il vous suft pour cela de faire appel à highlight_file()
10
Connaître les extrémités Fonctions usuelles 10 La fonction max() retourne la plus grande valeur numérique parmi les valeurs passées en paramètres. La fonction min() est lopposée de max(). Elle retourne la valeur la plus petite. <?php echo max(1, 3, 5, 6, 7); // 7 echo max(array(2, 4, 5)); // 5 $val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7) ?> <?php echo max(1, 3, 5, 6, 7); // 7 echo max(array(2, 4, 5)); // 5 $val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7) ?>
11
Arrondir des valeurs Fonctions usuelles 11 Trois fonctions permettent darrondir des nombres : round() renvoie lentier le plus proche, floor() arrondit à lentier immédiatement inférieur et ceil() retourne lentier immédiatement supérieur. <?php echo round(3.4); // Affiche 3 echo round(3.5); // Affiche 4 echo round(3.6); // Affiche 4 echo round(3.6, 0); // Affiche 4 echo round(1.95583, 2); // Affiche 1.96 echo round(1241757, -3); // Affiche 1242000 echo ceil(7.2); // 8 echo ceil(99.999); // 100 echo floor(7.2); // 7 echo floor(99.999); // 99 ?> <?php echo round(3.4); // Affiche 3 echo round(3.5); // Affiche 4 echo round(3.6); // Affiche 4 echo round(3.6, 0); // Affiche 4 echo round(1.95583, 2); // Affiche 1.96 echo round(1241757, -3); // Affiche 1242000 echo ceil(7.2); // 8 echo ceil(99.999); // 100 echo floor(7.2); // 7 echo floor(99.999); // 99 ?>
12
Travailler sur différentes bases Fonctions usuelles 12 Il est parfois nécessaire de travailler sur des chiffres binaires (base 2) ou des hexadécimaux (base 16). Pour gérer des conversions de nombres entre différentes bases, PHP propose la fonction base_convert (nombre, frombase, tobase ), frombase et tobase doivent être compris entre 2 et 36 inclus. Les bases supérieures à 10 seront représentées avec les lettres de a=10 à z=36. <?php $binaire = base_convert(5531, 10, 2); echo $binaire; ?> <?php $binaire = base_convert(5531, 10, 2); echo $binaire; ?>
13
Travailler sur différentes bases Fonctions usuelles 13 Des fonctions dédiées à une conversion donnée existent pour des accès rapides : bindec() : convertit de binaire en décimal ; decbin() : convertit de décimal en binaire ; dechex() : convertit de décimal en hexadécimal ; decoct() : convertit de décimal en octal.
14
Formater une date/heure locale Fonctions usuelles 14 La fonction date (format, timestamp) retourne une date sous forme dune chaîne, au format donné par le premier paramètre. La date est fournie par le second paramètre sous la forme dun timestamp Unix. Si le second paramètre nest pas renseigné, la date courante est utilisée. <?php $format = 'd-m-y, H:i:s' ; $date = date($format) ; echo $date ; // Affiche une date sous la forme : 31-04-04, 23:59:59 ?> <?php $format = 'd-m-y, H:i:s' ; $date = date($format) ; echo $date ; // Affiche une date sous la forme : 31-04-04, 23:59:59 ?>
15
Formater une date/heure locale Fonctions usuelles 15
16
Formater une date/heure locale Fonctions usuelles 16 Pour calculer un timestamp à partir dune représentation de date, vous pouvez utiliser la fonction strtotime(), qui convertit une date ISO en timestamp. Il existe plusieurs formats de date, mais ceux que vous rencontrerez sur Internet seront généralement compris par strtotime(). Pour obtenir un timestamp à partir des différentes composantes dune date, on utilise la fonction mktime(heure, minute, secondes, mois, jour, annee). <?php echo strtotime ('16 November 1976'); echo strtotime ('1976-11-16'); ?> <?php echo strtotime ('16 November 1976'); echo strtotime ('1976-11-16'); ?> <?php echo date("d/M/Y", mktime (0,0,0,12,32,2004))." "; echo date("d/m/Y", mktime (0,0,0,13,1,2005))." "; echo date("M-d-Y", mktime (0,0,0,1,1,2001)); ?> <?php echo date("d/M/Y", mktime (0,0,0,12,32,2004))." "; echo date("d/m/Y", mktime (0,0,0,13,1,2005))." "; echo date("M-d-Y", mktime (0,0,0,1,1,2001)); ?>
17
Tester les dates Fonctions usuelles 17 La fonction checkdate(mois, jour, annee) renvoie TRUE si la date représentée par le jour, le mois et lannée donnés en paramètres est valide, FALSE sinon. Les années bissextiles sont prises en compte. <?php // On récupère la date danniversaire fournie // sous la forme JJ/MM/AAAA $anniversaire = $_REQUEST['anniversaire']; $tab = explode("/",$anniversaire); // On vérifie que cette date est valide if (checkdate($tab[1],$tab[0],$tab[2])){ echo 'La date est valide.'; }else{ echo 'La date est invalide.'; } ?> <?php // On récupère la date danniversaire fournie // sous la forme JJ/MM/AAAA $anniversaire = $_REQUEST['anniversaire']; $tab = explode("/",$anniversaire); // On vérifie que cette date est valide if (checkdate($tab[1],$tab[0],$tab[2])){ echo 'La date est valide.'; }else{ echo 'La date est invalide.'; } ?>
18
Comparer les dates Fonctions usuelles 18 Il est possible grâce aux fonctions de date, de calculer les temps dexécution de tout ou partie de vos scripts. Il vous faut pour cela utiliser la fonction time(), qui renvoie le timestamp actuel, aux différents moments que vous souhaitez évaluer et de stocker les valeurs an de les comparer. La fonction microtime() fonctionne de manière identique, mais renvoie aussi la partie décimale de lheure en cours. <?php $tps1 = time(); // Divers traitements. $tps2 = time(); $tps = $tps2 – $tps1; echo "Le temps nécessaire à lexécution des traitements est $tps"; ?> <?php $tps1 = time(); // Divers traitements. $tps2 = time(); $tps = $tps2 – $tps1; echo "Le temps nécessaire à lexécution des traitements est $tps"; ?>
19
Comparer les dates Fonctions usuelles 19 <?php function tempspasse($time) { // Calcul du temps écoulé (en secondes) $diff = time()-$time; $dif_jour = floor($diff/60/60/24); $diff -= $dif_jour*60*60*24; $dif_heure = floor($diff/60/60); $diff -= $dif_heure*60*60; $dif_min = floor($diff/60); $diff -= $dif_min*60; $dif_sec = $diff; return ('(Temps écoulé '.$dif_jour.'j '.$dif_heure.'h'. $dif_min.'m '.$dif_sec.'s)'); } /* On va afficher le temps qui sest écoulé depuis la création du fichier phpinfo.php: */ echo tempspasse(filectime('phpinfo.php')); <?php function tempspasse($time) { // Calcul du temps écoulé (en secondes) $diff = time()-$time; $dif_jour = floor($diff/60/60/24); $diff -= $dif_jour*60*60*24; $dif_heure = floor($diff/60/60); $diff -= $dif_heure*60*60; $dif_min = floor($diff/60); $diff -= $dif_min*60; $dif_sec = $diff; return ('(Temps écoulé '.$dif_jour.'j '.$dif_heure.'h'. $dif_min.'m '.$dif_sec.'s)'); } /* On va afficher le temps qui sest écoulé depuis la création du fichier phpinfo.php: */ echo tempspasse(filectime('phpinfo.php'));
20
Résolution DNS dune adresse IP Fonctions usuelles 20 La fonction checkdnsrr(hôte [, type]) vérie quil existe bien un enregistrement DNS de type type correspondant au paramètre hôte. Elle renvoie TRUE si un enregistrement a été trouvé, et FALSE en cas déchec. Le paramètre type peut être lune des valeurs suivantes : A, MX, NS, SOA, PTR, CNAME (alias), AAAA (adresse IPV6), ou ANY (composé de tous les autres). La valeur par défaut est MX. <?php if (checkdnsrr("anaska.com")) echo "Le nom de domaine existe"; ?> <?php if (checkdnsrr("anaska.com")) echo "Le nom de domaine existe"; ?>
21
Corrélation IP/DNS Fonctions usuelles 21 La fonction dns_get_record() lit les données DNS associées à un hôte passé en paramètre. La fonction renvoie un tableau associatif, contenant au minimum les index : host, type, class et ttl. <?php $result = dns_get_record("php.net"); echo ' ' ; print_r($result); echo ' ' ; ?> <?php $result = dns_get_record("php.net"); echo ' ' ; print_r($result); echo ' ' ; ?> La fonction inverse est la fonction gethostbyaddr(), qui renvoie le nom dhôte correspondant à une adresse IP.
22
chiffrement, hachage, codage/décodage Fonctions usuelles 22 Sous le terme de chiffrement, nous distinguerons en fait deux termes plus précis et plus corrects : hachage et codage (et décodage). Le procédé de hachage est une opération à sens unique qui permet dobtenir une chaîne non prédictible et qui semble aléatoire à partir dun texte ou dune donnée. La chaîne résultante est généralement assez courte. Les procédés de codage et décodage permettent, eux, davoir une opération à double sens. Une fois la chaîne transformée, il est possible de revenir à la donnée dorigine, que ce soit avec un mot de passe ou grâce à un système plus complexe.
23
chiffrement, hachage, codage/décodage Fonctions usuelles 23 Il y a trois applications classiques aux fonctions de hachage. 1. les mots de passe : Plutôt que de stocker un mot de passe en claire, il est possible de stocker son hachage. 2. lidentication : Les chaînes hachées sont généralement courtes (32 caractères pour le hachage MD5 par exemple). 3. vérier lintégrité dun chier transféré.
24
chiffrement, hachage, codage/décodage Fonctions usuelles 24 La fonction PHP pour la méthode de hachage CRC32 se nomme crc32(). Il suft de lui donner en argument une chaîne de caractères ou des données binaires et elle renvoie un entier. <?php $fichier = 'test2.php'; $crc = crc32( file_get_contents($fichier) ); echo $crc; ?> <?php $fichier = 'test2.php'; $crc = crc32( file_get_contents($fichier) ); echo $crc; ?>
25
chiffrement, hachage, codage/décodage Fonctions usuelles 25 La fonction PHP pour la méthode de hachage MD5 se nomme md5() et md5_file($fichier). <?php $donnee = 'secretXzB'; $md5 = md5( $donnee ); echo $md5 ; ?> <?php $donnee = 'secretXzB'; $md5 = md5( $donnee ); echo $md5 ; ?>
26
chiffrement, hachage, codage/décodage Fonctions usuelles 26 Le SHA1 est similaire au MD5 mais renvoie une chaîne légèrement plus longue (40 caractères hexadécimaux, ou 20 octets). La probabilité dune collision (deux valeurs avec le même résultat) est donc plus rare ; plus exactement, pour deux données précisées, il y a une chance sur 2^20 quelles aient le même résultat. En conséquence, ce procédé de hachage est aussi légèrement plus lent. Les fonctions sha1() et sha1_file() sont par ailleurs en tout point similaires à md5() et md5_file().
27
chiffrement, hachage, codage/décodage Fonctions usuelles 27 Les fonctions de codage et décodage se séparent elles-mêmes en deux groupes : les codages à clé publique et les codages à clé privée. Les premiers désignent les codages qui emploient la même clé (ou le même mot de passe) pour coder et décoder la donnée. Les autres permettent davoir un mot-clé pour coder et un pour décoder. Généralement, on en réserve un pour soi et on diffuse lautre. Le module mcrypt dans PHP gère pratiquement tous les algorithmes et les méthodes de codage qui sont rencontrées le plus souvent.
28
Fonction à larrêt du script Fonctions usuelles 28 PHP exécute automatiquement certaines actions à la clôture du script. Vous pouvez vous-même enregistrer du code pour quil soit exécuté juste avant larrêt du script. Si vous fournissez un nom de fonction à register_shutdown_function(), PHP lenregistre et lexécute juste avant de terminer le script. La fonction nest appelée à la n de lexécution que si elle se termine normalement. Une erreur fatale, un appel à exit() ou die() arrête brutalement le script, sans appeler les fonctions enregistrées. <?php // On retient lheure de démarrage du script $time = time() ; // On définit une fonction qui enregistrera le temps écoulé // dans un fichier de statistiques function statistiques() { global $time ; $fp = fopen('stats.txt', 'a') ; flock($fp, LOCK_EX) ; $secondes = time() - $time ; fputs($fp, "exécution de $secondes secondes\n" ; fclose($fp) ; } // Enregistrement de la fonction pour quelle sexécute à la fin register_shutdown_function('statistiques') ; /* Mettez ici votre script normal son temps dexécution sera calculé et enregistré dans stats.txt */ <?php // On retient lheure de démarrage du script $time = time() ; // On définit une fonction qui enregistrera le temps écoulé // dans un fichier de statistiques function statistiques() { global $time ; $fp = fopen('stats.txt', 'a') ; flock($fp, LOCK_EX) ; $secondes = time() - $time ; fputs($fp, "exécution de $secondes secondes\n" ; fclose($fp) ; } // Enregistrement de la fonction pour quelle sexécute à la fin register_shutdown_function('statistiques') ; /* Mettez ici votre script normal son temps dexécution sera calculé et enregistré dans stats.txt */
29
Exécution dune chaîne de code PHP Fonctions usuelles 29 Il peut être utile quelques fois de pouvoir produire dynamiquement du code PHP et lexécuter dans la foulée. La fonction eval() peut alors vous être utile. Elle prend en paramètre une chaîne de caractères qui contient du code PHP et lexécute. Si votre code contient une instruction return, lexécution du code inséré sarrête et eval() retourne la valeur en question. <?php $code = " \$a++ ; \$a.= \"texte\" ; return \$a" ; $a = 1 ; $a = eval($code) echo $a ; // Affiche 2texte <?php $code = " \$a++ ; \$a.= \"texte\" ; return \$a" ; $a = 1 ; $a = eval($code) echo $a ; // Affiche 2texte
30
Déclaration dun formulaire Formulaires et superglobales 30 Un formulaire HTML est une zone dans laquelle vous insérez des champs et des contrôles que le visiteur manipulera via son navigateur. On peut y dénir des champs de saisie de texte, des cases à cocher, des listes doptions, des champs cachés, des mots de passe, des chiers à envoyer, etc. <!-- Différents champs et balises de données. --> <!-- Différents champs et balises de données. -->
31
Méthode denvoi du formulaire Formulaires et superglobales 31 Méthode GET (transmission par URL) : Une des façons les plus simples pour faire transiter des données de page en page est linsertion de ces données dans lURL (ce qui est afché dans la barre dadresse du navigateur). Méthode POST Entrez du texte : Entrez du texte :
32
Quelle méthode utiliser ? Formulaires et superglobales 32 Le plus souvent, vous pouvez choisir indifféremment lune ou lautre méthode denvoi. Toutefois, la méthode POST simpose dans les cas suivants : envoi dun chier ; envoi de données importantes en taille ; envoi de données condentielles (un mot de passe par exemple) ; si le formulaire déclenche une action spécique qui doit être renouvelée à chaque fois (modération dun article par exemple). La méthode GET est recommandée pour tous les autres cas.
33
Champ de texte Formulaires et superglobales 33 Ils sont créés à partir de la balise en dénissant lattribut type comme étant du texte (type="text"). On utilise ce type de champ quand on a besoin de recueillir de la part de lutilisateur des mots ou des textes de taille limitée. Entrez du texte : Entrez du texte :
34
Zone de texte Formulaires et superglobales 34 Il est souvent nécessaire de disposer dun afchage permettant de caler une plus grande zone de texte. Pour cela, on utilise des zones de texte délimitées par les balises. Contenu de l'article : Contenu de l'article :
35
Cases à cocher Formulaires et superglobales 35 Les cases permettent dinteragir avec vos utilisateurs en dénissant vous-même les réponses possibles. Linteraction avec le visiteur est moindre mais permet de faciliter le traitement informatique des réponses. Disposez vous de l'ADSL ? Disposez vous de l'ADSL ? Par défaut, les cases à cocher renvoient la valeur On quand elles sont cochées. On peut cependant changer la valeur associée à une case à cocher via lattribut value.
36
Bouton radio Formulaires et superglobales 36 Les boutons radio sont assez semblables aux cases à cocher, si ce nest quils ne permettent quun seul choix sur un ensemble. Lapplication la plus directe est la création dun questionnaire à choix multiples Qui était Cyrus ? Le premier... Un empereur... Cyrus le... Qui était Cyrus ? Le premier... Un empereur... Cyrus le...
37
Liste de sélections et liste déroulante Formulaires et superglobales 37 La liste déroulante permet dafcher en un espace réduit une liste déléments. Moins de 1000 euros Entre 1000 et 2000 Entre 2000 et 4000 Plus de 4000 Moins de 1000 euros Entre 1000 et 2000 Entre 2000 et 4000 Plus de 4000
38
Liste de sélections et liste déroulante Formulaires et superglobales 38 Par défaut, le navigateur proposera une liste déroulante, comme à lexemple précédent. Ce type de liste nest pas forcément adapté lorsque les choix sont nombreux. Vous pouvez demander une liste dans un cadre plus classique, en spéciant un nombre de lignes à afcher dans lattribut size. PHP C JAVA C++ HTML PERL PHP C JAVA C++ HTML PERL
39
Liste pour sélections multiples Formulaires et superglobales 39 La liste déroulante que nous venons de voir a un gros défaut : elle ne permet de choisir quun seul élément. Si vous avez besoin que lutilisateur fasse plusieurs choix dans votre liste, il est possible dajouter un attribut vide multiple à la balise. PHP C JAVA C++ HTML PERL PHP C JAVA C++ HTML PERL
40
Champs cachés Formulaires et superglobales 40 Les champs cachés servent à envoyer une valeur sans que lutilisateur ne le voie et ne puisse la modier. Ils sont placés dans le formulaire HTML sous la forme : Lutilisation la plus fréquente est faite dans les formulaires en plusieurs pages. On évite généralement de faire le traitement à la n de chaque page car si lutilisateur ne va pas jusquau bout, les données peuvent présenter des incohérences. On stocke alors dans des champs cachés les données de la page précédente et on les traite toutes lors de la soumission de la dernière page du formulaire.
41
Image cliquable Formulaires et superglobales 41 Il est possible de créer un bouton de validation graphique. Pour cela, on dénira le type image dans une balise input. Les champs additionnels src et alt dénissent respectivement ladresse de limage à afcher et un texte alternatif pour ceux qui nafchent pas les images (les deux sont obligatoires). Quand le visiteur clique sur limage pour soumettre le formulaire, le navigateur récupère la position du clic et en envoie les coordonnées avec le formulaire.
42
Envoi dimages et de chiers Formulaires et superglobales 42 Il est tout à fait possible dans un formulaire de permettre à un utilisateur denvoyer des images ou des chiers dont il dispose sur son poste. On utilise dans ce but la balise. Contrairement aux autres balises, il faut spécier dans la balise que nous enverrons des données autres que textuelles. Pour cela, on se sert de lattribut enctype en lui attribuant la valeur multipart/form-data.
43
Utilisation des superglobales Formulaires et superglobales 43 Toutes les données envoyées se retrouvent dans ce quon appelle des superglobales. Il sagit de tableaux qui ont une portée globale où quils soient utilisés. Vous pouvez y accéder depuis un contexte global, depuis une fonction ou une méthode de classe sans avoir besoin de vous soucier de la portée des variables. nous utiliserons quatre superglobales : Le tableau $_GET[] contient toutes les données envoyées via lURL. Le tableau $_POST[] contient les données envoyées via un formulaire en POST (attribut method="post"). Le tableau $_FILES[] contient les informations sur les chiers envoyés par le visiteur. Le tableau $_REQUEST[] est quant à lui une fusion des deux premiers avec la superglobale $_COOKIE[]. Si des données avec le même nom sont envoyées via plusieurs méthodes, la priorité est donnée aux cookies, puis à la méthode POST.
44
Récupération dune donnée simple Formulaires et superglobales 44 Pour récupérer le contenu dun champ de formulaire du nom de X, il suft de lire lindex X de la superglobale. Entrez votre texte : Entrez votre texte : echo $_REQUEST['montexte'] ;
45
Gestion des magic_quotes Formulaires et superglobales 45 Si la directive de conguration magic_quotes_gpc (gpc correspond à get post cookies) est activée dans votre conguration, PHP modie toutes les données reçues avant que vous ny accédiez. Il procède de la même façon que la fonction addslashes(), en ajoutant une barre oblique inverse devant certains caractères comme les apostrophes ou les barres obliques inverses elles-mêmes. Cette conversion est faite pour permettre dutiliser sans risque les données dans des requêtes SQL (vous êtes alors protégé contre les injections SQL les plus courantes). if (get_magic_quotes_gpc()) { $donneePourSQL = $_REQUEST['donnee'] ; } else { $donneePourSQL = addslashes( $_REQUEST['donnee'] ) ; } if (get_magic_quotes_gpc()) { $donneePourSQL = $_REQUEST['donnee'] ; } else { $donneePourSQL = addslashes( $_REQUEST['donnee'] ) ; }
46
Utilisation des cases à cocher Formulaires et superglobales 46 La valeur par défaut (modiable lors de la création du formulaire) dune case à cocher est On. Ce texte sera transmis uniquement si la case est cochée, sinon rien ne sera envoyé. Vous pouvez donc tester létat dune case à cocher avec la fonction isset(). Si lélément cherché existe (quelle que soit sa valeur), cest que la case a été cochée, sinon cest quelle est décochée. if ( isset($_REQUEST['case_a_cocher']) ) { echo 'La case est cochée ' ; echo 'sa valeur est ', $_REQUEST['case_a_cocher'] ; } else { echo 'La case n\est pas cochée' ; } if ( isset($_REQUEST['case_a_cocher']) ) { echo 'La case est cochée ' ; echo 'sa valeur est ', $_REQUEST['case_a_cocher'] ; } else { echo 'La case n\est pas cochée' ; }
47
Validation de données avec lextension Filter Formulaires et superglobales 47 Une solution de ltrage simple est arrivée avec la version 5.2 de PHP : il sagit de lextension Filter. Cette extension permet de valider et de ltrer les données venant habituellement de sources non sécurisées comme les entrées utilisateur. Lextension est composée de quatre composants : une liste de fonctions qui permettent dagir sur les données en entrée et dy appliquer éventuellement des ltres ; une liste de constantes représentant les sources de données (GET, POST, COOKIE, etc.) sur lesquelles appliquer les fonctions précédentes ; une liste de ltres à appliquer, ou non, aux données ; une liste doptions permettant de gérer nement lapplication des ltres. La combinaison de ces composants permet, par exemple, de tester lexistence dune variable adresse provenant dun formulaire, puis de la récupérer tout en vériant quil sagit bien dune adresse e-mail.
48
Validation dune adresse e-mail Formulaires et superglobales 48 An de vous permettre de voir dun seul coup dœil les possibilités de cette extension, prenons un exemple classique : la réception dun formulaire contenant une adresse e-mail. Lextension Filter va nous permettre de valider quil sagit là dune adresse e-mail bien formée. <?php // Validation $mail = filter_input(INPUT_POST, 'mel', FILTER_VALIDATE_EMAIL) ; if ($mail === FALSE){ echo 'Le mail fourni n est pas valide' ; }elseif($mail === NULL){ echo 'mel n était pas définie.' ; }else{ echo "La variable est une adresse e-mail valide : $mail"; } ?> <?php // Validation $mail = filter_input(INPUT_POST, 'mel', FILTER_VALIDATE_EMAIL) ; if ($mail === FALSE){ echo 'Le mail fourni n est pas valide' ; }elseif($mail === NULL){ echo 'mel n était pas définie.' ; }else{ echo "La variable est une adresse e-mail valide : $mail"; } ?>
49
Filtrer une variable Formulaires et superglobales 49 On ltre une variable avec la fonction filter_var(). Celle-ci prend comme arguments une variable et un type de ltre. Il est également possible de lui ajouter un tableau doptions en troisième argument. La fonction retourne la variable ltrée, ou FALSE en cas déchec. Dans lexemple suivant, nous utilisons FILTER_SANITIZE_SPECIAL_CHARS qui ltre tous les caractères spéciaux en HTML et XML pour les convertir en entité. <?php $adresse = "Bonjour Éric " ; $message = filter_var($adresse, FILTER_SANITIZE_SPECIAL_CHARS) ; echo $message ; ?> <?php $adresse = "Bonjour Éric " ; $message = filter_var($adresse, FILTER_SANITIZE_SPECIAL_CHARS) ; echo $message ; ?>
50
Les ltres les plus courants Formulaires et superglobales 50 Les ltres sont représentés par des constantes. On les passera en paramètres des fonctions que nous utiliserons. On peut distinguer deux types de ltres : les ltres de validation et ceux dits de conversion. La liste de tous les ltres disponibles peut être obtenue via la fonction filter_list(). Seuls deux ltres nappartiennent à aucune de ces deux catégories : Le ltre FILTER_UNSAFE_RAW se contente de retourner les données sans rien vérier ni modier. Le ltre FILTER_CALLBACK permet dappeler une fonction utilisateur qui validera les données.
51
Les ltres de validation Formulaires et superglobales 51 Ces ltres servent à valider une donnée sans la modier. Si la donnée est invalide, la valeur false est renvoyée. Ils contiennent généralement le mot-clé VALIDATE : FILTER_VALIDATE_EMAIL sassure que la donnée représente une adresse e-mail. FILTER_VALIDATE_URL sassure que la donnée représente une URL (adresse web). FILTER_VALIDATE_REGEXP sassure que la donnée correspond à une expression rationnelle compatible Perl (PCRE) passée en paramètre avec les options. FILTER_VALIDATE_INT sassure que la donnée représente un nombre entier. FILTER_VALIDATE_FLOAT sassure que la donnée représente un nombre réel. FILTER_VALIDATE_BOOLEAN sassure que la donnée représente un booléen et retourne NULL en cas déchec au lieu de FALSE. FILTER_VALIDATE_IP sassure que la donnée représente une adresse IP.
52
Les ltres de conversion Formulaires et superglobales 52 Ces ltres servent à convertir la donnée de façon à sassurer quelle respecte toujours le format attendu. Ces ltres contiennent généralement le mot-clé SANITIZE : FILTER_SANITIZE_STRIPPED retire les balises HTML. FILTER_SANITIZE_EMAIL retire tous les caractères qui ne devraient pas se retrouver dans une adresse e-mail. FILTER_SANITIZE_SPECIAL_CHARS code les caractères spéciaux en HTML et XML sous forme dentités. FILTER_SANITIZE_NUMBER_INT retire tous les caractères qui ne composent pas un nombre entier. FILTER_SANITIZE_NUMBER_FLOAT retire tous les caractères qui ne composent pas un nombre à virgule ottante. FILTER_SANITIZE_URL retire tous les caractères qui ne composent pas une URL. FILTER_SANITIZE_ENCODED convertit tous les caractères étendus dune URL dans leurs équivalents %xx. FILTER_SANITIZE_MAGIC_QUOTES applique la fonction addslashes() et opère une action identique à la directive de conguration magic_quotes_gpc.
53
Utiliser les ltres sur les superglobales Formulaires et superglobales 53 Plutôt que de lire les données dans les variables superglobales puis de les passer à filter_var(), il est possible de demander au ltrage de lire directement les données utilisateur. Cette procédure a lavantage de permettre une vérication rapide du code : si nous ltrons bien toutes nos variables en entrées, nous naurons jamais à lire les variables superglobales. Lextension Filter le fait pour nous et nous retourne les résultats déjà ltrés. À la place de filter_var() et filter_var_array(), nous utilisons donc filter_input() et filter_input_array(). Au lieu de prendre une valeur directement en paramètre, on donne à ces variables une source et un nom pour la donnée à récupérer. <?php $m = filter_input(INPUT_POST, "adr", FILTER_SANITIZE_SPECIAL_CHARS) ; echo $m ; ?> <?php $m = filter_input(INPUT_POST, "adr", FILTER_SANITIZE_SPECIAL_CHARS) ; echo $m ; ?>
54
Utiliser les ltres sur les superglobales Formulaires et superglobales 54 An de ne pas tenter de ltrer une donnée inexistante, la fonction filter_has_var() prend en paramètres une source de données et un nom de champ. Elle retourne une valeur vraie ou fausse en fonction de lexistence ou non de la valeur recherchée <?php if ( filter_has_var(INPUT_POST, "adr") ) { $m = filter_input(INPUT_POST, "adr", FILTER_SANITIZE_SPECIAL_CHARS) ; echo $m ; } ?> <?php if ( filter_has_var(INPUT_POST, "adr") ) { $m = filter_input(INPUT_POST, "adr", FILTER_SANITIZE_SPECIAL_CHARS) ; echo $m ; } ?>
55
Sources de données Formulaires et superglobales 55 Les sources de données sont représentées par différentes constantes : INPUT_GET pour les données dans $_GET ; INPUT_POST pour les données dans $_POST ; INPUT_COOKIE pour les données dans $_COOKIE ; INPUT_REQUEST pour les données dans $_REQUEST ; INPUT_SESSION pour les données dans $_SESSION ; INPUT_ENV pour les données dans $_ENV ; INPUT_SERVER pour les données dans $_SERVER.
56
Exemples dutilisation : Validation avec une expression régulière Formulaires et superglobales 56 <?php // Données à valider $chaine1 = 'baobab'; $chaine2 = 'babo'; // Expression régulière $regexp = '/^(b(a|o))*$/'; // Validation if(filter_var($chaine1, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp" => $regexp))) !== false){ echo "La chaine $chaine1 est valide.\n"; } if(filter_var($chaine2, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp" => $regexp))) !== false){ echo "La chaine $chaine2 est valide.\n"; } ?> <?php // Données à valider $chaine1 = 'baobab'; $chaine2 = 'babo'; // Expression régulière $regexp = '/^(b(a|o))*$/'; // Validation if(filter_var($chaine1, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp" => $regexp))) !== false){ echo "La chaine $chaine1 est valide.\n"; } if(filter_var($chaine2, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp" => $regexp))) !== false){ echo "La chaine $chaine2 est valide.\n"; } ?>
57
Exemples dutilisation : Validation dune adresse IP Formulaires et superglobales 57 <?php // Données à valider $ip = '192.168.0.1'; // Validation if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) echo "L'adresse $ip est une adresse IPV4 valide.\n"; if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE) !== false) echo "L'adresse n'est pas locale.\n"; else echo "L'adresse $ip est locale.\n"; ?> <?php // Données à valider $ip = '192.168.0.1'; // Validation if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) echo "L'adresse $ip est une adresse IPV4 valide.\n"; if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE) !== false) echo "L'adresse n'est pas locale.\n"; else echo "L'adresse $ip est locale.\n"; ?>
58
Listes à sélections multiples Formulaires et superglobales 58 La balise nous permet davoir des listes à sélections multiples. Quand on fait plusieurs sélections, le navigateur envoie plusieurs fois le même paramètre avec les différentes valeurs. PHP interprète mal cette syntaxe et la dernière écrase les autres. Vous ne relirez donc quune seule des sélections du visiteur. Pour pallier ce problème, vous pouvez utiliser une syntaxe de tableau. En mettant [] à la n du nom du champ, PHP comprendra quil sagit dune liste, avec plusieurs valeurs. PHP C JAVA C++ HTML PERL PHP C JAVA C++ HTML PERL foreach( $_REQUEST['id_langage'] as $option ) { echo 'La case ',$option,' a été cochée '; } foreach( $_REQUEST['id_langage'] as $option ) { echo 'La case ',$option,' a été cochée '; }
59
Gestion des images cliquables Formulaires et superglobales 59 Quand une image est employée comme bouton de soumission du formulaire, le navigateur enregistre la position du clic de souris dans limage et transmet les coordonnées lors de lenvoi. Vous pouvez par la suite y accéder via PHP comme à toutes les autres données. Labscisse du point de clic est donnée par un index qui porte le même nom que le bouton cliqué avec _x comme sufxe. Lordonnée, elle, utilise _y comme sufxe. Le point de coordonnées (0,0) est le point en haut à gauche de limage. <?php echo $_REQUEST['img_x']; echo $_REQUEST['img_y']; <?php echo $_REQUEST['img_x']; echo $_REQUEST['img_y'];
60
Téléchargements dimages et de chiers Formulaires et superglobales 60 Les chiers envoyés avec un formulaire se traitent différemment des autres données. La différence la plus visible est lutilisation de la superglobale $_FILES[]. Cest avec cette dernière que vous pourrez accéder aux chiers téléchargés. Il sagit dun tableau associatif à deux niveaux. Le premier champ doit être le nom du champ de formulaire (fichier dans notre exemple), le second paramètre concerne plusieurs informations sur le chier transmis $_FILES['fichier']['name'] : nom et adresse originels du chier sur le disque de lutilisateur ; $_FILES['fichier']['type'] : type mime du chier ; $_FILES['fichier']['size'] : taille du chier en octets ; $_FILES['fichier']['tmp_name'] : nom et adresse du chier temporaire stocké sur le serveur ; $_FILES['fichier']['error'] : code erreur associé au téléchargement.
61
Téléchargements dimages et de chiers Formulaires et superglobales 61 <?php $fichier = $_FILES['fichier']['name']; $taille = $_FILES['fichier']['size']; $tmp = $_FILES['fichier']['tmp_name']; $type = $_FILES['fichier']['type']; $erreur = $_FILES['fichier']['error']; echo "Nom d'origine => $fichier "; echo "Taille => $taille "; echo "Adresse temporaire sur le serveur => $tmp "; echo "Type de fichier => $type "; echo "Code erreur => $erreur. "; ?> <?php $fichier = $_FILES['fichier']['name']; $taille = $_FILES['fichier']['size']; $tmp = $_FILES['fichier']['tmp_name']; $type = $_FILES['fichier']['type']; $erreur = $_FILES['fichier']['error']; echo "Nom d'origine => $fichier "; echo "Taille => $taille "; echo "Adresse temporaire sur le serveur => $tmp "; echo "Type de fichier => $type "; echo "Code erreur => $erreur. "; ?> <?php $nom_fichier = $_FILES['img']['tmp_name']; $nom_destination = './img/725.jpg'; move_uploaded_file($nom_fichier, $nom_destination); ?> <?php $nom_fichier = $_FILES['img']['tmp_name']; $nom_destination = './img/725.jpg'; move_uploaded_file($nom_fichier, $nom_destination); ?>
62
Téléchargements dimages et de chiers Formulaires et superglobales 62 PHP retourne un code derreur dans la superglobale $_FILES[]. Voici une liste des valeurs que vous pourrez rencontrer : UPLOAD_ERR_OK – le téléchargement est correct. UPLOAD_ERR_INI_SIZE – le chier téléchargé excède la taille maximale dénie dans la conguration de PHP par la directive upload_max_lesize. UPLOAD_ERR_FORM_SIZE – le chier téléchargé excède la taille maximale dénie dans le formulaire HTML. UPLOAD_ERR_PARTIAL – le chier na été que partiellement chargé, probablement arrêté par lutilisateur. UPLOAD_ERR_NO_FILE – aucun chier na été téléchargé.
63
Téléchargements dimages et de chiers Formulaires et superglobales 63 if ($err = $_FILES['fichier']['error']) { echo "il y a eu une erreur " ; if ($err == UPLOAD_ERR_INI_SIZE) echo "Le fichier est plus gros que le max autorisé par PHP"; elseif ($err == UPLOAD_ERR_FORM_SIZE) echo "Le fichier est plus gros quindiqué dans le formulaire"; elseif ($err == UPLOAD_ERR_PARTIAL) echo "Le fichier n'a été que partiellement téléchargé"; elseif ($err == UPLOAD_ERR_NO_FILE) echo "Aucun fichier n'a été téléchargé."; } else echo "fichier correctement téléchargé" ; if ($err = $_FILES['fichier']['error']) { echo "il y a eu une erreur " ; if ($err == UPLOAD_ERR_INI_SIZE) echo "Le fichier est plus gros que le max autorisé par PHP"; elseif ($err == UPLOAD_ERR_FORM_SIZE) echo "Le fichier est plus gros quindiqué dans le formulaire"; elseif ($err == UPLOAD_ERR_PARTIAL) echo "Le fichier n'a été que partiellement téléchargé"; elseif ($err == UPLOAD_ERR_NO_FILE) echo "Aucun fichier n'a été téléchargé."; } else echo "fichier correctement téléchargé" ;
64
Formulaire dynamique et tableaux Formulaires et superglobales 64 On peut gérer un formulaire dynamiquement et insérer ou non des champs selon des paramètres internes. Une des possibilités offertes est de créer un nombre variable de champs et de pouvoir récupérer toutes les données avec PHP par la suite. Il existe deux méthodes pour gérer ce cas. La première consiste à utiliser la même syntaxe que les listes à sélections multiples. En ajoutant [] après chaque nom de champ, PHP crée des tableaux avec chaque valeur, comme pour une sélection multiple. for( $i = 0 ; $i < 10 ; $i++ ) { echo " " ; } for( $i = 0 ; $i < 10 ; $i++ ) { echo " " ; }
65
Formulaire dynamique et tableaux Formulaires et superglobales 65 La seconde consiste à pré-créer lindex lors de la création du formulaire : <?php for( $i = 0 ; $i < 10 ; $i++ ) { echo 'select name="id_langage[$i][]" size="6" multiple>' ; echo ' PHP ' ; echo ' C ' ; echo ' JAVA ' ; echo ' C++ ' ; echo ' HTML ' ; echo ' PERL ' ; echo ' ' ; } <?php for( $i = 0 ; $i < 10 ; $i++ ) { echo 'select name="id_langage[$i][]" size="6" multiple>' ; echo ' PHP ' ; echo ' C ' ; echo ' JAVA ' ; echo ' C++ ' ; echo ' HTML ' ; echo ' PERL ' ; echo ' ' ; }
66
Gestion du temps Formulaires et superglobales 66 Il peut arriver que lenvoi dun chier trop volumineux engendre un message derreur indiquant que le temps maximal dexécution du script a été dépassé. Pour éviter cela, on peut faire appel à la fonction set_time_limit(), qui permet de xer le temps maximal dexécution dun script. La valeur par défaut est de 30 secondes, mais peut être changée avec la directive max_execution_time dénie dans le chier de conguration. Si la valeur est zéro, il ny a alors aucune limite imposée. Un autre cas à gérer est larrêt du téléchargement par lutilisateur. Celui-ci peut à tout moment cliquer sur le bouton arrêter de son navigateur. Pour permettre au script de poursuivre son exécution, même dans le cas où lutilisateur se déconnecte, on utilise la fonction ignore_user_abort().
67
Gestion de la taille des données Formulaires et superglobales 67 Pour des raisons de sécurité, PHP limite la taille des chiers via la directive post_max_size contenue dans le chier de conguration php.ini. Par défaut, PHP accepte des chiers de taille inférieure ou égale à 8 Mo. Il est bien entendu possible de modier ce paramètre pour accepter le téléchargement de chiers plus lourds.
68
Procédure de gestion des formulaires Formulaires et superglobales 68 Il est fréquent quun visiteur ne remplisse pas correctement un formulaire dès la première tentative. Dans ce cas, on réafche le formulaire, mais on ne peut décemment demander à lutilisateur de tout retaper. Donc, on va réafcher le formulaire en lui donnant en valeurs par défaut les champs qui étaient corrects et en surlignant les champs à réécrire avec, éventuellement, un message explicatif.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.