le langage php 5 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Le langage PHP 5 PowerPoint Presentation
Download Presentation
Le langage PHP 5

Loading in 2 Seconds...

play fullscreen
1 / 68

Le langage PHP 5 - PowerPoint PPT Presentation


  • 120 Views
  • Uploaded on

Le langage PHP 5. Sommaire. Qu’est-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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Le langage PHP 5' - arlen


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
sommaire
Sommaire
  • Qu’est-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 fichiers
  • Gestion des flux et Flux de sortie PHP
  • Envoyer et recevoir des e-mails
  • Travailler avec une base de données
sommaire1
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
fonctions usuelles
Fonctions usuelles

Quelques fonctions très utiles

  • print_r (variable) : L’affichage de tableaux ou d’objets
  • var_dump() : L’affichage de tableaux ou d’objets
  • mt_rand([minimum,maximum]) : générateur de nombres aléatoires « Mersenne Twister »
fonctions usuelles1
Fonctions usuelles

Informations de configuration

  • PHP peut communiquer tout ce qu’il sait sur sa configuration 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 d’environnement, les entêtes HTTP et les informations de configuration.
fonctions usuelles2
Fonctions usuelles

Informations de configuration

fonctions usuelles3
Fonctions usuelles

Informations de configuration

  • Les options de la fonction phpinfo() :
fonctions usuelles4
Fonctions usuelles

Informations de configuration

<?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).

?>

fonctions usuelles5
Fonctions usuelles

Coloration syntaxique de code

  • Vous avez peut être remarqué sur certains sites traitant de PHP que le code donné dans les tutoriaux est coloré. Cette coloration n’est 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 l’envoyer à l’affichage.
  • Il est aussi possible d’afficher directement le contenu d’un fichier de cette façon. Il vous suffit pour cela de faire appel à highlight_file()
fonctions usuelles6
Fonctions usuelles

Connaître les extrémités

  • La fonction max() retourne la plus grande valeur numérique parmi les valeurs passées en paramètres.
  • La fonction min() est l’opposé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)

?>

fonctions usuelles7
Fonctions usuelles

Arrondir des valeurs

  • Trois fonctions permettent d’arrondir des nombres : round() renvoie l’entier le plus proche, floor() arrondit à l’entier immédiatement inférieur et ceil() retourne l’entier 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

?>

fonctions usuelles8
Fonctions usuelles

Travailler sur différentes bases

  • 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;

?>

fonctions usuelles9
Fonctions usuelles

Travailler sur différentes bases

  • 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.
fonctions usuelles10
Fonctions usuelles

Formater une date/heure locale

  • La fonction date (format , timestamp) retourne une date sous forme d’une chaîne, au format donné par le premier paramètre. La date est fournie par le second paramètre sous la forme d’un timestamp Unix. Si le second paramètre n’est 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

?>

fonctions usuelles11
Fonctions usuelles

Formater une date/heure locale

fonctions usuelles12
Fonctions usuelles

Formater une date/heure locale

  • Pour calculer un timestamp à partir d’une 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 d’une 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 date("d/M/Y", mktime (0,0,0,12,32,2004))."<br>";

echo date("d/m/Y", mktime (0,0,0,13,1,2005))."<br>";

echo date("M-d-Y", mktime (0,0,0,1,1,2001));

?>

fonctions usuelles13
Fonctions usuelles

Tester les dates

  • La fonction checkdate(mois, jour, annee) renvoie TRUE si la date représentée par le jour, le mois et l’anné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 d’anniversairefournie

// sous la forme JJ/MM/AAAA

$anniversaire = $_REQUEST['anniversaire'];

$tab = explode("/",$anniversaire);

// On vérifiequecette date estvalide

if (checkdate($tab[1],$tab[0],$tab[2])){

echo 'La date estvalide.';

}else{

echo 'La date est invalide.';

}

?>

fonctions usuelles14
Fonctions usuelles

Comparer les dates

  • Il est possible grâce aux fonctions de date, de calculer les temps d’exé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 afin de les comparer.
  • La fonction microtime() fonctionne de manière identique, mais renvoie aussi la partie décimale de l’heure en cours.

