PHP 5

POEC – PHP 2017

1 Qu'est-ce que PHP ?

 PHP (PHP Hypertext PreProcessor) est un langage de programmation.

 Il s’agit d’un langage interprété et indépendant de la plate-forme d'exécution.

 Il permet de générer des pages HTML dynamiques.

 Il s’avère utile pour utiliser de ressources serveurs comme des bases de données.

 Une large communauté d’utilisateurs PHP existe. De nombreuses documentations et ressources sont disponibles.

2 Licence de PHP ?

 PHP est distribué via une licence propre qui permet  sa rediffusion,  son utilisation,  sa modification.

 PHP est distribué librement et gratuitement.

3 Que faire avec PHP ?

 Des sites Web

 La partie serveur de tout type d’application :  Application Web  Application mobile

 Applications utilisables en ligne de commande (scripting)

4 Quelques technologies concurrentes à PHP • JSP : Java-Server Pages • Technologie de Sun • Semblable à PHP mais la partie dynamique est écrite en Java

• ASP.Net: Active Server Pages • Produit de Microsoft • Contenu dynamique pouvant être écrit dans tous les langages de la plateforme .Net (les plus utilisés étant le C# et le VB.Net)

• Le choix entre PHP, JSP et ASP.Net est plus "politique" que technique.

5 Intérêts d’utiliser PHP

• Très populaire et très utilisé – Utilisé par des sites internet à très fort trafic tels Yahoo ou Facebook • Amène un certain nombre de personnes à améliorer le langage – Simplifie l’accès à de la documentation

• Syntaxe simple à prendre en main (héritée du C, du Shell et du Perl)

• Très portable (fonctionne sous Windows, Linux, Mac…)

• Extensible par de nombreuses bibliothèques – calcul mathématique, – création dynamique d'images, – connexions sécurisées, – accès à la plupart des SGBD

6 Intérêts d’utiliser PHP

• Un fichier PHP (.) peut contenir – du code HTML – du code PHP – du code JavaScript

• Logiciel open source (donc plus facilement extensible) et disponible gratuitement

• Conçu pour fonctionner efficacement avec le serveur Apache, lui aussi en open source

7 Historique

• 1994 : créé par pour ses besoins personnels • très succinct • savoir qui venait consulter son CV en ligne

• 1995 : première version publique • interpréteur du code très simple (quelques macros) et quelques utilitaires • gestion d'un livre d'or • gestion d'un compteur d'accès

8 Historique

• Eté 1995 : deuxième version – Nommée PHP/FI pour Personnal Home Page Tools / Form Interpreter • réécriture de l'interpréteur • ajout de la gestion des formulaires (Form Interpreter) • support pour MySql

• Eté 1997 : plus de 50 000 sites Web utilisent PHP/FI

• Fin 1997 : PHP devient un projet d'équipe • réécriture complète de l'interpréteur par Zeev Suraski et • donne naissance à PHP3

9 Historique • Eté 1999 : succès de PHP3 • 150 000 sites Web utilisent PHP3 • PHP : Hypertext PreProcessor • Une des principales nouveautés: une API modulaire. N’importe quel développeur peut créer ses propres modules.

• 2000 : PHP4 • le projet est maintenant dirigé par , société privée créée par Suraski et Gutmans qui commercialise des logiciels complémentaires à PHP • interpréteur optimisé par Zend et ouverture de PHP à d'autres serveurs HTTP qu'Apache

• 2004 : PHP5 – Sortie du moteur II avec un nouveau modèle objet

• Aujourd’hui PHP est utilisé par 78% de l’ensemble des sites internet.

10 Mise en place de PHP

Installation et configuration Installation d’un poste de développement

11 Installation et configuration

• Dans la plupart des cas PHP est couplé à un serveur web. • Il est donc nécessaire d’installer – PHP – Un serveur Web • Le plus utilisé avec PHP est Apache (licence OpenSource) – Un moteur de base de données relationnelles • Le plus utilisé avec PHP est MySQL (licence OpenSource) • Une fois installés il est nécessaire de configurer les différents outils afin qu’ils fonctionnent bien ensemble.

12 Installation d’un poste de développement • Afin de faciliter la tâche aux développeurs il existe des outils installant directement des versions d’Apache, PHP et MySQL préconfigurées : – Wamp Server – EasyPHP – Xampp

• Ces outils intègrent aussi des utilitaires tels que PHPMyAdmin ou SQLiteManager qui facilitent la vie des développeurs

• Pour PHP 5 le plus utilisé est WAMP Server – www.wamp5.com

13 Première utilisation de Wamp Server

Par défaut le serveur Apache crée un nom de domaine virtuel (car local) http://127.0.0.1 ou http://localhost.

La sélection du raccourci Localhost dans le menu de Wamp Server ouvre http://localhost et affiche la page par défaut (index.php).

Il s’agit du contenu du répertoire www du serveur local (C:\wamp\www\)

14 Installation d’un poste de développement • Un éditeur de texte suffit à développer en PHP. (bloc note, sublime text 2, notepad, …)

• Toutefois, pour faciliter le développement il est conseillé d’utiliser un environnement de développement intégré (IDE) : – for PHP developers (Open source) – (Open source) – (payant, une version d’évaluation existe)

15 Vérification du bon fonctionnement

• phpinfo() permet d'afficher les informations relatives à la configuration de PHP sur le serveur

– options de compilation, extensions, version, informations sur le serveur, environnement PHP, chemins, utilisateur, en-têtes HTTP, et licence GNU Public License – contenu de toutes les variables EGPCS (Environnement, GET, POST, Cookie, Serveur)

16 Le fichier de configuration de PHP

• Il s’agit du fichier php.ini

• Il est généralement dans /etc/php/

• Il contrôle les principaux comportements de PHP

• Il est très clair et très facilement configurable: – Sa syntaxe est la suivante: clef="valeur" – Un ; marque les lignes de commentaire – Il est segmenté en parties : options du langage, ressources maximales allouées à PHP, gestion des erreurs, gestion des données HTTP, fichiers et répertoires, ajout et configuration des modules PHP (mail, SGBD, debugger, …)

17 Principe de fonctionnement

Théorie Mise en pratique

18 Principe

• L'interpréteur de code PHP est intégré au serveur HTTP

• Le serveur lit les instructions PHP intégrées à la page HTML, interprète ces instructions et les remplace par le résultat de leur exécution

19 Principe

Poste client Site serveur

1 Requête HTTP recherche de index.php Navigateur 2 demandant index.php Serveur Web sur le disque client Démon HTTP DD

interprétation des 3 commandes PHP

Interpréteur requêtes SQL éventuelles PHP

4 Réponse HTTP SGBD Affichage de code HTML/ la page JavaScript

20 Principe

• Fonctionnement de l'interpréteur PHP :

• Un bloc PHP est un groupe de lignes encadré par deux balises

• Toute ligne située à l'extérieur de ces balises n'est pas interprétée : elle est recopiée à l'identique sur la sortie standard,

• Toute ligne située à l'intérieur de ces balises est interprétée par le moteur comme une instruction PHP.

21 Principe

– Les instructions PHP n'apparaissent pas dans le flux de sortie généré,

– Lorsqu'une erreur se produit, un message explicatif est intégré dans le flux de sortie et l'analyse du code est interrompue (sauf si warning).

22 Balises d’ouverture et de fermeture

• Le début et la fin des portions de code PHP sont signalés grâce à des balises d’ouverture et de fermeture.

• Seul ce qui est entre ces balises est interprété.

• Il est conseillé d’utiliser la syntaxe suivante:

23 Balises d’ouverture et de fermeture

• On trouve aussi couramment

Cette syntaxe peut poser des problèmes de compatibilité avec le langage XML.

<% echo "Bonjour !"; %>

Cette syntaxe est utilisé par Microsoft FrontPage (style ASP)

24 Intégrer du PHP dans une page HTML

PHP Première page PHP

Les fichiers HTML portant du code PHP ont l'extension .php

25 Page reçue par le client

Code PHP traduit en HTML dans la page :

Page PHP Première page PHP
Bonjour

26 Intégrer du PHP dans une page HTML

• Le ; est le séparateur d'instructions

• Entrelacement de code HTML et PHP Ceci est du code PHP

'; echo ''; ?>

27 Les bases du langage PHP

Types, chaînes de caractères, tableaux, opérateurs, instructions conditionnelles, boucles, fonctions, variables, objets

28 Commentaires • PHP possède comme les langages Java ou C# des commentaires sur ligne simple et des commentaires multi-lignes.

– La séquence // permet de commenter une ligne complète – Les commentaires multi-lignes sont introduits par la séquence /* et se terminent par */

29 La casse

• Les noms de fonction sont insensibles à la casse:

echo "Bonjour"; et EcHo "Bonjour"; sont équivalents

• En revanche les noms de variables sont sensibles à la casse:

echo $nom; // et echo $NOM; // concernent deux variables différentes

30 Types de données

 Comme tout langage de programmation, PHP dispose de plusieurs types de données.

 Type scalaire :  String (chaînes de caractères) ‘bonjour’  Bool (true ou false) true  Int (entiers signés) 12  Float – double (réels signés) 4.63  Type composite :  Object (objets) new stdClass()  Array (tableau) array(2, ‘matelli’)  Type spécial :  Ressource (descripteur abstrait) fopen(...)

31 Variables

 Les noms de variables sont précédés d'un $

$maVariable;

 Le langage PHP est faiblement typé:  Il n’est pas nécessaire de déclarer le type d’une variable avant de l’utiliser  Il n’est pas nécessaire de déclarer sa variable

32 Nommage des variables

 Ce qu'il faut éviter :  Les variables trop longues  Les variables peu compréhensibles  Les variables quasi-semblables

 Pour nommer une variable qui contient plusieurs mots, deux écritures sont recommandées :  CamelCaseVars  plusieurs_mots

33 Constantes

 Les constantes sont déclarées grâce à la fonction define

 Pour utiliser une constante, il suffit de l'intégrer dans son code.  Sans quotes, ni rien d’autre...

 Par convention, les constantes sont toujours écrites en majuscules

34 Booléens, entiers et flottants • Les booléens • true ou false • sont considérés comme faux : le booléen FALSE, l'entier 0, le flottant 0.0, "" ou "0", un tableau vide, un objet vide, la constante NULL

• Entiers positifs ou négatifs dans différentes bases $i = -5; // Entier en base 10 $i = 012; // Entier base 8 $i = 0x12; // Entier en base 16 – Pas de division entière mais transtypage (cast) possible $i = (int) (7/3) // i aura pour valeur 2

• Les flottants $f = -1.3; $f = 1.2e-3; // f vaudra ici 0,0012

35 Chaînes de caractères

• Les chaînes de caractères doivent systématiquement être entourées de quotes. Ces quotes peuvent être simples ou doubles (apostrophe ou guillemet)$ch1 = 'Bonjour'; $ch2 = "$ch1 Monsieur !\n";

• PHP tentera d’interpréter tout ce qui est entre doubles quotes tandis qu’il n’interprétera pas ce qui est entre simples quotes.

echo "la variable vaut $hello"; //affiche : la variable vaut bonjour

echo 'la variable vaut $hello'; //affiche : la variable vaut $hello ?> 36 Les tableaux

• Un tableau est un type de variable dit ‘composite’ • Ce type peut contenir d’autres variables – De tout type – Y compris tableau (tableau dans un tableau) • On range des valeurs... • Dans des index – Numériques (tableau numérique) – Ou littéraux (tableau associatif) 37 Les tableaux indexés numériquement • Création $tab = array("Nicolas", "Paul", "Caroline" ,"Julie", "Jean"); // ou $tab[0] = "Nicolas"; $tab[] = "Julien";

echo $tab[1]; • echoUtilisation '
'; echo $tab[2];

Clé Valeur 0 Nicolas 1 Paul 2 Caroline 3 Julie 4 Jean … … 38 Les tableaux associatifs • Création 'Paul' , 'nom' => 'Paris' , 'adresse' => '1 avenue Victor Hugo' 'ville' => 'Paris' );

• Utilisation echo $tab['prenom']; echo '
'; echo $tab['adresse'];

Clé Valeur prenom François nom Dupont adresse 3 Rue du Paradis ville Marseille 39 Les tableaux multidimensionnels

• Création Utilisation

'Cyril' , echo 'Son premier numéro de téléphone est : 'ville' => 'Paris' , '; 'poste' => 'Consultant informatique' echo $tableau['telephone'][0]; 'telephone' => array('0145012345','0145321232') echo 'Son second numero de téléphone est : ) ; '; echo $tableau['telephone'][1]; // ou bien $tableau[0] = array(2,4,6); $tableau[1] = array(1,3,5); echo 'Nombres pairs :'; echo $tableau[0][0]; //ou bien echo $tableau[0][1]; $tab[0][] = 8; ?> echo $tableau[0][2]; ?>

40 Traitements de base

41 Les opérateurs

• Les opérateurs sont des symboles qui permettent de manipuler des variables.

• Ils permettent notamment – d'effectuer des opérations – d'affecter des valeurs – de comparer des valeurs

42 Les opérateurs d’affectation

• affectation avec le signe =

$a = ($b = 4) + 1; // $b vaut 4 et $a vaut 5 • les opérateurs combinés : +=, -=, *=, /=, .=, &=, |=, ^=, <<=, >>=, ~=