<?php

$tps1 = time();

// Divers traitements.

$tps2 = time();

$tps = $tps2 – $tps1;

echo "Le temps nécessaire à l’exécution des traitements est $tps";

?>

fonctions usuelles15
Fonctions usuelles

Comparer les dates

<?php

functiontempspasse($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 s’est écoulé depuis

la création du fichier phpinfo.php: */

echotempspasse(filectime('phpinfo.php'));

fonctions usuelles16
Fonctions usuelles

Résolution DNS d’une adresse IP

  • La fonction checkdnsrr(hôte [, type]) vérifie qu’il 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 l’une 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";

?>

fonctions usuelles17
Fonctions usuelles

Corrélation IP/DNS

  • 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.
  • La fonction inverse est la fonction gethostbyaddr(), qui renvoie le nom d’hôte correspondant à une adresse IP.

<?php

$result = dns_get_record("php.net");

echo '<pre>' ;

print_r($result);

echo '</pre>' ;

?>

fonctions usuelles18
Fonctions usuelles

chiffrement, hachage, codage/décodage

  • 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 d’obtenir une chaîne non prédictible et qui semble aléatoire à partir d’un texte ou d’une donnée. La chaîne résultante est généralement assez courte.
  • Les procédés de codage et décodage permettent, eux, d’avoir une opération à double sens. Une fois la chaîne transformée, il est possible de revenir à la donnée d’origine, que ce soit avec un mot de passe ou grâce à un système plus complexe.
fonctions usuelles19
Fonctions usuelles

chiffrement, hachage, codage/décodage

  • Il y a trois applications classiques aux fonctions de hachage.
    • les mots de passe : Plutôt que de stocker un mot de passe en claire, il est possible de stocker son hachage.
    • l’identification : Les chaînes hachées sont généralement courtes (32 caractères pour le hachage MD5 par exemple).
    • vérifier l’intégrité d’un fichier transféré.
fonctions usuelles20
Fonctions usuelles

chiffrement, hachage, codage/décodage

  • La fonction PHP pour la méthode de hachage CRC32 se nomme crc32(). Il suffit 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;

?>

fonctions usuelles21
Fonctions usuelles

chiffrement, hachage, codage/décodage

  • 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 ;

?>

fonctions usuelles22
Fonctions usuelles

chiffrement, hachage, codage/décodage

  • 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é d’une 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 qu’elles 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().
fonctions usuelles23
Fonctions usuelles

chiffrement, hachage, codage/décodage

  • 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 d’avoir un mot-clé pour coder et un pour décoder. Généralement, on en réserve un pour soi et on diffuse l’autre.
  • Le module mcrypt dans PHP gère pratiquement tous les algorithmes et les méthodes de codage qui sont rencontrées le plus souvent.
fonctions usuelles24
Fonctions usuelles

<?php

// On retient l’heure 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 qu’elle s’exécute à la fin

register_shutdown_function('statistiques') ;

/* Mettez ici votre script normal

son temps d’exécution sera calculé

et enregistré dans stats.txt */

Fonction à l’arrêt du script

  • PHP exécute automatiquement certaines actions à la clôture du script. Vous pouvez vous-même enregistrer du code pour qu’il soit exécuté juste avant l’arrêt du script.
  • Si vous fournissez un nom de fonction à register_shutdown_function(), PHP l’enregistre et l’exécute juste avant de terminer le script. La fonction n’est appelée à la fin de l’exé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.
fonctions usuelles25
Fonctions usuelles

Exécution d’une chaîne de code PHP

  • Il peut être utile quelques fois de pouvoir produire dynamiquement du code PHP et l’exé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 l’exécute. Si votre code contient une instruction return, l’exécution du code inséré s’arrête et eval() retourne la valeur en question.

<?php

$code = " \$a++ ; \$a .= \"texte\" ; return \$a" ;

$a = 1 ;

$a = eval($code)

echo $a ; // Affiche 2texte

formulaires et superglobales
Formulaires et superglobales

Déclaration d’un formulaire

  • 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éfinir des champs de saisie de texte, des cases à cocher, des listes d’options, des champs cachés, des mots de passe, des fichiers à envoyer, etc.

<form action='reception_formulaire.php'>

<!--

Différents champs et balises de données.

-->

</form>

formulaires et superglobales1
Formulaires et superglobales

Méthode d’envoi du formulaire

  • Méthode GET (transmission par URL) :Une des façons les plus simples pour faire transiter des données de page en page est l’insertion de ces données dans l’URL (ce qui est affiché dans la barre d’adresse du navigateur).
  • Méthode POST

<form action="script.php" method="POST"><p>

Entrez du texte :<BR>

<input name="variable" type="text"><br>

<input type="submit" value="valider">

</p></form>

formulaires et superglobales2
Formulaires et superglobales

Quelle méthode utiliser ?

  • Le plus souvent, vous pouvez choisir indifféremment l’une ou l’autre méthode d’envoi. Toutefois, la méthode POST s’impose dans les cas suivants :
    • envoi d’un fichier ;
    • envoi de données importantes en taille ;
    • envoi de données confidentielles (un mot de passe par exemple) ;
    • si le formulaire déclenche une action spécifique qui doit être renouvelée à chaque fois (modération d’un article par exemple).
  • La méthode GET est recommandée pour tous les autres cas.
formulaires et superglobales3
Formulaires et superglobales

Champ de texte

  • Ils sont créés à partir de la balise <input> en définissant l’attribut type comme étant du texte (type="text"). On utilise ce type de champ quand on a besoin de recueillir de la part de l’utilisateur des mots ou des textes de taille limitée.

<form action="form.php" method="POST"><p>

Entrez du texte : <br>

<input type="text" name="champ1"><br>

<input type="Submit" value="Soumettre la requête">

</p></form>

formulaires et superglobales4
Formulaires et superglobales

Zone de texte

  • Il est souvent nécessaire de disposer d’un affichage permettant de caler une plus grande zone de texte. Pour cela, on utilise des zones de texte délimitées par les balises <textarea></textarea>.

<form action="./form.php" method="POST"><p>

Contenu de l'article :<br>

<textarea name="texte_long"></texarea>

<input type="submit" value="Soumettre la requête">

</p></form>

formulaires et superglobales5
Formulaires et superglobales

Cases à cocher

  • Les cases permettent d’interagir avec vos utilisateurs en définissant vous-même les réponses possibles. L’interaction avec le visiteur est moindre mais permet de faciliter le traitement informatique des réponses.

<form action="./form.php" method="POST"></p>

Disposezvous de l'ADSL ?

<input type="checkbox" name="qcm1"><br>

<input type="Submit" value="Soumettre la requête">

</form>

  • 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 l’attribut value.
formulaires et superglobales6
Formulaires et superglobales

Bouton radio

  • Les boutons radio sont assez semblables aux cases à cocher, si ce n’est qu’ils ne permettent qu’un seul choix sur un ensemble. L’application la plus directe est la création d’un questionnaire à choix multiples

<form action="cases.php" method="POST"><p>

Qui était Cyrus ?<br>

<input type="Radio" name="radio1" value=1> Le premier ...

<input type="Radio" name="radio1" value=2> Un empereur ...

<input type="Radio" name="radio1" value=3> Cyrus le ...

<input type="submit" value="valider">

</p></form>

formulaires et superglobales7
Formulaires et superglobales

Liste de sélections et liste déroulante

  • La liste déroulante permet d’afficher en un espace réduit une liste d’éléments.

<select name= "salaire">

< !--Ici les différentes options possibles-->

<option value="1">Moins de 1000 euros</option>

<option value="2">Entre 1000 et 2000</option>

<option value="3">Entre 2000 et 4000</option>

<option value="4">Plus de 4000</option>

</select>

formulaires et superglobales8
Formulaires et superglobales

Liste de sélections et liste déroulante

  • Par défaut, le navigateur proposera une liste déroulante, comme à l’exemple précédent. Ce type de liste n’est pas forcément adapté lorsque les choix sont nombreux. Vous pouvez demander une liste dans un cadre plus classique, en spécifiant un nombre de lignes à afficher dans l’attribut size.

<select name="id_langage" size="6">

<option value="1">PHP</option>

<option value="2">C</option>

<option value="3">JAVA</option>

<option value="4">C++</option>

<option value="5">HTML</option>

<option value="6">PERL</option>

</select>

<input type="submit" name="Submit" value="Envoyer">

formulaires et superglobales9
Formulaires et superglobales

Liste pour sélections multiples

  • La liste déroulante que nous venons de voir a un gros défaut : elle ne permet de choisir qu’un seul élément. Si vous avez besoin que l’utilisateur fasse plusieurs choix dans votre liste, il est possible d’ajouter un attribut vide multiple à la balise <select>.

<select name="id_langage[]" size="6" multiple>

<option value="1">PHP</option>

<option value="2">C</option>

<option value="3">JAVA</option>

<option value="4">C++</option>

<option value="5">HTML</option>

<option value="6">PERL</option>

</select>

<input type="submit" name="Submit" value="Envoyer">

formulaires et superglobales10
Formulaires et superglobales

Champs cachés

  • Les champs cachés servent à envoyer une valeur sans que l’utilisateur ne le voie et ne puisse la modifier. Ils sont placés dans le formulaire HTML sous la forme :

<input type="hidden" name="identifiant" value="52">

  • L’utilisation la plus fréquente est faite dans les formulaires en plusieurs pages. On évite généralement de faire le traitement à la fin de chaque page car si l’utilisateur ne va pas jusqu’au 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.
formulaires et superglobales11
Formulaires et superglobales

Image cliquable

  • Il est possible de créer un bouton de validation graphique. Pour cela, on définira le type image dans une balise input. Les champs additionnels src et altdéfinissent respectivement l’adresse de l’image à afficher et un texte alternatif pour ceux qui n’affichent pas les images (les deux sont obligatoires).

<input type="image" name="img" src="images/logo.gif" alt="logo">

  • Quand le visiteur clique sur l’image pour soumettre le formulaire, le navigateur récupère la position du clic et en envoie les coordonnées avec le formulaire.
formulaires et superglobales12
Formulaires et superglobales

Envoi d’images et de fichiers

  • Il est tout à fait possible dans un formulaire de permettre à un utilisateur d’envoyer des images ou des fichiers dont il dispose sur son poste. On utilise dans ce but la balise <input type="file">. Contrairement aux autres balises, il faut spécifier dans la balise <form> que nous enverrons des données autres que textuelles. Pour cela, on se sert de l’attribut enctype en lui attribuant la valeur multipart/form-data.

<form action="up.php" method="POST" enctype="multipart/form-data">

<P>

<input type="file" name="fichier" size="40">

<input type="submit" value="Envoyer">

</P>

</form>

formulaires et superglobales13
Formulaires et superglobales

Utilisation des superglobales

  • Toutes les données envoyées se retrouvent dans ce qu’on appelle des superglobales. Il s’agit de tableaux qui ont une portée globale où qu’ils 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 l’URL.
    • 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 fichiers 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.
formulaires et superglobales14
Formulaires et superglobales

Récupération d’une donnée simple

  • Pour récupérer le contenu d’un champ de formulaire du nom de X, il suffit de lire l’index X de la superglobale.

<form action="form.php" method="POST"><p>

Entrezvotretexte : <br>

<input type="text" name="montexte"><br>

<input type="Submit">

</p></form>

echo $_REQUEST['montexte'] ;

formulaires et superglobales15
Formulaires et superglobales

Gestion des magic_quotes

  • Si la directive de configurationmagic_quotes_gpc (gpc correspond à get post cookies) est activée dans votre configuration, PHP modifie toutes les données reçues avant que vous n’y 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 d’utiliser 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'] ) ;

}