$a += 1; // équivalent à $a = $a + 1; $ch .= "!"; // équivalent à $ch = $ch . "!";

• ++ est équivalent à += 1, -- est équivalent à -= 1

$i = 0; echo ++$i; // incrémente $i puis affiche 1 echo $i++; // affiche 1 puis incrémente $i echo $i; // affiche 2

43 Les opérateurs de comparaison

• Egal à : $a == $b

• Différent de : $a != $b

• Inférieur à : $a < $b

• Supérieur à : $a > $b

• Inférieur ou égal à : $a <= $b

• Supérieur ou égal à : $a >= $b

44 L’opérateur ternaire

• L’opérateur fonctionne selon le principe suivant :

retour = (condition) ? (expr1) : (expr2);

• retour vaut expr1 si condition est vraie et expr2 si condition est fausse

$a = 2; $b = 3; $max = ($a >= $b) ? $a : $b; // $max vaudra $b, soit 3

45 Les opérateurs binaires

• ET bit à bit : $a & $b

• OR bit à bit : $a | $b

• XOR bit à bit : $a ^ $b

• NON bit à bit : ~$a

• décalage à droite de $b bits : $a >> $b

• décalage à gauche de $b bits : $a << $b

46 Les opérateurs logiques

• ET logique : and, && (les deux sont possibles)

• OU logique : or, ||

• XOR logique : xor

• NON logique : !

47 La concaténation

• Concaténation de chaîne de caractère (.)

$ch1 = "Bonjour "; $ch2 = "Monsieur";

$ch = $ch1 . $ch2

echo $ch . " Martin" . ' !';

// Affiche "Bonjour Monsieur Martin !"

48 Les structures de contrôle

• Les structures de contrôles permettent de poser des conditions à l’exécution d’une instruction.

• Exemple: – Si un visiteur a entre 12 et 25 ans • Il a le profil jeune – Si un visiteur a entre 25 et 65 ans • Il a le profil adulte

49 L’instruction if

50 L’instruction if / else

51 L’instruction if / elseif

1) { echo "$nombre est supérieur à 1"; } elseif ($nombre < 1) { echo "$nombre est inférieur à 1"; } else { echo "$nombre est égal à 1"; } ?>

52 L’instruction switch

• Le switch a un comportement similaire à un long if / elseif / … / else mais avec une syntaxe plus facile à lire

• Le Switch exécute les instructions dans l’ordre. D’où l’importance des break.

switch( $var ) { case 1 : echo '$var vaut 1'; break; case 10 : echo '$var vaut 10'; break; default : echo '$var ne vaut ni 1 ni 10'; break; } 53 La boucle while

• L'instruction while correspond à "tant que". • On pourra exécuter des instructions tant qu'une condition sera remplie • Le programme commence par tester si la condition est vraie.

54 La boucle while

• La boucle while exécute le code du programme jusqu’à ce que la condition devienne fausse.

55 La boucle for

• Identique fonctionnellement à la boucle while • La boucle for intègre un compteur sous la forme d'une variable – for (initialisation ; condition ; incrémentation)

56 La boucle for each

• La boucle foreach s'applique à un tableau • Elle permet de boucler sur chacune de ses cellules. – foreach (tableau as clef => valeur) $value) { echo $key . ' = ' . $value . '
' ; } ?>

57 Fonctions utilisateur

58 Les types de fonction

• Il existe deux types de fonctions en PHP :

– les fonctions dites natives : • que vous pouvez employer sans faire appel à des librairies (phpinfo(), date()…)

– les fonctions dites « utilisateur » : • qui sont déclarées par vous-même, • qui sont en général définies dans un fichier précis (une bibliothèque).

59 Fonctions utilisateur: déclaration

• La définition d'une fonction s'appelle déclaration et peut se faire n'importe où dans le code grâce au mot-clé function. – Les fonctions sont insensibles à la casse – Elles doivent commencer par une lettre ou un _ – 2 fonctions ne peuvent avoir le même nom • attention aux noms des fonctions PHP natives // Fatal error 60 Fonctions utilisateur: les arguments

• Les arguments peuvent être optionnels, pour 61 cela , il suffit de leur donner une valeur par Fonctions utilisateur: valeur de retour • La fonction peut renvoyer une valeur grâce au mot clé return. • return renvoie la valeur spécifiée et arrête l'exécution de la fonction.

echo multiplier(10,15); // affiche 150 ?> • On ne peut pas renvoyer plusieurs valeurs mais on peut renvoyer un tableau de valeurs.

62 Fonctions utilisateur: passage par copie • Par défaut les arguments reçus par une fonction sont passés par copie. – Les modifications effectuées sur les variables au sein de la fonction ne seront pas appliquées dans le programme principal.

echo $mavar; // affiche 10 ?> 63 Fonctions utilisateur: passage par référence • On peut changer le comportement par défaut (passage par copie) en spécifiant dans la déclaration que la fonction reçoit ses arguments par référence. – Il suffit de mettre un & devant l'argument dans la déclaration Fonctions utilisateur: portée des variables • Les variables extérieures à une fonction ne sont pas disponibles dans cette fonction, et inversement.

• Mais il existe plusieurs niveaux de définition de variable : – Le niveau local (utilisé par défaut) : la variable ne sera visible que dans la fonction en cours, – Le niveau global : la variable extérieure est visible dans la fonction (importée), – Le niveau static : la variable locale à la fonction persiste durant tout le temps d'exécution du script, – Cette variable conservera ses différentes valeurs à chaque nouvel appel de la fonction.

65 Notions avancées sur les variables

Les variables prédéfinies / Les variables globales / Les variables statiques / Les variables dynamiques / Affichage de variables complexes

66 Les variables prédéfinies

– Depuis PHP 4.1.0, des tableaux "super-globaux" sont prédéfinis • Ils sont accessibles dans n'importe quel contexte d'exécution, • Ils fournissent les infos sur les variables du serveur, les variables d'environnement, les variables de PHP...