formulaires et superglobales16
Formulaires et superglobales

Utilisation des cases à cocher

  • La valeur par défaut (modifiable lors de la création du formulaire) d’une 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 d’une case à cocher avec la fonction isset(). Si l’élément cherché existe (quelle que soit sa valeur), c’est que la case a été cochée, sinon c’est qu’elle est décochée.

if ( isset($_REQUEST['case_a_cocher']) ) {

echo 'La case estcochée ' ;

echo 'savaleurest ', $_REQUEST['case_a_cocher'] ;

} else {

echo 'La case n\’est pas cochée' ;

}

formulaires et superglobales17
Formulaires et superglobales

Validation de données avec l’extension Filter

  • Une solution de filtrage simple est arrivée avec la version 5.2 de PHP : il s’agit de l’extension Filter. Cette extension permet de valider et de filtrer les données venant habituellement de sources non sécurisées comme les entrées utilisateur.
  • L’extension est composée de quatre composants :
    • une liste de fonctions qui permettent d’agir sur les données en entrée et d’y appliquer éventuellement des filtres ;
    • 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 filtres à appliquer, ou non, aux données ;
    • une liste d’options permettant de gérer finement l’application des filtres.
  • La combinaison de ces composants permet, par exemple, de tester l’existence d’une variable adresse provenant d’un formulaire, puis de la récupérer tout en vérifiant qu’il s’agit bien d’une adresse e-mail.