– Le contenu de ces tableaux dépend de la version et de la configuration du serveur et de PHP.

67 Les variables prédéfinies

– $GLOBALS : variables globales de l'exécution en cours – $_SERVER : variables fournies par le serveur WEB • 'PHP_SELF' (chemin du script sur le serveur),

– $_GET : variables fournies par HTTP/méthode GET – $_POST : variables fournies par HTTP/méthode POST – $_COOKIE : variables issues des cookies HTTP reçus – $_FILES : variables fournies par HTTP suite à un téléchargement de fichier(s) par la méthode POST

68 Les variables prédéfinies

– $_ENV : variables d'environnement positionnées au démarrage du serveur Web

– $_REQUEST : tableau associatif constitué de toutes les variables en entrée (contient en particulier $_GET, $_POST, $_COOKIE, $_FILES)

– $_SESSION : variables relatives à la session en cours

69 Les variables globales

 Déclarer une variable comme global dans un bloc créé une référence locale sur la variable globale  Il est aussi possible d’accéder à une variable globale grâce au tableau associatif $GLOBALS

?> 70 Les variables statiques

• Une variable statique a une portée locale à un bloc mais conserve sa valeur entre deux exécutions du bloc.

• Elles sont utiles pour les fonctions récursives

function up_to_10() { static $cpt = 0; $cpt++; echo "$cpt "; if ($cpt<10) up_to_10(); }

up_to_10(); // affiche 1 2 3 4 5 6 7 8 9 10

71 Affichage de variables complexes

– var_dump() affiche les informations structurées d'une variable (type, valeur, …)

– print_r() affiche les informations lisibles pour une variable (par exemple affiche les clés et les valeurs d'un tableau)

$a = array (1, 2, "a"); var_dump ($a);

/* Affichage : array(3) { [0]=> int(1) [1]=> int(2) [2]=> string(1) "a" } */

72 Variables et types

– is_array(), is_bool(), is_callable(), is_double(), is_float(), is_int(), is_integer(), is_long(), is_null(), is_numeric(), is_object(), is_real(), is_resource(), is_scalar(), is_string(), gettype(), settype()

– gettype($var) retourne le type de $var : integer, double, string, array, object, ou unknown type

$foo = "5bar"; // chaîne $bar = true; // booléen settype($foo, "integer"); // $foo vaut maintenant 5 settype($bar, "string"); // $bar vaut maintenant "1"

73 La valeur NULL

• Constante spéciale qui représente l'absence de valeur

• Valeur insensible à la casse, introduite en PHP4 • $var = NULL; • isset($var) # retourne FALSE • is_null($var) # retourne TRUE • empty($var) # retourne TRUE • $ch = ""; • isset($ch) # retourne TRUE • is_null($ch) # retourne FALSE • empty($ch) # retourne TRUE

74 Les fichiers

• Ouvrir : fopen($nom_fichier,mode_ouverture)

• 4 modes : (r : lecture seule, r+ : lecture et écriture, a : écriture seule, a+ : lecture et écriture à la fin, création si inexistant)

• Lire : file_get_contents, fgets et fgetc pour lire tout le contenu, un caractère ou une ligne (exemple : $ligne = fgets($nom_fichier))

• Ecrire : fputs ($nom_fichier, $message)

• Fermer : fclose($nom_fichier)

75 Premières applications web

Formulaires Gestion de fichiers

76 Intégration de fichiers externes

• PHP a été pensé pour faciliter la conception de sites et d’applications Web.

• L’intégration de fichiers externes permet de: • de définir des "briques de base" qui peuvent être réutilisées plusieurs fois, • de répercuter facilement un changement sur l'ensemble de l'application.

• Le fichier qui est inclus hérite de l'ensemble des variables du fichier qui effectue l'inclusion

• Les fichiers inclus sont analysés comme du code HTML qui peut contenir du code PHP

77 Intégration de fichiers externes

Les fonctions d’inclusions sont les suivantes

– include()

• require() : similaire à include mais provoque une erreur fatale si le fichier n'existe pas (include émet seulement un warning)

• include_once et require_once : similaire à include et require. S'assurent toutefois que le fichier n'a pas déjà été inclus.

78 Intégration de fichiers externes

//file2.php

//file1.php "; //affiche var num avant include = include 'file2.php'; echo "var num après include= " . $num . "
"; //affiche var num après include = 10 echo carre(2); //affiche 4 ?>

79 Les formulaires

• Un formulaire permet d’effectuer différentes choses : – Saisir du texte, des mots de passe

– Choisir un élément dans une liste

– Afficher un résultat

– Lancer des actions (appel de script ou ouverture

de pages) avec des boutons 80 Les Formulaires en HTML

• Toute la partie formulaire de la page doit se trouver entre les marqueurs

....

• Cette balise sert de conteneur pour accueillir les éléments ou composants du formulaire – un bouton, une ligne de texte, une liste de choix…

• Chacun de ces composants s'y trouve déclaré et est créé individuellement par une balise qui commence généralement par INPUT ou par SELECT

81 Propriétés de la balise form

• Liste des propriétés :

• name : Nom du formulaire

• action : Adresse du script de serveur à exécuter

• method : Méthode d'appel du script (get ou post)

• enctype : Type d'encodage du formulaire

• target : Destination du retour du formulaire

82 Méthodes de la balise form

• Liste des méthodes • submit : Déclenche l'action du formulaire • reset : Réinitialise les données du formulaire avec les valeurs par défaut

• Liste des événements • onSubmit : Détecte la soumission du formulaire • onReset : Détecte la réinitialisation

83 Saisie par ligne de texte

• Ligne de texte

• L'objet INPUT permet d'afficher : – des champs texte – des boutons – des radio-boutons – des cases à cocher – un champ caché – des champs password (***) – les boutons spéciaux RESET et SUBMIT

84 Propriétés de la balise input

• Liste complète des propriétés :

• Name : nom du champ • Type : type du champ text, button, radio, checkbox, submit, reset • Value : Libellé texte • Defaultvalue : valeur par défaut du champ (utile avec reset) • Size : taille du champ • Maxlength : taille maximale du champ de type texte • Checked : case à cocher ou radio bouton coché ou non • Disabled : grisé (modification impossible par le visiteur) • readOnly : lecture seule • Class : nom de la classe de style • Style : chaîne de caractères pour le style

85 Champ de saisie Bouton

 Propriétés acceptées : name | value | defaultvalue | size | maxlength | disabled | readOnly | class | style

 Méthodes acceptées: focus | blur | click (donne, reprend le focus, clic)

 Evénements acceptés: onFocus | onBlur | onClick  onFocus détecte la prise de focus  onBlur détecte la perte de focus  onClick détecte le clic utilisateur

86 Liste de sélection

• Les listes sont définies par la balise ligne 1 ligne 2 ligne 3 ligne 4

87 Formulaire : Zone de texte

Zones de textes multi-lignes TEXTAREA

L'objet TEXTAREA est essentiellement utilisé pour permettre au visiteur de saisir un texte assez long (message, descriptif...).

Voici la syntaxe classique pour définir une zone de texte :

Ligne 1

88 Formulaires et PHP

• On associe un script PHP à un formulaire par :

….

• Bouton déclenchant l'action du formulaire :

• Ce formulaire déclenche une action qui ici consiste à appeler le programme ins.php – et à l'exécuter sur le serveur

• On va utiliser les noms définis pour les champs texte : pour récupérer les valeurs

89 Exemple de formulaire

NOM
PRENOM
ADRESSE

90 Suite de l’exemple

Lorsqu'un formulaire est envoyé à un script PHP, toutes les variables du formulaire seront automatiquement disponibles dans le script sous frome de chaînes. Fichier essai4.php

Bienvenue à Monsieur ".$_POST['prenom']"; print $_GET['nom']."

" ; ?>

91 Exemple de formulaire écrit en PHP

Ici on saisit le login et pwd, et on appelle une fonction de vérification effectuée dans check.php.

On observera les guillemets internes à la chaîne : echo "

Login :
Password :
";

Préférer les apostrophes aux guillemets doubles quand il n’y a pas besoin des deux, c’est plus lisible et plus rapidement interprété

92 Fonctions trim()et empty()

• La fonction trim() retire les espaces en début et fin de chaîne – cela permet de ne pas traiter des informations vides (un utilisateur pourrait très bien n'entrer que des espaces dans le formulaire)

• La fonction empty() permet de savoir si une variable (chaîne ou bouton) a une valeur ou non.

• Cf un exemple avec formulaire.html et formul1.php ci-après

93 Trim et empty (partie HTML)

Nom :
Prénom :

94 Trim et empty (partie PHP)

95 Accéder à des variables de formulaire HTML

// $_POST['nom']  $p_nom echo $p_username; // Disponibles depuis PHP 3: echo $HTTP_POST_VARS['username'];

// echo $username; // serait disponible si la directive ‘register_globals = on’ dans php.ini. // Depuis PHP 4.2.0 la valeur par défaut de cette directive est à ‘off’ // Utiliser ou présumer sur cette méthode est // fortement déconseillé; c’est une sécurité // importante. ?>

96 Accès aux variables avec GET

• Utiliser un formulaire de type GET est similaire, hormis le fait qu’il faut utiliser les variables prédéfinies de GET à la place.

• GET s'applique aussi à la QUERY_STRING (les informations disponibles après le '?' dans une URL). – De ce fait, par exemple, http://www.example.com/test.php?id=3 contient les données de GET, qui sont accessibles via $_GET['id']

97 Passer des variables par l’adresse URL avec _GET

http://www.toto.fr/index.php?var=12&a=1&b=2 Dans la page www.toto.fr/index.php, les 3 variables sont utilisables: $_GET['var']=12 $_GET['a']=1 $_GET['b']=2

http://www.toto.fr/index.php?nom=cow&prenom=flying Variables de

98 Convention d'écriture PHP

• Localiser les parties "programme" en début de fichier – avant tout code HTML

• Cela permet de bien séparer la partie traitement, maintenue par le programmeur – de l'affichage, dévolue au Web designer

99 Gestion des fichiers: lecture d’un fichier • La fonction file_get_contents() prend en argument l'adresse du fichier et retourne une chaîne de caractères avec l'intégralité du contenu.

• La fonction file(), quant à elle, prend en argument une adresse de fichier et retourne le contenu dans un tableau ligne à ligne.

100 Ecriture dans un fichier

• La fonction file_put_contents() prend en paramètre une adresse de fichier et une chaîne de caractères. – La chaîne est alors écrite dans le fichier.

• Si le fichier existait déjà, son contenu est écrasé. – Il existe une option FILE_APPEND pour ajouter du contenu à la fin.

101 Tableaux : fonctions et exemples pratiques

102 Compter / Supprimer

• Compter le nombre d’éléments d’un tableau – count($tab); • Retourne le nombre d'éléments du tableau $tab s'il existe, 1 si $tab n'est pas un tableau, 0 si $tab n'existe pas – sizeof($tab); • La fonction sizeof est un alias de count.

• Suppression d'un élément – unset($tab["toto"]); • Fonctionne aussi pour une variable

103 Trier

– Le tri peut se faire sur les clés et/ou les valeurs ; l'association clé/valeur peut être cassée

– asort()/arsort() : trie le tableau par ordre croissant/décroissant de valeurs

– ksort()/krsort() : trie le tableau par ordre croissant/décroissant de clés

– sort() : trie le tableau par ordre croissant de valeurs et réassigne des clés (0,1,…) ; on perd l'association clé/valeur

– uasort()/uksort()/usort() : identiques à leur homologue mais la fonction de comparaison est fournie 104 Tableaux et pointeurs

• A chaque tableau correspond un pointeur interne qui est une référence sur l'élément courant

• current($tab) désigne l'élément courant

• next($tab) déplace le pointeur vers l'élément suivant

• prev($tab) déplace le pointeur vers l'élément précédent

• end($tab) déplace le pointeur sur le dernier élément

• reset($tab) déplace le pointeur sur le premier élément

105 Tableaux et pointeurs

$tab = array("a"=>1, "d"=>5, "b"=>8, "c"=>4);

$val = current($tab); echo "$val
"; // affiche "1
"

$val = next($tab); echo "$val
"; // affiche "5
" asort($tab); end($tab); prev($tab); $val = prev($tab); echo "$val
"; // affiche "4
"

106 Extraction d’éléments d’un tableau

• list() permet d'extraire des valeurs d'un tableau

$tab = array(1, 8, 5); sort($tab); list($v1, $v2) = $tab; echo "$v1 $v2"; // affiche "1 5"

107 Extraction d’éléments d’un tableau

– key($tab) permet d'extraire la clé de l'élément pointé par le pointeur interne du tableau

$tab = array("a"=>1,"b"=>8); next($tab); $clé = key($tab); $val = $tab[$clé]; echo "$clé: $val"; // affiche "b: 8"

108 Extraction d’éléments d’un tableau

– extract($tab) permet d'extraire d'un tableau toutes les valeurs, chaque valeur est recopiée dans une variable ayant pour nom la valeur de la clé. $tab = array("a"=>1,"b"=>8); extract($tab); echo "$b $a"; // affiche "8 1"

– each($tab) retourne la paire clé/valeur courante du tableau et avance le pointeur de tableau ; cette paire est retournée dans un tableau de 4 éléments : 0=>clé, 1=>valeur, key=>clé et value=>valeur

$tab = array("a"=>1, "d"=>5, "b"=>8, "c"=>4); reset ($tab); while (list ($k, $v) = each ($tab)) { echo "$k => $v
\n"; } // Quand le pointeur dépasse la fin de $tab, each retourne false 109 chaînes de caractères : fonctions et exemples pratiques

110 Chaînes de caractères

• Conversion de chaînes de caractères en valeur numérique

$i = 1 + "4.5"; // $i vaut 5.5 $i = 1 + "-1e3"; // $i vaut -999 $i = 1 + "toto + 9"; // $i vaut 1 $i = 1 + "9 + toto"; // $i vaut 10

• la chaîne est de type flottant si elle contient '.', 'e' ou 'E' sinon elle est de type entier.

• la valeur est définie par la première partie de la chaîne (0 si c'est du texte).

111 Chaînes et valeur null

• La constante NULL est convertie en "", un tableau en la chaîne "Array"

$i = null; echo "-$i-"; // affiche "--" $tab[0] = 1; echo "$tab"; // affiche "Array"

112 Chaînes de caractères et affichage

• Accès aux caractères d'une chaîne

$ch = 'Ceci est une chaîne.'; echo $ch{3}; // affiche "i"

• Affichage de chaînes • echo et print pour les affichages simples • printf pour les variables formatées • print_r et var_dump pour les variables complexes

$i = 2.98765; printf("%.3f",$i);echo"
"; // affiche 2,998

113 Fonctions de chaînes de caractères

• Substitutions de chaînes • addslashes(str) ajoute un \ devant tous les caractères spéciaux de la chaîne passée en argument - utile pour les requêtes aux bases de données

• stripslashes(str) effectue l'opération inverse (enlève les \)

• str_replace(search, replace, str) remplace dans str toutes les occurrences de search par replace

// la commande suivante affiche "Bonjour Jean" echo str_replace("Paul", "Jean", "Bonjour Paul");

114 Fonctions de chaînes de caractères

• Découpage de chaînes

• explode(sep, str) retourne un tableau de chaînes en scindant str à l'aide du séparateur sep

• implode(sep, tab) retourne une chaîne fabriquée par la concaténation des éléments du tableau et du séparateur sep entre chaque élément (join() fait la même chose)

• chop(str) ou rtrim(str), trim(str), ltrim(str) suppriment des caractères d'espacement dans str (" ", \t, \n, \r, \0)

115 Fonctions de chaînes de caractères

• Comparaison et longueur

– strcmp(str1, str2) : comparaison binaire (comme en C)

– strlen(str) retourne la longueur de str

• Pour plus d’informations se reporter à http://www.php.net/manual/fr/ref.strings.php

116 Quelques exemples pratiques sur les dates

117 Date et heure

• L’affichage de la date et l'heure courante peut se faire via la fonction date

echo "Nous sommes le " . date("j m Y") . " et il est " .date("H \h i") . " mn";

– date("format", $timestamp) retourne une chaîne de caractères qui contient la date $timestamp au format indiqué en premier argument

– $timestamp est la date Unix (nombre de secondes depuis le 1er janvier 1970)

– Si $timestamp est omis, il s'agit de la date actuelle

118 Date et heure

– La page suivante fournie l’ensemble options de formatage reconnues par la fonction date : • http://php.net/manual/fr/function.date.php • si le format est omis, date() retourne $timestamp

– mktime(h, m, s, M, J, A) retourne le timestamp associé à la date indiquée en paramètres

119 GESTION DES SESSIONS UTILISATEURS

120 Cookie

 Jetons stockés sur le poste client contenant des informations relatives à un domaine.

 Les informations sont stockés sous la forme : clé = valeur

 Uniquement des chaînes de caractères

121 Cookie

 Les cookies ont une durée de vie réglable (par défaut détruit lors de la fermeture du navigateur).

 Ils sont disponibles via la super globale $_COOKIE

 Pour ajouter un cookie en PHP il est possible d’utiliser la fonction setcookie().  Elle doit être impérativement appelé avant tout code html.

122 Cookie

Cette fonction attend 2 paramètres obligatoires et 5 facultatifs :  name : le nom du cookie,  value : la valeur associés au cookie,

 expire : le timestamp d’expiration,  path : le chemin relatif pour accéder à ce cookie,  domain : le domaine ou le cookie sera disponible (sous domaines)  secure : envois le cookie uniquement si la connexion est sécurisé (https)  httpOnly : envoi le cookie uniquement sur le protocole http et donc ne sera pas accessible en JavaScript.

123 Session

• Un moyen de sauvegarder des informations entre 2 requêtes.

• Chaque client reçoit un identifiant de session stocké de 2 manières différentes :

– dans un cookie avec pour clé PHPSESSID • impossibilité de garder la session si le client inhibe les cookies.

– dans l’url avec la constante SID • le client voit sont SESSIONID et peut le modifier.

124 • Lorsque le client effectue une requête, le serveur vérifie si une session a déjà été ouverte :

– Automatiquement : session.auto_start est à 1 dans php.ini

– Manuellement : avec les fonctions session_start() ou session_register().

125 Session

 La session peut être détruite de plusieurs façons :

 Par le serveur

 au bout d’un certain temps d’inactivité (30mn par défaut, configurable),

 en appelant la fonction session_destroy().  Il faut néanmoins vider la session avec la fonction unset().

126 Session

 Par le client

 lorsque l’on ferme son navigateur, session_start(); $_SESSION['toto'] = 5; echo 'Page suivante'; // echo $_SESSION['toto'] dans page.php affichera "5"

127 Header

 PHP permet de modifier les en-tête http qui sont renvoyés au client.

 lancer un code d’erreur (404, 500 …),  faire une redirection,  …

header( "HTTP/1.1 404 Not Found " ); header( "Location: index.php" );

128