formulaires et superglobales18
Formulaires et superglobales

Validation d’une adresse e-mail

  • Afin de vous permettre de voir d’un seul coup d’œil les possibilités de cette extension, prenons un exemple classique : la réception d’un formulaire contenant une adresse e-mail. L’extension Filter va nous permettre de valider qu’il s’agit là d’une adresse e-mail bien formée.

<form method='POST' action='filter.php'>

<input type=text name=mel>

<input type="Submit" value="Soumettre la requête">

</form>

<?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 estuneadresse e-mail valide : $mail";

}

?>

formulaires et superglobales19
Formulaires et superglobales

Filtrer une variable

  • On filtre une variable avec la fonction filter_var(). Celle-ci prend comme arguments une variable et un type de filtre. Il est également possible de lui ajouter un tableau d’options en troisième argument. La fonction retourne la variable filtrée, ou FALSE en cas d’échec.
  • Dans l’exemple suivant, nous utilisons FILTER_SANITIZE_SPECIAL_CHARS qui filtre tous les caractères spéciaux en HTML et XML pour les convertir en entité.

<?php

$adresse = "Bonjour <b>Éric<b>" ;

$message = filter_var($adresse, FILTER_SANITIZE_SPECIAL_CHARS) ;

echo $message ;

?>

formulaires et superglobales20
Formulaires et superglobales

Les filtres les plus courants

  • Les filtres sont représentés par des constantes. On les passera en paramètres des fonctions que nous utiliserons. On peut distinguer deux types de filtres : les filtres de validation et ceux dits de conversion. La liste de tous les filtres disponibles peut être obtenue via la fonction filter_list().
  • Seuls deux filtres n’appartiennent à aucune de ces deux catégories :
    • Le filtre FILTER_UNSAFE_RAW se contente de retourner les données sans rien vérifier ni modifier.
    • Le filtre FILTER_CALLBACK permet d’appeler une fonction utilisateur qui validera les données.
formulaires et superglobales21
Formulaires et superglobales

Les filtres de validation

  • Ces filtres servent à valider une donnée sans la modifier. Si la donnée est invalide, la valeur false est renvoyée. Ils contiennent généralement le mot-clé VALIDATE :
  • FILTER_VALIDATE_EMAIL s’assure que la donnée représente une adresse e-mail.
  • FILTER_VALIDATE_URL s’assure que la donnée représente une URL (adresse web).
  • FILTER_VALIDATE_REGEXP s’assure que la donnée correspond à une expression rationnelle compatible Perl (PCRE) passée en paramètre avec les options.
  • FILTER_VALIDATE_INT s’assure que la donnée représente un nombre entier.
  • FILTER_VALIDATE_FLOAT s’assure que la donnée représente un nombre réel.
  • FILTER_VALIDATE_BOOLEAN s’assure que la donnée représente un booléen et retourne NULL en cas d’échec au lieu de FALSE.
  • FILTER_VALIDATE_IP s’assure que la donnée représente une adresse IP.
formulaires et superglobales22
Formulaires et superglobales

Les filtres de conversion

  • Ces filtres servent à convertir la donnée de façon à s’assurer qu’elle respecte toujours le format attendu. Ces filtres 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 d’entité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 flottante.
  • FILTER_SANITIZE_URL retire tous les caractères qui ne composent pas une URL.
  • FILTER_SANITIZE_ENCODED convertit tous les caractères étendus d’une URL dans leurs équivalents %xx.
  • FILTER_SANITIZE_MAGIC_QUOTES applique la fonction addslashes() et opère une action
  • identique à la directive de configurationmagic_quotes_gpc.
formulaires et superglobales23
Formulaires et superglobales

Utiliser les filtres sur les superglobales

  • Plutôt que de lire les données dans les variables superglobales puis de les passer à filter_var(), il est possible de demander au filtrage de lire directement les données utilisateur.
  • Cette procédure a l’avantage de permettre une vérification rapide du code : si nous filtrons bien toutes nos variables en entrées, nous n’aurons jamais à lire les variables superglobales. L’extension Filter le fait pour nous et nous retourne les résultats déjà filtré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 ;

?>

formulaires et superglobales24
Formulaires et superglobales

Utiliser les filtres sur les superglobales

  • Afin de ne pas tenter de filtrer 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 l’existence 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 ;

}

?>

formulaires et superglobales25
Formulaires et superglobales

Sources de données

  • 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.
formulaires et superglobales26
Formulaires et superglobales

Exemples d’utilisation : Validation avec une expression régulière

<?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";

}

?>

formulaires et superglobales27
Formulaires et superglobales

Exemples d’utilisation : Validation d’une adresse IP

<?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";

elseecho "L'adresse $ip est locale.\n";

?>

formulaires et superglobales28
Formulaires et superglobales

Listes à sélections multiples

  • La balise <select> nous permet d’avoir 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 qu’une seule des sélections du visiteur.
  • Pour pallier ce problème, vous pouvez utiliser une syntaxe de tableau. En mettant [] à la fin du nom du champ, PHP comprendra qu’il s’agit d’une liste, avec plusieurs valeurs.

<select name="id_langage[]" size="6" multiple>

<option value=1>PHP</option>

<option value=2>C</option>

<option value=3>JAVA</option>

<option value=4>C++</option>

<option value=5>HTML</option>

<option value=6>PERL</option>

</select>

<input type="submit" name="Submit" value="Envoyer">

foreach( $_REQUEST['id_langage'] as $option ) {

echo 'La case ',$option,' a étécochée<br \>';

}

formulaires et superglobales29
Formulaires et superglobales

Gestion des images cliquables

  • Quand une image est employée comme bouton de soumission du formulaire, le navigateur enregistre la position du clic de souris dans l’image et transmet les coordonnées lors de l’envoi.
  • Vous pouvez par la suite y accéder via PHP comme à toutes les autres données. L’abscisse du point de clic est donnée par un index qui porte le même nom que le bouton cliqué avec _x comme suffixe. L’ordonnée, elle, utilise _y comme suffixe. Le point de coordonnées (0,0) est le point en haut à gauche de l’image.

<input type="image" name="img" src="images/logo.gif" alt="logo">

<?php

echo $_REQUEST['img_x'];

echo $_REQUEST['img_y'];

formulaires et superglobales30
Formulaires et superglobales

Téléchargements d’images et de fichiers

<form action="up.php" method="POST" enctype="multipart/form-data"><p>

<input type="file" name="fichier" size="40">

<input type="submit" value="Envoyer">

</p></form>

  • Les fichiers envoyés avec un formulaire se traitent différemment des autres données. La différence la plus visible est l’utilisation de la superglobale $_FILES[]. C’est avec cette dernière que vous pourrez accéder aux fichiers téléchargés.
  • Il s’agit d’un 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 fichier transmis
    • $_FILES['fichier']['name'] : nom et adresse originels du fichier sur le disque de l’utilisateur ;
    • $_FILES['fichier']['type'] : type mime du fichier ;
    • $_FILES['fichier']['size'] : taille du fichier en octets ;
    • $_FILES['fichier']['tmp_name'] : nom et adresse du fichier temporaire stocké sur le serveur ;
    • $_FILES['fichier']['error'] : code erreur associé au téléchargement.
formulaires et superglobales31
Formulaires et superglobales

Téléchargements d’images et de fichiers

<?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 <br />";

echo "Taille => $taille <br />";

echo "Adressetemporairesur le serveur => $tmp <br />";

echo "Type de fichier => $type <br />";

echo "Code erreur => $erreur. <br />";

?>

<?php

$nom_fichier = $_FILES['img']['tmp_name'];

$nom_destination = './img/725.jpg';

move_uploaded_file($nom_fichier, $nom_destination);

?>

formulaires et superglobales32
Formulaires et superglobales

Téléchargements d’images et de fichiers

  • PHP retourne un code d’erreur 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 fichier téléchargé excède la taille maximale définie dans la configuration de PHP par la directive upload_max_filesize.
    • UPLOAD_ERR_FORM_SIZE – le fichier téléchargé excède la taille maximale définie dans le formulaire HTML.
    • UPLOAD_ERR_PARTIAL – le fichier n’a été que partiellement chargé, probablement arrêté par l’utilisateur.
    • UPLOAD_ERR_NO_FILE – aucun fichier n’a été téléchargé.
formulaires et superglobales33
Formulaires et superglobales

Téléchargements d’images et de fichiers

if ($err = $_FILES['fichier']['error']) {

echo "il y a euuneerreur<br>" ;

if ($err == UPLOAD_ERR_INI_SIZE)

echo "Le fichierest plus grosque le max autorisé par PHP";

elseif ($err == UPLOAD_ERR_FORM_SIZE)

echo "Le fichierest plus grosqu’indiquédans le formulaire";

elseif ($err == UPLOAD_ERR_PARTIAL)

echo "Le fichiern'aétéquepartiellementtéléchargé";

elseif ($err == UPLOAD_ERR_NO_FILE)

echo "Aucunfichiern'aététéléchargé.";

} else echo "fichiercorrectementtéléchargé" ;

formulaires et superglobales34
Formulaires et superglobales

Formulaire dynamique et tableaux

  • 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 "<input type='text' name='montexte[]'>" ;

}

formulaires et superglobales35
Formulaires et superglobales

Formulaire dynamique et tableaux

  • La seconde consiste à pré-créer l’index lors de la création du formulaire :

<?php

for( $i = 0 ; $i < 10 ; $i++ ) {

echo 'select name="id_langage[$i][]" size="6" multiple>' ;

echo '<option value=1>PHP</option>' ;

echo '<option value=2>C</option>' ;

echo '<option value=3>JAVA</option>' ;

echo '<option value=4>C++</option>' ;

echo '<option value=5>HTML</option>' ;

echo '<option value=6>PERL</option>' ;

echo '</select>' ;

}

formulaires et superglobales36
Formulaires et superglobales

Gestion du temps

  • Il peut arriver que l’envoi d’un fichier trop volumineux engendre un message d’erreur indiquant que le temps maximal d’exécution du script a été dépassé.Pour éviter cela, on peut faire appel à la fonction set_time_limit(), qui permet de fixer le temps maximal d’exécution d’un script. La valeur par défaut est de 30 secondes, mais peut être changée avec la directive max_execution_timedéfinie dans le fichier de configuration. Si la valeur est zéro, il n’y a alors aucune limite imposée.
  • Un autre cas à gérer est l’arrêt du téléchargement par l’utilisateur. 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ù l’utilisateur se déconnecte, on utilise la fonction ignore_user_abort().
formulaires et superglobales37
Formulaires et superglobales

Gestion de la taille des données

  • Pour des raisons de sécurité, PHP limite la taille des fichiers via la directive post_max_size contenue dans le fichier de configuration php.ini.
  • Par défaut, PHP accepte des fichiers de taille inférieure ou égale à 8 Mo. Il est bien entendu possible de modifier ce paramètre pour accepter le téléchargement de fichiers plus lourds.
formulaires et superglobales38
Formulaires et superglobales

Procédure de gestion des formulaires

  • Il est fréquent qu’un visiteur ne remplisse pas correctement un formulaire dès la première tentative. Dans ce cas, on réaffiche le formulaire, mais on ne peut décemment demander à l’utilisateur de tout retaper. Donc, on va réafficher 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.