Vous êtes sur la page 1sur 136

PHP Hypertext Preprocessor

FI SiCOM
FST 2019-2020

Said Najah 1
Documentation en ligne

 Pour obtenir en ligne toute la documentation officielle


(en français) sur une commande, tapez l’URL suivante
dans la barre d’adresse de votre navigateur Internet :
http://fr.php.net/

 Et rajouter en fin d’URL le nom de la commande.

 Exemple :
http://fr.php.net/echo

Said Najah 2
Modèle
requête

Client internet Serveur

réponse

appel de la page

Base de Script
données extraction
exécution
Document
de données PHP Html
MySQL

Said Najah 3
Histoire du PHP

 Il a été créé en 1994 par Rasmus Lerdorf pour les besoins


des pages web personnelles (livre d’or, compteurs, etc.).
A l’époque, PHP signifiait Personnal Home Page.

 C’est un langage incrusté au HTML et interprété (PHP3)


ou compilé (PHP4) côté serveur. Il dérive du C et du Perl
dont il reprend la syntaxe.

 Il est extensible grâce à de nombreux modules et son


code source est ouvert. Comme il supporte tous les
standards du web et qu’il est gratuit.

Said Najah 4
Histoire du PHP

En 1997, PHP devient un projet collectif et son interpréteur est


réécrit par “Zeev Suraski et Andi Gutmans ” pour donner la
version 3 qui s’appelle désormais PHP :
Hypertext Preprocessor).

Il existe par ailleurs des applications web prêtes à l’emploi


(PHPNuke, PHPSPIP, PHPSlash…) permettant de monter
facilement et gratuitement son portail. En juillet 2000 plus de
300.000 sites tournaient déjà sous PHP !

Said Najah 5
Intégration d’un script dans une page
 Les pages web sont au format html.
 Les pages web dynamiques générées avec PHP4 sont au
format php.
 Le code source php est directement insérer dans le fichier
html grâce au conteneur :
<?php … ?>

Exemple:
<html> Autres syntaxes d’intégration :
<body> <? … ?>
<?php <script language=‘’php’’> … </script>
echo ’’Bonjour’’; <% … %>
?>
</body>
</html> Said Najah 6
Exemple de script
Exemple de script, code Autre écriture du même script :
source (côté serveur) : <?php
<html> echo ‘’<html>\n<body>\n’’;
<body> echo ‘’<h1>Mon premier script</h1>\n’’;
<h1>Mon premier script</h1> echo ‘’Bonjor\n’’;
<?php echo ‘’Bonjour\n’’; ?> echo ‘’</body>\n</html>\n’’;
</body> ?>
</html>
Code source (côté client) de la
Résultat affiché par le navigateur :
page essai.php résultant du script

Said Najah 7
Commentaires

 Un script php se commente comme en C :


 Exemple :

<?php
// commentaire de fin de ligne
/* commentaire sur plusieurs lignes */
# commentaire de fin de ligne comme en Shell ?>

 Tout ce qui se trouve dans un commentaire est ignoré.


Il est conseillé de commenter largement ses scripts.

Said Najah 8
Variables, constantes et types
 Les variables est le conteneur d’une valeur d’un des types utilisés en PHP
 La déclaration des variables n’est pas obligatoire en début de scripte.

 L’initialisation des variables n’est pas non plus obligatoire.

 Les identificateurs de variable sont précédés du symbole « $ » (dollars).


Exemple : $toto.
 Les nom des variables sont sensibles à la casse (majuscules et
minuscules). $mavar et $Mavar ne désignent pas donc la même varaible.
 Le nom commence par un caractère alphabétique, pris dans les ensembles
[a-z] ,[A-Z] ou par le caractères de soulignement( _ )
 Les variables peuvent être de type entier (integer), réel (double), chaîne
de caractères (string), tableau (array), objet (object), booléen (boolean).

Said Najah 9
Variables, constantes et types

 L’affectation consiste à donner une valeur à une variable.


Lors de la création d’une variable, vous ne déclarez pas son
type. C’est la valeur que vous lui affectez qui détermine ce
type.
 Dans php, vous pouvez affecter une variable par valeur ou
par référence.
 L’affectation par valeur se fait à l’aide de l’operateur =, soit
après la création de la variable, soit en même temps.
 L’affectation par référence, toujours réalisé au moyen de
l’operateur =, L’opérande de droite est une variable qui doit
être précédée du caractère &.

Said Najah 10
Variables, constantes et types
On peut à la manière des pointeurs en C faire référence à une
variable grâce à l’opérateur & (ET commercial).

Exemple 1:
$toto = 100; // la variable $toto est initialisée à la valeur 100
$foobar = &$toto; // la variable $foobar fait référence à $toto
$toto++; // on change la valeur de $toto
echo $foobar; /* qui est répercutée sur $foobar qui
vaut alors 101*/

Said Najah 11
Variables, constantes et types

Il est possible de convertir une variable en un type primitif grâce au


cast (comme en C).
Exemple :
$str = “12”; // $str vaut la chaîne “12”
$nbr = (int)$str; // $nbr vaut le nombre 12

Le cast est une conversion de type. L’action de caster consiste en


convertir une variable d’un type à un autre.

Said Najah 12
Variables, constantes et types

Quelques fonctions :
empty($var) : renvoie vrai si la variable est vide
isset($var) : renvoie vrai si la variable existe
unset($var) : détruit une variable
gettype($var) : retourne le type de la variable
settype($var, “type”) : convertit la variable en type “type”(cast)
is_long(), is_double(), is_string(), is_array(), is_object(),
is_bool(), is_float(), is_numeric(), is_integer(), is_int()…

Said Najah 13
Variables, constantes et types

Une variable peut avoir pour identificateur la valeur d’une


autre variable.
Syntaxe : ${$var} = valeur;
Exemple :
$toto = ‘’foobar’’;
${$toto} = 2002;
echo $foobar; // la variable $foobar vaut 2002

Said Najah 14
Variables, constantes et types

 La portée d’une variable est limitée au bloc dans lequel elle a été
crée. Une variable locale à une fonction n’est pas connue dans le reste
du programme. Tout comme une variable du programme n’est pas
connue dans une fonction. Une variable crée dans un bloc n’est pas
connue dans les autres blocs, mêmes supérieurs.

Opérateurs d’assignement :
 = (affectation), *= ($x*=$y équivalent à $x=$x*$y), /=, +=, -=, %=

Opérateurs logiques :
and, && (et), or, || (ou), xor (ou exclusif), ! (non)

Said Najah 15
Variables, constantes et types
Opérateurs arithmétiques :
Opérateur description
+ addition

- soustraction

* Multiplication

/ Division

% Modulo

++ et -- Décrémentation et
incrémentation (Ces
deux derniers peuvent
être pré ou post fixés

Said Najah 16
Variables, constantes et types
 Il existe en php un grand nombre de constantes prédéfinis,
que vous pouvez notamment utiliser dan les fonctions comme
paramètres permettant de définir des options.
 Le code suivant:

<?php
Print_r(get_defined_constants( ));
?>
Permet d’afficher l’ensemble des constantes existantes.
 L’utilisateur peut définir des constantes dont la valeur est
fixée une fois pour toute.
 Les constantes ne portent pas le symbole $ (dollars) en début
d’identificateur et ne sont pas modifiables.
Said Najah 17
Variables, constantes et types

define(string ‘’var’’, divers valeur, boolean casse ) : définit


la constante var (sans $) de valeur valeur
Exemple 1 :

define(‘’author’’,’’Foobar’’);
echo author; // affiche ‘Foobar’
Exemple 2 :

define(“MY_YEAR”,1980);
echo MY_YEAR; // affiche 1980
 exemple

Said Najah 18
Variables, constantes et types

 Dans php, il n’existe pas de déclaration explicite du type d’une


variable lors de sa création.
 Php permet la manipulation d’un certain nombre de types de
donnes différents dans lesquels en distingue:
 Les types scalaire de base: Entiers, flottants, chaine de
caractères, booléens.
 Les types composes: tableaux (array), objet (object)

 Les types spécieux: type resource, type nul

Said Najah 19
Contrôle d’état d’une variable
 Lors de l’envoi de données d’un formulaire vers le serveur, les
scripte qui reçoit les informations doit pouvoir détecter l’existence
d’une réponse dans les champs du formulaire.
 Les fonctions isset() et empty() permettent ce type de contrôle.
 La fonction isset(), dont la syntaxe est la suivante:
Boolean isset( );
Retourne la valeur FALSE si la variable $var n’est pas initialisée
ou a la valeur NULL et la valeur TRUE si elle a une valeur
quelconque.
 La fonction empty(), dont la syntaxe est la suivante:
Boolean empty( );
Retourne la valeur TRUE si la variable $var n’est pas initialisée a
la valeur 0 ou NULL ou la chaine “0” et la valeur FALSE si elle a
une valeur quelconque.

Said Najah 20
Les Booléens
 L’utilisation d’expressions booléennes est la base de la création des
instructions conditionnelles, qui permettent de gérer le déroulement d’un
algorithme.

Les variables booléennes prennent pour valeurs TRUE (vrai) et


FALSE (faux).

 Une valeur entière nulle est automatiquement considérée comme


FALSE. Tout comme une chaîne de caractères vide ‘’’’. Ou encore
comme les chaînes ‘’0’’ et ‘0’ castées en l’entier 0 lui même casté en
FALSE.
Exemple :
if(0) echo 1; // faux
if('''') echo 2; // faux
if(''0'') echo 3; // faux
if('0') echo 4; // faux
if('' '') echo 5; affiche 5
Said Najah 21
Les Booléens
Les operateur de comparaison
Opérateur Description
== Test l’égalité de deux valeurs
$a=345; $b=“345” ou $b=“345 elements”
$c=$a= =$b; TRUE
!= ou <> Test l’inégalité de deux valeurs
=== Test l’identité des valeurs et des types de deux
expressions.
$a=345; $b=“345”; $c=$a===$b; False
!== Test la non-identité de deux expression

< et <= Test inferieur ou (inferieur ou égal)


> et >= Test supérieur ou (supérieur ou égal)

Said Najah 22
Les Booléens
Les operateurs logiques

Opérateur Description
OR Test si l’un au mois des opérandes
à la valeur TRUE.
|| Equivaut à l’opérateur OR mais n’ a
pas la même priorité.
XOR Test si l’un et un seul des
opérandes à la valeur TRUE.
AND Test si les eux opérandes en la
même valeur TRUE
&& Equivaut à l’opérateur AND mais n’
a pas la même priorité
! Operateur unaire de négation, qui
inverse la valeur de l’opérande.
Said Najah 23
Les Structures de contrôle
 Structures conditionnelles (même syntaxe qu’en langage C) :
 if( ... ) {

} elseif {

} else {

}
switch( … ) {
case … : { … } break

default : { … }
}

Said Najah 24
Les Structures de contrôle
 Structures de boucle (même syntaxe qu’en langage C) :
for( … ; … ; … ) {

}
while( … ) {

}
do {

} while( … );

foreach($tableau as $valeur)
{
// bloc utilisant la valeur de l’élément courant
}
Said Najah 25
Les Structures de contrôle
Signalons un opérateur très spécial qui équivaut à une structure
conditionnelle complexe if then else à la différence qu’il renvoie
un résultat de valeur pouvant ne pas être un booléen : l’opérateur
ternaire.
Syntaxe :
(condition)?(expression1):(expression2);

Si la condition est vrai alors évalue et renvoie l’expression1


sinon évalue et renvoie l’expression2.
Exemple :
$nbr = ($toto>10)?($toto):($toto%10);
Dans cet exemple, la variable $nbr prend $toto pour valeur si
$toto est strictement supérieur à 10, sinon vaut le reste de la
division entière de $toto par 10.
Said Najah 26
Les Structures de contrôle
 L’instruction break permet de quitter une boucle.
 Exemple :

while($nbr = $tab[$i++]) {
echo $nbr.’’<br />’’;
if($nbr == $stop)
break;
}
 L’instruction continue n’arrête pas la boucle en cours mais seulement
l’itération en cours.
 Exemple :

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


if($tab[$i] == $val)
continue;
echo $tab[$i];
}
Said Najah 27
Mathématiques
 Le module de base de PHP offre un grand nombre de
fonctions mathématiques utiles..
abs($x) : valeur absolue
ceil($x) : arrondi supérieur
floor($x) : arrondi inférieur
pow($x,$y) : x exposant y
round($x,$i) : arrondi de x à la ième décimale
max($a, $b, $c …) : retourne l’argument de valeur maximum
pi() : retourne la valeur de Pi
Et aussi : cos, sin, tan, exp, log, min, pi, sqrt…
 Quelques constantes :

M_PI : valeur de pi (3.14159265358979323846)


M_E : valeur de e (2.7182818284590452354)
Said Najah 28
Mathématiques
 Nombres aléatoires :
 rand([$x[,$y]) : valeur entière aléatoire entre 0 et RAND_MAX si x et y ne
sont pas définis, entre x et RAND_MAX si seul x est défini, entre x et y si
ces deux paramètres sont définis.
 srand() : initialisation du générateur aléatoire
 getrandmax() : retourne la valeur du plus grand entier pouvant être généré
L'algorithme utilisé par la fonction rand() - issu de vieilles bibliothèques
libcs - est particulièrement lent et possède un comportement pouvant se
révéler prévisible. La fonction mt_rand() équivalente à rand() est plus
rapide et plus sûre puisque l'algorithme utilisé se base sur la cryptographie.
 En cas d’utilisation de la fonction mt_rand(), ne pas oublier d’utiliser les
fonctions de la même famille : mt_rand([$x[,$y]]), mt_srand() et
mt_getrandmax().

Said Najah 29
Chaînes de caractères
Une variable chaîne de caractères n’est pas limitée en nombre de
caractères. Elle est toujours délimitée par des simples quotes ou
des doubles quotes.
Exemples :
$nom = ‘’Pascal’’;
$prenom = ‘Hugo’;
Les doubles quotes permettent l’évaluation des variables et
caractères spéciaux contenus dans la chaîne (comme en C ou en
Shell) alors que les simples ne le permettent pas.
Exemples :

echo ‘’Nom: $nom‘’; // affiche Nom: Pascal


echo ’Nom: $nom‘; // affiche Nom: $nom

Said Najah 30
Chaînes de caractères

Caractère spéciaux Description

\n nouvelle ligne
\r retour à la ligne
\t tabulation horizontale

\\ antislash
\$ et \ “ caractère dollars et double quote

Exemple : echo ‘’Hello Word !\n’’;

Said Najah 31
Chaînes de caractères
 Opérateur de concaténation de chaînes : . (point)
 Exemple 1 :

$foo = ‘’Hello’’;
$bar = ‘’Word’’;
echo $foo.$bar;
 Exemple 2 :

$name = ‘’Henry’’;
$whoiam = $name.‘’IV’’;
 Exemple 3 :

$out = ‘Patati’;
$out = ‘’ et patata…’’;
Said Najah 32
Chaînes de caractères

Affichage d’une chaîne avec echo:


Exemples:
echo ‘Hello Word.’;
echo ’’Nom : ’’. $name;
echo(‘’Bonjour’’);

Affichage formaté:
Un affichage formaté permet d’obtenir des résultats uniformes, par exemple,
pour aligner des chaînes sur plusieurs lignes ou des nombres dans un format
particulier, comme un nombre décimales fixe et une superposition correcte
des chiffres en colonnes pour des montant financiers.
On deux fonctions:
Printf( ) et sprintf( )

Said Najah 33
Chaînes de caractères
La syntaxe de printf( ) est la suivante:
Void printf(sring “format”, string $ch1, string $ch2, …, $chN)
Cette fonction affiche directement le contenu des chaines $ch1,$ch2,
….,$chN selon le format spécifié dans la chaine “Format”.

 La syntaxe de sprintf( ) est la suivante:


String sprintf(sring “format”, string $ch1, string $ch2, …, $chN)
Elle retourne une chaine unique, qui peut être composée de une ou
plusieurs fois les chaines $ch1,$ch2,….,$chN formaté selon le modèle
défini dans la chaine “Format”, comme précédemment

Les fonction vprintf(string “Format”, array $tab) et vsprintf(string


“Format”, array $tab) jouent des roles equivalent respectivement à
printf() et sprintf(), mais avec pour particularité que les chaines sont
passées en argument dans un tableau.

Said Najah 34
Chaînes de caractères
Caractère Signification
%b Interprète la chaine $ch comme un entier et l’affiche en binaire:
$ch=“89”;
Printf (“En binaire $ch s’ecrit %b <br/> ”,$ch);
//Affichage: en binaire 89 s’ecrit 1011001
%c Interprète la chaine $ch comme un entier et affiche le caractère
dont le code ASCII correspond à ce nombre :
$ch=“115”;
Printf (“Le caratère de code $ch est %c <br/> ”,$ch);
//Affichage: Le caractère de code 115 est s
%f Interprète la chaine $ch comme un nombre de type double et
l’affiche avec sa partie decimale à 6 chiffres. Les carctères non
numeriques de $ch ne sont pas pris en compte:
$ch=“25.52 mètres”;
Printf (“La longueur est de %f m ”, $ch);
Affichage: La longueur est de 25.52.m
Said Najah 35
Chaînes de caractères
%d Interprète la chaine $ch comme un entier signé et
l’affiche comme un nombre en base 10 :
$ch=“-25”;
Printf (“La valeur de \$ch est %d ”,$ch);
//Affichage: -25
%o Interprète la chaine $ch comme un entier et l’affiche en
octal :
$ch=252;
Printf (“En octal le nombre $ch s’écrit %o ”,$ch);
//Affichage: En octal le nombre 252 s’écrit 374
%s Interprète la chaine $ch comme une chaine et l’affiche
telle quelle:
$ch1=“Monsieur”; $ch2=“Schtroumpf”
Sprintf(“bonjour ,%s %s bravo !”, $ch1,$ch2)
Equivaut à:
Echo “ bonjour $ch1 $ch2. bravo!”
Said Najah 36
Chaînes de caractères
 Longueur d’une chaîne de caractères
 Pour déterminer le nombre de caractère d’une chaine,
utilisez la fonction strlen( ), dont la syntaxe est la
suivante:
Int strlen( string $ch).
 La fonction strlen() peut servir, par exemple, à vérifier
qu’un code postal saisi par un internaute comporte bien
cinq chiffres.
 Exemple:

$code="7508”;
If ( strlen($code) !=5 ) echo “code erroné !”

Said Najah 37
Chaînes de caractères
Mise en forme des chaînes
Il est souvent nécessaire de remettre en forme les chines utilisées dans
les scripts, notamment lorsqu’elles viennent d’ une source externe,
comme les saisies faite par des visiteurs dans un formulaire.
PHP offre plusieurs fonctions de conversion de la casse d’une chaine
utilisable pour normaliser l’affichage, quelle que soit la casse utilisée par
un visiteur pour donner des informations.
Il s’agit des fonctions:

string strtolower(string $ch): retourne la chaine avec tous les caractères


en minuscules.
string strtoupper(string $ch): retourne la chaine avec tous les caractères
en majuscules.
string ucwords(string $ch): retourne la chaine avec tous les initiales des
mots qui la composent en majuscules.
string ucfirst(string $ch): retourne la chaine avec uniquement la
première lettre en majuscules
Said Najah 38
Chaînes de caractères
 Recherche de sous chaines
 Plusieurs fonctions spécifiques permettent d’extraire une
sous-chaîne d’une chaîne donnée.
 La fonction string strstr(string $ch, string $ch2):
rechercher si la chaine est contenue dans $ch et retiurne tous
les caractères allant de la première occurrence de $ch2
jusqu’à la fin de $ch2. cette recherche est sensible à la casse.
Pour effectuer une recherche insensible à la casse, vous
devez utiliser la fonction
string stristr (string $ch, string $ch2)
 La fonction string strrch(string $ch, string $ch2):
ne retourne que la portion de $ch présente à partie de la
dernière occurrence de $ch2.
Said Najah 39
Chaînes de caractères

La fonction string substr_count(string $ch, string $ch2):


retourne le nombre d'occurrence d’une sous chaine $ssch dans
une chaîne $ch

la fonction string sub_replace(string $ch1, string $ch2),


string $ch[,string $var]):
retourne la chaine $ch, dans laquelle toutes les occurrences de
$ch1 sont remplacées par $ch2. le quatrième paramètres est le
nom d’une variable à laquelle est passé par références le nombre
de remplacement effectué.

Said Najah 40
Chaînes de caractères
Comparaison de chaines:
Les opérateurs de comparaison usuels sont utilisables avec les chaînes.
Cela inclus bien sur les operateurs d’égalité (= =) et d’identité (= = =), ce
dernier ne permettant d’obtenir la valeur TRUE dans une expression
conditionnelle que si les deux opérandes ont non seulement la même
valeur mais aussi le même type

Pour comparer des chaînes et obtenir leur ordre alphabétique, au sens de


code ASCII du terme php dispose de deux fonctions:
Int strcmp( string $ch1, string $ch2)
Int strcasecmp( string $ch1, string $ch2)
Leur fonctionnement est identique, mais la première fonction est sensible à
la casse alors que la seconde ne l’est pas. Elle retourne toute les deux un
nombre négatif(généralement -1) si $ch1 est inferieure à $ch2, un nombre
positif(généralement 1) dans le cas contraire et 0 en cas d’égalité.

Said Najah 41
Les expressions régulières
 Une expression régulier ou expression rationnelle,
permet de définir un modèle général, appelé motif de
l’expression régulière, au moyen de caractères
particuliers, représentatifs d’un ensemble de chaînes de
caractères très variées.
 L’écriture des motifs d’expression régulier est la partie
la plus rébarbative du travail de codage. Les motifs sont
toujours contenus dans des chaines de caractères, et
donc entre guillemets.
 Pour recherche la présence d’un caractère particulier, il
suffit de l’inclure entre des guillemets simple ou
doubles. Pour rechercher le caractère @, vous écrivez
le modèle: $modele=“@”.
Said Najah 42
Les expressions régulières

 Exemple: $modele=“[A-Z]” recherche n’import quel


groupe de majuscules.
 Pour rechercher la présence d’un mot précis dans une
chaine, créez le motif en écrivant le mot entre guillemets.
La recherche est validée si le mot se trouve exactement
dans la chaine analysée et en respectant la casse.
 Pour interdire la présence d’un groupe de caractères,
faites-le précéder par le caractère ^.

Said Najah 43
Les Tableaux
 La fonction array( ) permet de créer de manière rapide des tableaux
indicés ou associatifs. C’est elle qui sera le plus souvent utilise pour
la création de tableaux.
 La façon la plus élémentaire de créer un tableau indicé consiste à
définir individuellement une valeur pour chacun des ces éléments, et
ce de la manière suivante:
$tab[n]=valeur;
ou n est un indice entier quelconque, et valeur un scalaire ou une
variable de type integer, double, boolean, string et array.
Pour créer un tableau composé de plusieurs éléments en une seul
opération, vous disposez de la fonction array().
$tab=array( valeur0, valeur1, …, valeurN)

Said Najah 44
Les Tableaux
 Les tableaux associatifs:
 La même fonction array( ) permet aussi de créer rapidement un
tableau associatif en définissant pour chacun de ses éléments une
clé et une valeur.
 La syntaxe :
$tabasso=array(“cléA” =>valeurA, “cléB” =>valeurB,… “cléZ”
=>valeurZ)
Chaque clé est une chaine de caractère délimitée par des guillemets.
Pour lire la “valeurA” vous écrivez $tabasso[“cléA”]

 Un tableau associatif est appelé aussi dictionnaire ou hashtable.


On associe à chacun de ses éléments une clé dont la valeur est de
type chaîne de caractères.
 L’initialisation d’un tableau associatif est similaire à celle d’un
tableau normal.
 Exemple 1 :
$personne = array(‘’Nom’’ => ‘’César’’, ‘’Prénom’’ => ‘’Jules’’);

Said Najah 45
Les Tableaux
Exemple 2 :
$personne[‘’Nom’’] = ‘’César’’;
$personne[‘’Prénom’’] = ‘’Jules’’;

Ici à la clé ‘’Nom’’ est associée la valeur ‘’César’’.

Les tableaux multidimensionnels:


PHP ne comporte pas de méthodes explicite de création de tableaux
multidimensionnels.
Exemple de tableau(4,3):
$tabmulti=array
Array(“L_0-C_0”, “L_0-C_1”, “L_0-C_2”),
Array(“L_1-C_0”, “L_1-C_1”, “L_1-C_2”),
Array(“L_2-C_0”, “L_2-C_1”, “L_2-C_2”),
Array(“L_3-C_0”, “L_3-C_1”, “L_3-C_2”),
);

Said Najah 46
Les Tableaux
Compter le nombre de valeurs d’un tableau
$result =array_acount_values($tab)
retourne le tableau $result, ayant pour clé les valeurs du tableau $tab et pour
valeur associe à chaque clé le nombre de fois que chacune apparaît dans le
tableau $tab.
Exemple: comptage du nombre de valeurs
<?php
$tab=array (“Web”, “Internet”, “PHP” , “JavaScript”, “PHP” , “ASP” , “PHP”,
“ASP” );
$result=array_count($tab);
echo “Le tableau \$tab contient ”.count($tab). “éléments <br>”;
echo “Le tableau \$tab contient ”.count($result). “valeurs différentes <br>”;
printf_r($result);
?>
Résultat: le tableau $tab contient 8 éléments
le tableau $tab contient 5 valeurs différentes
Array( [Xeb]=>1 [Internet]=>1 [PHP]=>3 [JavaScript]=>1 [ASP]=>2)

Said Najah 47
Les Tableaux

La boucle for a besoin d’un paramètre d’arrêt. Vous allez employer pour
cela la fonction count( ), qui retourne le nombre total d’éléments de la
boucle. L’utilisation da la variable $i comme compteur de la boucle
permet de parcourir l’ensemble des valeurs des tableau.

 Exemple:
<? PHP
$montab=array(“Paris”, “London”, “Brussel”);
For ($i=0;$i<count($montab);$i++)
{echo “L’elemnt $i est $montab[$i] <br>”;}
?>
 Résultat: L’element 0 est Paris
L’element 1 est London
L’element 2 est Brussel

Said Najah 48
Les Tableaux

La boucle for nécessite par définition de connaître le nombre d’itérations à


effectuer tel que fourni par la fonction count( ). Ce n’est pas le cas avec la
boucle while, qui se révèle de ce fait plus efficace dans le cas d’un tableau
retourné après une requête sur une base de données, le nombre de réponses
étant bien évidemment inconnu.

Pour un tableau à une dimension, l’expression booléenne contenue dans


l’instruction while est isset($tab[$i]). Cette expression prend la valeur TRUE
tant que l’élément désigne par $tab[$i] existe. Sinon, elle pend la valeur
FALSE, ce qui le cas en fin de tableau.

La variable $i étant incrémentée dans la boucle, isset($tab[$i]) prend la valeur


FALSE quand $i dépasse le nombre d’éléments du tableau $tab, ce qui
provoque l’arrêt de la boucle.

Said Najah 49
Les Tableaux

Exemple 2 : Lecture d’un tableau à l’aide de la boucle while


<? PHP
$montab=array(“Paris”, “London”, “Brussel”);
$i=0;
While(isset($montab[$i]))
{
echo “L’elemnt $i est $montab[$i] <br>”;
$i++;
}
?>

Résultat: L’element 0 est Paris


L’element 1 est London
L’element 2 est Brussel

Said Najah 50
Les Tableaux
 Pour pallier les inconvénient des autre méthodes, il est possible d’utiliser
une autre méthode de lecture, cette dernier fait appel à la fois à une
fonction while et à la fonction each().
 La fonction each() reçoit comme paramètre une variable le type array est
retourne un tableau à quatre éléments qui contient les informations sur
l’élément courant du tableau passe en paramètre puis de pointe sur
l’élément suivant.
 Syntaxe de fonction each( ):
$element=each($tab);
$tab est le tableau à lire et $element le tableau de résultats contenant les
informations sur l’élément courant de $tab, sous la forme:
$element[0], qui contient l’indice de l’élément courant
$element[1], qui contient la valeur de l’élément courant
$element[“key”], qui contient la clé de l’élément courant
$element[“value”], qui contient la valeur de l’élément courant

Said Najah 51
Les Tableaux
Exemple 3 : Lecture à l’aide de la fonction each( )
<? PHP
//****** Lecture d’un tableau indicé***********
$montab=array(“Paris”, “London”, “Brussel”);
$montab[9]=“Berlin”; //ajout d’élément au tableau
Reset($montab); //pointer sur le premier élément
While(isset($element=each($montab))
{
echo “L’elemnt d’indice $element[0] et à la valeur $element[1] <br>”;
//$i++;
}
?>

Résultat: L’élément 0 est Paris


L’élément 1 est London
L’élément 2 est Brussel
L’élément 9 est Berlin
Said Najah 52
Les Tableaux
Exemple 3 : Lecture à l’aide de la fonction each( )
<? PHP
//****** Lecture d’un tableau associatif***********
$montab=array(“France”=>“Paris”, “Great Britain”=>“London”,
“Belgie”=>“Brussel”);
$montab[“Deutchland”]=“Berlin”; //ajout d’élément au tableau
Reset($montab); //pointer sur le premier élément
While(isset($element=each($montab))
{
echo “L’élément de clé $element[“Key”] et à la valeur
$element[“value”] <br>”;
//$i++;
}
?>
Résultat: L’élément de France et à la valeur Paris
L’élément de Great Britain et à la valeur London
L’élément de Belgie et à la valeur Brussel
L’élément de Deutchland et à la valeur Berlin
Said Najah 53
Les Tableaux
 Lire avec each( ) et list( )
 La fonction list() permet d’affecter à N variables la valeurs des n
premier éléments d’un tableau indicé.
 Syntaxe : list($x, $y, $z, ….)=$tab;

 La variable $x prend la valeur du premier élément du tableau


$tab( d’indice 0 ou de clé). $y prend la valeur du deuxième élément, et
ainsi de suite.
 Exemple:
$montab=array(“Paris”, “London”, “Brussel”);
List($x,$y)=$montab;
Echo “ Les deux premiers elements don’t: $x, $y <br>”;

Affiche uniquement les valeurs Paris et London, sans les indices


 La fonction liste() ne déplace pas le pointeur sur l’éléments suivants

Said Najah 54
Les Tableaux
 L’intérêt de cette fonction dans la lecture des tableaux peut donc
apparaît limité. Si vous l’associez cependant à la fonction each(),
son rôle appréciable devient plus évident.
 En effet each( ) déplace le pointeur interne sur les éléments
suivants, tandis que list( ) permet de lire les deux premier
éléments du tableau retourné par la fonction each( ), élément qui
contient respectivement l’indice et la valeur du tableau à lire.
 List($x,$y)=each($tab)
La variable $x contient l’indice ou la clé et $y la valeur associée.
L’ensemble list( ) et each( ) placé comme expression booléenne
dans une boucle while vous permet donc de lire l’intégralité du
tableau en récupérant les indices, ou les clés selon le cas.

Said Najah 55
Les Tableaux

Exemple 4 : Lecture à l’aide de list( ) et each( )


<?php
$montab=array("Paris","London","Brussel");
list($x,$y) = $montab;
echo"Les deux premier éléments sont : $x et $y <br>";
// list() avec un tableau associatif (ne fonctionne pas)
$montab=array("France"=>"Paris","Great
Britain"=>"London","Belgie"=>"Brussel");
List($x,$y)=$montab;
echo"<hr>";

Said Najah 56
Les Tableaux
//*********************************************
// Lecture d’un tableau indicé
//*********************************************
$montab=array("Paris","London","Brussel");
While(list($indice,$valeur) = each($montab))
{
echo"L’element d’indice <b>$indice</b> a la valeur <b>$valeur</b> <br>";
}
echo"<hr>";
//*********************************************
// Lecture d’un tableau associatif
//*********************************************
$montab=array("France"=>"Paris","Great
Britain"=>"London","Belgie"=>"Brussel");
While(list($cle, $valeur) = each($montab))
{
echo"L’element de cle <b>$cle</b> a la valeur <b>$valeur</b> <br>";
}
?>
Said Najah 57
Les Tableaux

Les deux premier éléments sont : Paris et London

Notice: Undefined offset: 1 in c:\program files\easyphp1-8\www\site1\exe.php


on line 7
Notice: Undefined offset: 0 in c:\program files\easyphp1-8\www\site1\exe.php
on line 7

L’element d’indice 0 a la valeur Paris


L’element d’indice 1 a la valeur London
L’element d’indice 2 a la valeur Brussel

L’element de cle France a la valeur Paris


L’element de cle Great Britain a la valeur London
L’element de cle Belgie a la valeur Brussel

Said Najah 58
Les Tableaux
 L’instruction foreach ( )
 Plus pratique encore que les méthodes précédentes, l’instruction
foreach() n’est utilisable qu’à partir des version 4 de PHP. Elle se
révèle particulièrement efficace pour les tableaux associatifs mais
fonctionne également pour les tableaux indicé.
 Contrairement à la boucle for, l’instruction foreach() ne nécessite pas
de connaître par avance le nombre d’éléments du tableau à lire.
 Pour les tableaux indicé vous écrivez le code suivant:
foreach($tab as $valeur)
{
// bloc de code utilisant les valeurs de la variable $valeur;
}
 Pour les tableaux associatif vous écrivez le code suivant :
foreach($tab as $cle=>$valeur)
{
// bloc de code utilisant les valeurs de la variable $cle et
$valeur;
}
Said Najah 59
Les Tableaux
<?PHP
//**********************************************************************************
// Lecture d’un tableau indicé
//***********************************************************************************
$montab=array("Paris", "London", "Brussel");
echo "<H3> Lecteur des valeur des éléments </H3>";
foreach($montab as $ville)
{
echo "<b>$ville</b> <br>";
}
echo"<hr>";
//*********************************************************************************
// Lecture d’un tableau indicé avec récupération des indices
//********************************************************************************
echo "<H3> Lecteur des indices et valeur des éléments </H3>";
foreach($montab as $indice=>$ville)
{
echo "L'element d'indice <b>$indice</b> a la valeur <b>$ville</b> <br>";
}
echo"<hr>"; Said Najah 60
Les Tableaux

//********************************************************************************
// Lecture d’un tableau associatif avec récupération des clés
//********************************************************************************
$tab=array("France"=>"Paris","Great Britain"=>"London","Belgie"=>"Brussel");
echo "<H3> Lecteur des clés et valeur des éléments </H3>";
foreach($tab as $cle=>$ville)
{
echo "L'element de clé <b>$cle</b> a la valeur <b>$ville</b> <br>";
}
echo"<hr>";

?>

Said Najah 61
Les Tableaux
Lecteur des valeur des éléments
Paris
London
Brussel

Lecteur des indices et valeur des éléments


L'élément d'indice 0 a la valeur Paris
L'élément d'indice 1 a la valeur London
L'élément d'indice 2 a la valeur Brussel
Lecteur des clés et valeur des éléments
L'élément de clé France a la valeur Paris
L'élément de clé Great Britain a la valeur London
L'élément de clé Belgie a la valeur Brussel

Said Najah 62
Les Tableaux
 PHP dispose d’un grand nombre de fonction permettant d’effectuer
toutes sorte de manipulations de tableaux existants:
 Extraire une partie d’un tableaux:
$sous_tab=array_slice(array $tab, int ind, int nb)
Si ind et nb sont positifs, le tableaux $sous_tab contient nb
éléments du tableau initial extrait en commençant à l’indice ind.
Si ind est négatif et nb positifs, le compte des éléments se fait
en partant de la fin du tableaux $tab, le dernier se trouvant
affecte virtuellement de l’indice -1, l’avant-dernier de l’indice
-2, et ainsi de suite. Le nombre nb désigne encore le nombre
d’élément à extraire.
Si ind est positif et nb négatif, le tableau $sous_tab contient les
éléments de $tab extraits en commençant par l’indice ind et
s’arrêtant à celui qui a l’indice négatif virtuel nb (toujours en
commençant par la fin).
Si ind et nb négatif, le tableau $sou_tab contient les elements de
$tab extraits en commencant à l’indice negatif ind et en
s’arretant à celui d’indice negatid ind
Said Najah 63
Les Tableaux
 Ajouter et enlever des éléments:
 La fonction int array_push($tab, $val1,$val2,…,$valN) permet
d’effectuer divers manipulation d’ajout ou de retrait d’éléments.
 Il ajoute en une seule opération les N éléments passes en paramètre
à la fin du tableau désigné par la variable $tab.
 Pour ajouter des éléments au début d’un tableau, vous pouvez
utiliser la fonction : int array_unshift($tab, val1, val2, …, valN)
 Réciproquement, vous pouvez supprimer des éléments d’un tableau
à l’aide de la fonction: array_pop($tab) qui supprime le dernier
élément du tableau $tab et retourne cet élément s’il existe ou la
valeur NULL dans le cas contraire. Par exemple, le tableau est vide
ou si le paramètre $tab n’est pas un type array.
 Pour supprimer le premier élément d’un tableau: array_shift($tab)
qui retourne la valeur de l’élément supprimé
 Il est possible de supprimer un élément d’indice ou de clé
quelconque du tableau $tab à l’aide de la fonction unset( ) en
précisent explicitement le nom de l’élément et son indice ou sa clé
Said Najah 64
Les Tableaux
 Quelques fonctions:
count($tab), sizeof : retournent le nombre d’éléments du tableau
in_array($var,$tab) : dit si la valeur de $var existe dans le tableau $tab
list($var1,$var2…) : transforme une liste de variables en tableau
range($i,$j) : retourne un tableau contenant un intervalle de valeurs
shuffle($tab) : mélange les éléments d’un tableau
sort($tab) : trie alphanumérique les éléments du tableau
rsort($tab) : trie alphanumérique inverse les éléments du tableau
implode($str,$tab), join : retournent une chaîne de caractères contenant les
éléments du tableau $tab joints par la chaîne de jointure $str
explode($delim,$str) : retourne un tableau dont les éléments résultent du
hachage de la chaîne $str par le délimiteur $delim
array_merge($tab1,$tab2,$tab3…) : concatène les tableaux passés en
arguments
array_rand($tab) : retourne un élément du tableau au hasard
Said Najah 65
Les Tableaux
 Quelques fonctions :
array_count_values($tab) : retourne un tableau contenant les valeurs du
tableau $tab comme clés et leurs fréquence comme valeur (utile pour
évaluer les redondances)
array_keys($tab) : retourne un tableau contenant les clés du tableau
associatif $tab
array_values($tab) : retourne un tableau contenant les valeurs du tableau
associatif $tab
array_search($val,$tab) : retourne la clé associée à la valeur $val
 Quelques fonctions alternatives pour le parcours de tableaux (normaux
ou associatifs) :
reset($tab) : place le pointeur sur le premier élément
current($tab) : retourne la valeur de l’élément courant
next($tab) : place le pointeur sur l’élément suivant
prev($tab) : place le pointeur sur l’élément précédant
each($tab) : retourne la paire clé/valeur courante et avance le pointeur
L’élément d’un tableau peut être un autre tableau.
 Les tableaux associatifs permettent de préserver une structure de
données.
Said Najah 66
Les Tableaux
 Il est possible d’effectuer des opérations complexes sur les tableaux en
créant par exemple sa propre fonction de comparaison des éléments et
en la passant en paramètre à une fonction de tri de php.
usort($tab, ‘’fonction’’);
 Trie les éléments grâce à la fonction fonction définie par l'utilisateur
qui doit prendre 2 arguments et retourner un entier, qui sera inférieur,
égal ou supérieur à zéro suivant que le premier argument est considéré
comme plus petit, égal ou plus grand que le second argument. Si les
deux arguments sont égaux, leur ordre est indéfini.
Attention, les variables tableaux ne sont pas évaluées lorsqu’elles sont
au milieu d’une chaîne ce caractère délimitée par des doubles quottes.
 Exemple :

echo ‘’$tab[3]’’; // syntaxe invalide


echo $tab[3]; // syntaxe valide

Said Najah 67
Les Formulaires

 Les formulaires introduits dans le HTML depuis plus anciennes


versions sont l’élément essentiel qui permet l’interactivité entre un
site et ses visiteurs.
 Ils constituent pour cette raison la base de la création de sites
dynamiques.
 Tout échange entre visiteur et serveur passe par un formulaire,
dans lequel l’utilisateur peut saisir textes ou mot de passe, opérer
des choix grâce à des boutons radio, des cases à cocher ou des
listes de sélection, voire envoyer ses propres fichiers depuis le
poste client.
 Il est donc important d’en maitriser la création à la fois en HTML,
Pour obtenir des formulaires présentables, et en PHP, pour gérer
les informations fournies par le formulaires au script coté serveur.

Said Najah 68
Les Formulaires

 <FORM>: tout ce qui concerne les éléments d’un formulaire


est placé à l’intérieur de ce conteneur. Il reconnaît trois
attributs importants.
ACTION spécifie l’URL du programme qui traitera le
formulaire.
METHODE peut prendre deux valeurs: GET et POST, et
conditionne la façon dont les données du formulaire seront
transmis au script de traitement.
ENCTYPE spécifie le type de document. Par défaut, sa
valeur est le type MIME.

Said Najah 69
Les Formulaires
<INPUT>: La balaise <input> permet de créer des composants d’aspect et
de rôle très différents. La différenciation de ces composantes d’effectue en
définissant la valeur de leur attributs et notamment de l’attribut type.

L’élément <input type=“text”/>


Cet élément crée un champ de saisie de texte d’une seule ligne.
Les attributs: name,
size=“détermine la largeur de la zone en nombre de caractères ”,
maxlength =“détermine le nombre maximal de caractères que l’utilisateur
est autorisé à saisir”,
value= “ définit un texte par défaut tant que l’utilisateur ne l’a pas
modifié”,
<input type=“test” name=“ville” size=“30” maxlength=“40” value=“votre
ville”/> Said Najah 70
Les Formulaires

 L’élément <input type=“password”/>


 Crée un champ de saisie de mot de passe semblable à un
champ texte mais dans lequel les caractères saisis sont
invisibles et remplacés par des astérisques
 Les attributs: size et maxlength y jouent le même rôle que
précédemment.
 <input type=“passsword” name=“code” size=“10”
maxlength=“6” />

Said Najah 71
Les Formulaires

L’élément <input type=“checkbox”/>


Crée une case à cocher utilisée pour effectuer un ou plusieurs choix parmi
ceux qui sont préétablis par le programmeur.
L’attributs: l’attribut value contient le texte qui sera transmis au serveur si
l’utilisateur coche la case. Il est obligatoire.
Il est possible de cocher plusieurs cases simultanément, dans ce cas, il
faut que le nom de tous les composants soit le même et qu’il soit suivi de
crochets ouvrants et fermants de façon à récupérer les valeurs dans un
tableau.
< input type=“checkbox” name=“lang[ ]” value=“français”/>
< input type=“checkbox” name=“lang[ ]” value=“anglais”/>

Said Najah 72
Les Formulaires

 L’élément <input type=“radio”/>


 Crée un bouton radio. Employé seul, un bouton radio peut servir à valider de
choix. Employé en groupe, à la différence de case à cocher, qu’un seul choix
est autorisé.
 Dans ce cas, tous les boutons radio du groupe doivent avoir une valeur pour
l’attribut “name”.
 L’attribut checked =“checked” définit le bouton coché par défaut.
 L’attribut value joue le même rôle que pour les cases à cocher et est également
indispensable.
<label>Débutant</label><input type=“radio” name=“capa”
value=“debutant”/>
<label>Initié</label><input type=“radio” name=“capa” value=“initié”/>

Said Najah 73
Les Formulaires

L’élément <input type=“submit”/>


Crée un bouton sur lequel l’utilisateur doit cliquer pour déclencher
l’envoi des données de tout le formulaire vers le serveur.
Il est indispensable d’avoir au moins un bouton d’envoi par
formulaire li est possible d’en utiliser plusieurs.
L’attribut name n’est a priori pas utile, en particulier s’il n’y a
qu’un seul bouton d’envoi.
<input type=“submit” value=“envoi”/>

Said Najah 74
Les Formulaires

L’élément <input type=“reset”/>


Crée un bouton de réinitialisation du formulaire et non
d’effacement systématique, comme on le croit souvent. Si les
éléments du formulaire ont des attributs value qui définissent des
valeurs par défaut, ce sont ces valeurs qui apparaissent au
démarrage de la page et qui réaffichées si l’utilisateur clique sur
le bouton reset.
<input type=“reset” value=“Effacer”/>

Said Najah 75
Les Formulaires

L’élément <input type=“file”/>


Permet le transfert de fichier du poste client vers le serveur.
L’attribut name est indispensable.
L’attribut size limite la taille de zone de saisie. Et plus
particulièrement l’attribut accept, qui définit le ou les types
de fichier acceptés.
<input type=“file” value=“monfichier” accept=“image/gif,
image/ipeg” size=“ 30”/>

Said Najah 76
Les Formulaires

 L’élément <input type=“hidden”/>


Crée un champ caché ayant, comme son nom l’indique, aucun
rendu visuel dans le formulaire mais permettant de transmettre
les informations invisibles pour l’utilisateur.
Les informations sont contenus dans l’attribut value. L’attribut
name est obligatoire.
<input type=“hedden” name= “MAX_FILE_SIZE” value=“20000” />

Said Najah 77
Les Formulaires

L’élément <textarea>
A l’instar de l’élément <input type=“hidden”/>, L’élément
<textarea>crée un champ de saisie de texte mais, contrairement au
précédent, en permettant la saisie sur plusieurs lignes.
Les attributs: clos, rows qui donnent respectivement le nombre de
colonnes et de lignes
De la zone texte.
<textarea name= “commentaire” cols=“45” rows=“8” />
Tapez vos commentaire ici
</textarea>

Said Najah 78
Les Formulaires
 L’élément <select>
Crée une liste de sélection d’options parmi lesquelles
l’utilisateur fait un choix, chaque option devant être définie par
un élément <option> séparé.
<select name=“maliste ”>
<option value=“valeur 1”> Texte choix 1</option>
<option value=“valeur 2”> Texte choix 2</option>
<option value=“valeur 3”> Texte choix 3</option>
</select>
Les attributs:
name= “nom_select”. Obligatoire, dans le nom de la liste.
size= “Nombre” . Détermine le nombre de choix visibles
simultanément. Par défaut, sa valeur est 1.
Said Najah 79
Les Formulaires

Multiple=“multiple”. Autorise la sélection de plusieurs options


simultanément.
L’élément<option> comporte les attributs suivants:
Value= “chaine”. Obligatoire. Définit la valeur transmise au
serveur si l’option est sélectionnée.
selected= “selected”. Définit l’option qui est sélectionnée par
défaut dans la liste si l’utilisateur ne fait pas de choix.

Said Najah 80
Les Formulaires

 Récupération des données du formulaire


 Que se passe-il lorsque l’utilisateur clique sur le bouton
d’envoi?
 Une requête HTTP est envoyée au serveur à destination du
script désigné par l’attribut action de l’élément <form> .
La requête contient toutes les associations entre les noms
des champs et de leur valeur. Ces association se trouvent
dans l’en-tête HTTP si la méthode POST est utilisée et
dans l’URL s’il s’agit de la méthode GET.

Said Najah 81
Les Formulaires

 Valeurs uniques:
 Les valeurs uniques proviennent des champs de
formulaire dans lesquels l’utilisateur ne peut entrer
qu’une valeur, un texte par exemple, ou ne peut faire
qu’un seul choix (bouton radio, liste de sélection à
choix unique).
 Ces valeurs sont contenues sur le serveur dans des
tableaux associatifs dits superglobaux appelés $_POST
et $_GET, selon la méthode choisie. Les clés de ces
tableaux sont les noms associes aux champs par
l’attribut name

Said Najah 82
Les Formulaires
 Cas de la méthode POST
<html>
<head>
<title>formulaire traité par php</title>
</head>
<body>
<form action="<?= $_SERVER["PHP_SELF"]?>" method="post"
enctype="application/x-www-forum-urlencoded">
<fieldset>
<legend><b>Infos</b></legend>
nom: <input type="text" name="nom" size="40"/>
</br>
Débutant: <input type="radio" name="niveau" value="débutant"/>
Initié: <input type="radio" name="niveau" value="initié" />
</br>
<input type="reset" value="effecer">
<input type="submit" value="envoyer">
</fieldset>
</form> Said Najah 83
Les Formulaires
<?php
if(isset($_POST["nom"]) && isset($_POST["niveau"]))
{ echo"<h2> Bonjour ".$_POST["nom"]." vous êtes ".$_POST["niveau"]."
en PHP</h2>";}
?>
</body>
</html>

Said Najah 84
Les Formulaires
Cas de la méthode GET:
Avec la méthode GET vous récupérez les données du formulaire
dans les
varibles $_GET[“nom”] et $_GET[“niveau”], comme ci-dessous:
<?php
If ( isset($_GET[“nom”] ) && isset($_GET[“niveau”] )
{
echo “ <h2> Bonjour ”, $_GET[“nom”], “vous êtes”,
$_GET[“niveau”], “en PHP </h2>”;
}
?>
Contrairement à ce qui ce passe avec la méthode POST, vous
constatez que lors du clic sur le bouton d’envoi l’adresse de la
page cible d »signée par l’attribut action est suivi par le caractère ?
Puis le nom de chaque champ et la valeur qui y associée.
Said Najah 85
Les Formulaires
<html>
<head>
<title>formulaire traité par php</title>
</head>
<body>
<form action="<?=$_SERVER["PHP_SELF"]?>" method="GET"
enctype="application/x-www-forum-urlencoded">
<fieldset>
<legend><b>Infos</b></legend>
nom: <input type="text" name="nom" size="40"/> </br>
Débutant: <input type="radio" name="niveau" value="débutant"/>
Initié: <input type="radio" name="niveau" value="initié"/>
</br>
<input type="reset" value="effecer">
<input type="submit" value="envoyer">
</fieldset>
</form> Said Najah 86
Les Formulaires
<?php
if(isset($_GET["nom"]) && isset($_GET["niveau"]))
{ echo"<h2> Bonjour ",$_GET["nom"]," vous êtes ",$_GET["niveau"]," en
PHP</h2>";}
?></body></html>

URL : http://127.0.0.1/site1/form_bis.php?nom=saad+Alami&niveau=d%E9butant

Said Najah 87
Les Formulaires
 Les valeurs multiples
 Certains champs de formulaire peuvent permettre aux visiteurs de saisir
plusieurs valeurs sous un même nom de composant.
 Cela peut concerner un groupe de cases à cocher ayant le même
attributs name, par exemple, dont il est possible de cocher une ou
plusieurs cases simultanément. Ce peut également être le cas d’une liste
de sélection ayant toujours un nom unique mais dans laquelle l’attribut
multiple= “multiple” est défini.
 Dans tous les cas, ce n’est pas une valeur scalaire mais un tableau qui
est récupéré côté serveur, il faut pour cela faire suivre le nom du
composant de crochets, comme pour créer une variable de type array.
 Exemple:
Bleu :<input type=“checkbox” name =“choix[]” value =“bleu”/>
Blanc :<input type=“checkbox” name =“choix[]” value =“blanc”/>
L’utilisateur peut cocher les deux cases simultanément.
Le programmeur récupère ces valeurs dans les variables suivantes:
$_POST[“choix”][0] qui contient la valeur “bleu”
$_POST[“choix”][1] qui contient la valeur “blanc”

Said Najah 88
Les Formulaires
<html>
<head>
<title>choix multiples</title>
</head>
<body>
<form action="form6.6a.php" method="POST"
enctype="application/x-www-forum-urlencoded">
<fieldset>
<legend>Recherche d'emploi: complétez la fiche</legend>
Nom<input type="text" name="ident[]"/>
Prénom<input type="text" name="ident[]"/>
Age<input type="text" name="ident[]"/>
<br/><br/>
Langues Pratiquées<br/>
<select name="lang[]" multiple="multiple" size="1">
<option value="Francais">Français</option>
<option value="anglais">Anglais</option>

Said Najah 89
Les Formulaires
<option value="allemand">Allemand</option>
<option value="espagnol">Espagnol</option>
</select><br/><br/>
Compétence informatiques<br/>
HTML<input type="checkbox" name="competent[]"
value="HTML"/>
PHP<input type="checkbox" name="competent[]"
value="PHP"/>
MySQL<input type="checkbox" name="competent[]"
value="MySQL"/>
ASP.NET<input type="checkbox" name="competent[]"
value="ASP.NEt"/>
<br/><br/>
<input type="reset" value="EFFACER"/>
<input type="submit" value="ENVOI"/>
</form>
</body>
</html>
Said Najah 90
Les Formulaires

Said Najah 91
Les Formulaires

Said Najah 92
Les Formulaires
 Transfert de fichier vers le serveur
 L’inclusion d’un élément HTML <input type=“file”> dans
un formulaire crée une situation particulière. Il ne s’agit plus
de transmettre une ou plusieurs valeurs scalaires au serveur
mais l’intégralité d’un fichier, lequel peut avoir une taille
important et un type quelconque. Ce fichier doit évidement
être présent sur l’ordinateur du visiteur.
 Pour la sécurité de votre site, vous utilisez l’attribut accept
de l’élément <input>. Cet attribut peut prendre un grand
nombre de valeurs, correspondant aux type MIME des
fichier acceptés, par exemple “image/gif” ou “text/html”. Un
fichier d’un type différent est rejeté.
 L’element <form> doit avoir l’attribut method à la valeur
post et l’attribut enctype à la valeur multipart/form-data.

Said Najah 93
Les Formulaires

 Précaution supplémentaire, vous pouvez limiter la taille des


fichiers à télécharger en ajoutant au formulaire un cacher
MAX_FILE_SIZE, dont l’attribut value contienne la taille
maximale admise en octet. Cette valeur est récupérée dans
la variable $_post[“MAX_FILE_SIZE”] lorsque le champ
caché est défini par le code suivant:
 <input type=“hidden” name =“MAX_FILE_SIZE” Value
=“100000” />

Said Najah 94
Les Formulaires

 Transfert de plusieurs fichiers


 Il est possible de proposer à l’utilisateur de transférer
plusieurs fichiers simultanément pour lui éviter de
recommencer plusieurs fois la même opération à partir de
l’exemple précédent. Vous devez en ce cas faire en sorte que
l’éléments <input type=“file” ….> Soient tous écrits de la
manière suivant:
<input type=“file” name= “file[ ]” accept= “image/gif” size
=“50” />

Said Najah 95
Les Formulaires

 Gérer les boutons d’envoi multiples


 L’utilisation de plusieurs boutons submit dans un même
formulaire permet de déclencher des actions différentes en
fonction du bouton activé par l’utilisateur. Il est nécessaire
pour cela que les boutons aient le même nom et que la
sélection de l’action se fasse en fonction de la valeur
associée à chaque bouton via l’attribut value.

Said Najah 96
Les Fonctions
 Les fonctions natives de PHP
PHP propose en standard une multitude de fonctions natives écrites en
langage C, ainsi que quantité de modules d’extension qu’il est possible
d’associer à la distribution standard.
 Avant d’utiliser un module, il convient de vérifier qu’il est bien installé
sur le serveur de votre hébergeur.
 Pour vérifier la disponibilité d’un module, vous disposez de la fonction
array get_loaded_extensions( ); qui retourne un tableau contenant tous
les modules d’extension installé sur le serveur.
 Pour chaque module, il est possible de lister l’ensemble des fonctions
disponibles. Cela n’est pas utile, car même si une fonction fait partie
d’un module, votre hébergeur peut très bien l’avoir désactivée,
notamment pour des raisons de sécurité ou d’abus d’occupation du
serveur. La fonction mail( ) d’envoi de courrier, par exemple, est
souvent désactivée chez l’hébergeurs, en particulier les gratuits.
 Pour obtenir la liste des fonctions d’un module:
array get_extensions_funcs(“nom_module”);

Said Najah 97
Les Fonctions
 Créer ses propres fonctions:
 Malgré les quelques deux mille fonctions contenues dans l’ensemble des
modules existants à ce jour, il arrive, de devoir effectuer plusieurs fois le
même traitement dans un script. Il est possible de créer des fonctions
personnalisées, qui permettent tout à la fois de gagner du temps de saisie et
d’alléger votre script en ne répétant pas plusieurs fois un même code.
ces fonctions personnalisées doivent être écrites dans un ou des scripts
séparés, qu’il vous suffit ensuite d’inclure dans le nouveaux scripts au moyen
d’une instruction include( ) ou require( ).
 Définir une fonction

Les procédure de déclaration d’une fonction doit suivre les regèles de


syntaxe suivantes:
 function mafonction($x,$y,…)

{
// code de définition de la fonction
return $var;
}
Said Najah 98
Les Fonctions
 le nom de la fonction suit les mêmes règles que les noms de variables :
 le nom doit commencer par une lettre

 un nom de fonction peut comporter des lettres, des chiffres et les


caractères _ et & (les espaces ne sont pas autorisés!)
 le nom de la fonction, comme celui des variables est sensible à la casse.

 Les arguments sont facultatifs, mais s'il n'y a pas d'arguments, les
parenthèses doivent rester présentes
 Appel de fonction
Pour exécuter une fonction, il suffit de faire appel à elle en écrivant son nom
(une fois de plus en respectant la casse) suivie d'une parenthèse ouverte
(éventuellement des arguments) puis d'une parenthèse fermée :
Nom_De_La_Fonction( );

Said Najah 99
Les Fonctions
 Remarques:
 le point virgule signifie la fin d'une instruction et permet à l'interpréteur de
distinguer les différents blocs d'instructions
 si jamais vous avez défini des arguments dans la déclaration de la
fonction, il faudra veiller à les inclure lors de l'appel de la fonction (le
même nombre d'arguments séparés par des virgules)
Nom_De_La_Fonction(argument1, argument2);
 Passage de paramètres par référence
 Le passage de paramètres par référence n'est pas compliqué en soit.
Exemple :
<?php
     function ajouter_cinq($nombre)
     {
           $nombre += 5; //équivalent de $nombre = $nombre + 5
           return $nombre;
     }
     $mon_entier = 15;
     echo ajouter_cinq($mon_entier); //affichera 20
     echo $mon_entier; //affichera 15
?>

Said Najah 100


Les Fonctions

le passage par référence :


 <?php
     function ajouter_cinq($nombre)
     {
           $nombre += 5; //équivalent de $nombre = $nombre + 5
           return $nombre;
     }
     $mon_entier = 15;
     echo ajouter_cinq(&$mon_entier); //affichera 20
     echo $mon_entier; //affichera 20
?>
 L'avantage de ce type d'opération est que vous travaillez directement sur la
variable d'origine, il n'y a pas de recopie et donc les performances peuvent
être meilleures.

Said Najah 101


Les Fonctions

La portée d'une variable dépend du contexte dans lequel la


variable est définie. Pour la majorité des variables, la portée
concerne la totalité d'un script PHP. Mais, lorsque vous
définissez une fonction, la portée d'une variable définie dans
cette fonction est locale à la fonction. Par exemple :
<?php $a = 1; include 'b.inc'; ?>

Ici,la variable $a sera accessible dans le script inclus b.inc.


Cependant, dans les fonctions définies par l'utilisateur, une
nouvelle définition de cette variable sera donnée, limitée à la
fonction. Toute variable utilisée dans une fonction est, par
définition, locale. Par exemple :

Said Najah 102


Les Fonctions
Exemple :
<?php $a = 1; /* portée globale */
function test(){ echo $a; /* portée locale */ }
test();
?>
Le script n'affichera rien à l'écran car l'instruction echo() utilise
la variable locale $a, et celle-ci n'a pas été assignée
préalablement dans la fonction.
Vous pouvez noter que ce concept diffère un petit peu du
langage C dans lequel une variable globale est automatiquement
accessible dans les fonctions, à moins d'être redéfinie
localement dans la fonction. Cela peut poser des problèmes si
vous redéfinissez des variables globales localement.
En PHP, une variable globale doit être déclarée à l'intérieur de
chaque fonction afin de pouvoir être utilisée dans cette fonction.

Said Najah 103


Les Fonctions
 Le mot clé global
Commençons par un exemple avec global :
 Exemple #2 Exemple avec global
<?php
$a = 1; $b = 2;
function somme() {   global $a, $b;
     $b = $a + $b; }
somme();
echo $b; ?>

 Le script ci-dessus va afficher la valeur 3. En déclarant globales les


variables
$a et $b locales de la fonction somme(), toutes les références à ces
variables
concerneront les variables globales. Il n'y a aucune limite au nombre de
variables globales qui peuvent être manipulées par une fonction.

Said Najah 104


Les Fonctions

 Une deuxième méthode pour accéder aux variables globales est


d'utiliser le
tableau associatif pré-défini $GLOBALS. Le précédent exemple
peut être
réécrit de la manière suivante
<?php
$a = 1;
$b = 2;
function somme() {
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; }
somme();
echo $b;
?>
Said Najah 105
Les Fonctions
 On peut donner une valeur par défaut aux arguments lors de la déclaration de
la fonction. Ainsi, si un argument est « oublié » lors de l’appel de la fonction,
cette dernière lui donnera automatiquement une valeur par défaut décidée à
l’avance par le programmeur.
Exemple :
function Set_Color($color=‘’black’’)
{
global $car;
$car[‘’color’’] = $color;
}
 Quelques exemples :
function bonjour() { // passage d’aucun paramètre
echo ‘’Bonjour’’;}

function GetColor() { // retour d’une variable de type chaîne


return ‘’black’’;}

function afficher($str1, $str2) {// passage de deux paramètres


echo ‘’$str1, $str2’’;} 106
Said Najah
Les Fonctions
 Une fonction peut être définie après son appel
 Exemple :

function foo() { // définition de la fonction foo


echo ‘’Foo…’’;}
foo(); // appel de la fonction foo définie plus haut
bar(); // appel de la fonction bar pas encore définie
function bar() { // définition de la fonction bar
echo ‘’bar!<br />’’;
}

 Cet exemple affichera : Foo…bar!.

Said Najah 107


Les Fonctions

 Grâce à une petite astuce, il est possible de faire


retourner plusieurs valeurs d’une fonction. En
retournant un tableau ayant pour éléments les variables à
retourner. Dans l’appel de la fonction, il faudra alors
utiliser la procédure list() qui prend en paramètre les
variables à qui ont doit affecter les valeurs retournées.
On affecte à list() le retour de la fonction.

Said Najah 108


Les Fonctions

 Exemple :
function trigo($nbr) {
return array(sin($nbr), cos($nbr), tan($nbr));// retour d’un tableau
}
$r = 12;
list($a, $b, $c) = trigo($r); /* affectation aux variables $a,$b et $c des éléments
du tableau retourné par la fonction trigo */
echo ‘’sin($r)=$a, cos($r)=$b, tan($r)=$c’’; // affichage des variables
 Cet exemple affichera ceci :

sin(12)=-0,5365729180, cos(12)=0,8438539587, tan(12)=-0,6358599286

Said Najah 109


Les Fonctions

 Il est possible de créer dynamiquement des fonctions. Pour les déclarer, on affecte
à une variable chaîne de caractères le nom de de la fonction à dupliquer. Puis on
passe en argument à cette variable les paramètres normaux de la fonction de
départ.

 Exemple :
function divers($toto) {
echo $toto;
}
$mafonction = ‘’divers’’;
$mafonction(‘’bonjour !’’); // affiche ‘bonjour !’ par appel de divers()

Said Najah 110


Les Fonctions
 func_num_args() : Retourne le nombre d'arguments passés à la fonction en
cours.
 func_get_arg($nbr) : Retourne un élément de la liste des arguments envoyés
à une fonction. Elle ne doit être utilisée qu’au sein d’une fonction. L’indice
$nbr commence à zéro et renvoie le $nbr-1 ème paramètre.
 Exemple :
function foobar() {
$numargs = func_num_args();
echo ‘’Nombre d'arguments: $numargs<br />’’;
if ($numargs >= 2) {
echo ‘’Le 2ème param : ‘’.func_get_arg(1).‘’<br />’’;
}}
foobar(‘’foo’’, ‘bar’, 10.5);

 Nombre d'arguments: 3
Le 2ème param : ‘bar’

Said Najah 111


Les Fonctions
 func_get_args() : Retourne les arguments de la fonction en cours sous
la forme d’un tableau.
 Exemple :

function somme() {
$params = func_get_args();
$nbr = 0;
foreach($params as $elem) {
$nbr += $elem;
}
return $nbr;
}
echo somme(50,20,3,98,50);
 Cette fonction somme retourne la somme de tous ses arguments quel
qu’en soit le nombre. 221

Said Najah 112


Les Fonctions

 function_exists($str) : Retourne TRUE si la fonction $str a déjà été


définie.

 get_defined_functions() : Retourne un tableau associatif contenant la


liste de toutes les fonctions définies. A la clé ’’internal’’ est associé un
tableau ayant pour éléments les noms des fonctions internes à PHP. A la
clé ‘’user’’, ce sont les fonctions utilisateurs.

 register_shutdown_function($str) : Enregistre la fonction $str pour


exécution à l'extinction du script.

Said Najah 113


Les Fichiers
Création, ouverture et fermeture d’un fichier
avant de réaliser des opérations de lecture ou d’écriture sur un fichier, vous
devez l’ouvrir explicitement.
La syntaxe de la fonction:
resource fopen(string $nom, string mode, [boolean path] )
le premier paramètre est une chaine de caractère indiquant le nom du fichier,
ce nom peut être sous une forme réduite (le nom du fichier seul) le deuxième
paramètre détermine le mode d’accès au fichier. Ce mode est codée dans une
chaine et peut prendre les valeurs suivant:
“r ”: Le fichier est ouvert en lecture seule, et la lecture commence au début
du fichier
“r+”: Le fichier est ouvert en lecture et en écriture, et ces opérations
commencent au début du fichier.
“w” : Le fichier est ouvert en écriture seule, et l’écriture commence au début
du fichier
“w+”: Le fichier est ouvert en lecture et en écriture, et ces opérations
commencent au début du fichier

Said Najah 114


Les Fichiers
“a ”: le fichier est ouvert en écriture seule, et les données sont écrites en fin
de fichier, a la suit de celles qui existent déjà ou au début s’il est vide. Si le
fichier n’existe pas, il est créé.
“a+ ”: le fichier est ouvert en lecture et écriture, et les données sont écrites en
fin de fichier, a la suit de celles qui existent déjà ou au début s’il est vide. Si
le fichier n’existe pas, il est créé

Remarque:
• La fonction fopen() retourne un identifiant de fichier de type
ressource Qui doit être utilisé comme premier paramètre de al plupart
des fonctions de manipulation des fichiers.
• Vous pouvez aussi créer un fichier temporaire sur le serveur à l’aide
de al fonction:
resource tmpfile( );

Said Najah 115


Les Fichiers
Fermeture du fichier:
Apres avoir ouvert un fichier pour y effectuer de opérations de lecture ou
d’écriture, il vous impérativement le fermer pour éviter tous les problèmes qui
pourraient résulter d’une tentative d’ouverture du même fichier de la part d’un
autre script ou du même script ouvert par une autre connexion.
L’opération de fermeture est réalisée à l’aide de la fonction suivantes:
boolean fclose($file)
Verrouillage des fichiers:
Si plusieurs utilisateurs accèdent au même fichier à partir du même script ou de
deux scripts différents et y effectuent simultanément des opérations de lecture
ou d’écriture, le fichier risque de devenir inutilisable pour chacun de d’eux.
A fin d’éviter la confusion qui pourrait en résulter, il est essentiel, avant d’écrire
ou de lire un fichier, que les scripts qui y accèdent définissent une priorité
d’accès au premier script effectuant une opération sur le fichier. Cela empêche
les autres d’y accéder et d’ya faire des modifications tant que le fichier n’est pas
fermé.
Said Najah 116
Les Fichiers
La syntaxe de la fonction flock() est la suivant:
boolean flock( resource $id, int N)
Le premier paramètre est encore l’indispensable identificateur de fichier
retourné par la fonction fopen( ). Le seconde est une constante entière qui
définit le mode de verrouillage du fichier:
 flock( resource $id, Lock_SH) bloque l’écriture dans le fichier mais
laissse le libre acces en lecture à tous les utilisateurs. La constante
LOCK_SH a la valeur 1
 flock( resource $id, Lock_EX) bloque l’écriture et la lecture dans le
fichier par un autre script.Le script en cours a donc l’exclusivité. Une
tentative d’accès simultané retourne la valeur false. La constante
LOCK_EX a la valeur 1
 flock( resource $id, Lock_UN) libère le verrou installé précédemment.
Vous ne devez surtout pas oublier d’efectuer cette action apres les
operation realisées sur le fichier. La constante LOCK_UN a la valeur 3

Said Najah 117


Les Fichiers
Ecriture dans un fichier:
Les fonctions fwrite( ) et fputs( ) ont la syntaxe suivant:
Integer fwrit(resource $id_file, string “chaine”[ ,int N])
Integer fputst(resource $id_file, string “chaine”[ ,int N])
Elles écrivent toutes le deux le texte menu dans “chaine” dans le fichier
identifié par la variable $id_file. Lorsque le paramètre N est précisé, comme ici,
seuls les N premiers caractères de la chaine sont écrits dans le fichier.

Lecture dans un fichier:


La fonction fgets( ) a pour syntaxe:
String fgets(resurce $id_file, integer nombre_octets)
Cette fonction lit le fichier depuis sont début et retourne une chaine de
caractères d’une longueur maximal égale au paramètre nombre_octets. La
lecture s’arrête quand ce nombre d’octets lu est atteint ou avant qu’il soit atteint,
si le caractère “\n” est rencontré dans le fichier.
Said Najah 118
Les Fichiers
 La manipulation de fichier se fait grâce à un identifiant de fichier.
 Quelques fonctions:

fopen($file [,$mode]) : ouverture du fichier identifié par son nom $file et dans
un mode $mode particulier, retourne un identificateur $fp de fichier ou
FALSE si échec
fopen($fp) : ouvert le fichier identifié par le $fp
fgets($fp, $length) : lit une ligne de $length caractères au maximum
fputs($fp, $str) : écrit la chaîne $str dans le fichier identifié par $fp
fgetc($fp) : lit un caractère
feof($fp) : teste la fin du fichier
file_exists($file) : indique si le fichier $file existe
filesize($file) : retourne la taille du fichier $file
filetype($file) : retourne le type du fichier $file
unlink($file) : détruit le fichier $file
copy($source, $dest) : copie le fichier $source vers $dest
readfile($file) : affiche le fichier $file
rename($old, $new) : renomme le fichier $old en $new
Said Najah 119
Dates et calendriers
 Les fonctions de dates et heures sont incontournables sur Internet et sont
indispensables pour la conversion en français des dates fournies par la
base de données MySQL qui les code au format anglophone (YYYY-DD-
MM hh:mm:ss).
Quelques fonctions :

date(‘’$format’’) : retourne une chaîne de caractères contenant la date


et/ou l’heure locale au format spécifié
getdate() : retourne un tableau associatif contenant la date et l’heure
checkdate($month, $day, $year) : vérifie la validité d’une date
mktime ($hour, $minute, $second, $month,$day, $year) :
retourne le timestamp UNIX correspondant aux arguments fournis c’est-à
dire le nombre de secondes entre le début de l'époque UNIX (1er Janvier
1970) et le temps spécifié
time() : retourne le timestamp UNIX de l’heure locale
Said Najah 120
Dates et calendriers
 Exemple 1 :
echo date(''Y-m-d H:i:s'');
/* affiche la date au format MySQL : ‘2002-03-31 22:30:29’ */

 Exemple 2 :
if(checkdate(12, 31,2001))
echo ‘’La St Sylvestre existe même chez les anglais !!!’’;

 Exemple 3 :
$aujourdhui = getdate();
$mois = $aujourdhui['mon'];
$jour = $aujourdhui['mday'];
$annee = $aujourdhui['year'];
echo ''$jour/$mois/$annee''; // affiche ‘31/3/2002’
Said Najah 121
Dates et calendriers

 Les formats pour date :


d Jour du mois sur deux chiffres [01..31]
j Jour du mois sans les zéros initiaux
l Jour de la semaine textuel en version longue et en anglais
D Jour de la semaine textuel en trois lettres et en anglais
w Jour de la semaine numérique [0..6] (0: dimanche)
z Jour de l'année [0..365]
m Mois de l'année sur deux chiffres [01..12]
n Mois sans les zéros initiaux
F Mois textuel en version longue et en anglais
M Mois textuel en trois lettres

Said Najah 122


Dates et calendriers

Y Année sur 4 chiffres


y Année sur 2 chiffres
h Heure au format 12h [01..12]
g Heure au format 12h sans les zéros initiaux
H Heure au format 24h [00..23]
G Heure au format 24h sans les zéros initiaux
i Minutes [00..59]
s Secondes [00.59]
a am ou pm
A AM ou PM
L Booléen pour savoir si l'année est bisextile (1) ou pas (0)
S Suffixe ordinal anglais d'un nombre (ex: nd pour 2)
t Nombre de jour dans le mois donné [28..31]
U Secondes depuis une époque
Z Décalage horaire en secondes [-43200..43200]
Said Najah 123
Dates et calendriers

 Les clés du tableau associatif retourné par getdate :


seconds : secondes
minutes : minutes
hours : heures
mday : jour du mois
wday : jour de la semaine, numérique
mon : mois de l'année, numérique
year : année, numérique
yday : jour de l'année, numérique
weekday : jour de la semaine, textuel complet en anglais
month : mois, textuel complet en anglais

Said Najah 124


Les Cookies

 Les cookies sont de petite fichiers qui peuvent être écrits par un script
PHP ou par un autres langages, tel JavaScript, sur l’ordinateur du
visiteur. À l'exception du piratage, c’est le seul cas ou un site peut
intervenir sur le disque dur d’un utilisateur.
 Par défaut, Internet Explorer écrit les cookies sans autorisation de
l’utilisateur, tandis que Netscape demande l’accord du visiteur pour
chaque cookie à écrire.
 Les cookies font l’objet de limites d’emploi. Un site donné ne peut
écrire que 20 cookies sur un même poste client. Chacun d’eux ne doit
pas dépasser 4 Ko, ce qui empêche le stockage d’information de taille
important.
 Un cookie n’est accessible que par le site qui l’écrit.

Said Najah 125


Les Cookies

 Ecriture des cookies


 Pour écrire un cookie, vous utilisez la fonction setcookie( ), dont la syntaxe est
la suivante:
 boolean setcookie( string nom_cookie, [string valeur, integer datefin, string
chemin, string domaine, integer securite] )
Les paramètres de la fonction setcookie( ) sont les suivants:
 nom_cookie: est une chaîne définissant le nom du cookie. Ce nom obéissant aux
même règles de nommage que les variables, il faut éviter les caractères spéciaux.
Ce nom set à identifier le cookie pour les opérations de lecture de leur contenu.
 valeur: contient la valeur associe a cookie, il s’agit d’une chaine de caractère,
meme pour un nombre (utilisation un transtypage pour effectuer des calculs avec
cette valeur).

Said Najah 126


Les Cookies

o datefin: est un entier qui permet de stocker un timestamp UNIX exprimé en


seconde définissant la date à partir de laquelle le cookie n’est plus utilisable.
si ce paramètre est omis, le cookie n’est valable que pendant le temps de
connexion du visiteur sur le site.
o Chemin: définit le chemin d’accès aux dossiers qui contiennent les scripts
autorisés à accéder au cookie. Les scripts contenus dans les sous-dossiers
éventuels de ce dossier ont également accès au cookie.
o Domaine: définit le nom entier du domaine à partir duquel vous
pouvez accéder au cookie.
o Securite: est une valeur de type boolean qui vaut TRUE si le cookie doit être
transmis par une connexion( avec un adresse URL) sécurisée et FLASE dans
le cas contraire, qui la valeur par défaut.

Said Najah 127


Les Cookies

 Exemple :
<?php
// cookie valable uniquement pour la session
setcookie(“Prénom”, “saad”) ;
// cookie valable 24 heures
setcookie(“Nom”, “SD”, time( )+86400) ;
// ce cookie utilise tous les paramètres
setcookie(“CB”, “5612 1234 5678 1234”, time( )+86400,
“/client/paiement/”, “www.funphp.com”,TRUE )

Said Najah 128


Les Cookies

 Pour effacer le contenu d’un cookie, il suffit d’utiliser la fonction


setcookie( ) en n’utilisant que le paramètre nom_cookie sans lui affecter
de valeur.
Exemple : setcookie(“nom”)
Efface la valeur précédente donnée au cookie nommé “nom”.
 Pour faire disparaître un cookie, vous devez définir une date de validité
antérieure à la date actuelle en conservant la valeur utilisée lors da sa
définition.
Exemple : setcookie(“CB”, “5612 1234 5678 1234”,time( )-3600 ).
rend le cookie inaccessible mais seulement lors de chargement de la page
qui contient ce code

Said Najah 129


Les Cookies

 lecture des cookies


 Les données stockées dans les cookies ne sont récupérable dans la page
qui les a créés que lors d’un rechargement de cette page. Les autre pages
de site ont un accès immédiat aux cookies des leur chargement. Cela
procure un moyen de passage d’information d’une page à l’autre.
 il existe deux manières de récupérer la ou les valeurs d’un cookie, dans
une variable de même nom que celui attribué au cookie ou dans le tableau
associatif superglobal $_COOKIE.
 Avec le tableau associatif superglobal $_COOKIE, vous utilisez comme
clé de l’élément recherché le nom du cookie.
 Dans le cookie simple suivant:
setcookie(“nom”, “GAB”, time()+1000)
vous récupérez l’information dans la variable $_COOKIE[“nom”].

Said Najah 130


Les Cookies
Pour le cookie suivant sous forme de tableau suivant:
<?php
setcookie(“achat[premier]”, “livre”, time()+3600);
setcookie(“achat[deuxieme]”, “CD”, time()+3600);
setcookie(“achat[troisieme]”, “vidèo”, time()+3600);
?>
Vous lisez les données dans le tableau $_COOKIE[“achat”].il s’agit d’un tableau à
deux dimensions, que vous pouvez parcourir à l’aide d’une boucle foreach :
Foreach($_COOKIE[“achat”] as $cle=>$valeur)
{
echo “Le cookie nommé : $cle contient la valeur: $valeur <br/>”;
}
Apres avoir rechargé la page dans le navigateur, vous obtenez l’affichage suivant:
Le cookie nommé : premier contient la valeur: livre
Le cookie nommé : deuxième contient la valeur: CD
Le cookie nommé : troisième contient la valeur: vidéo

Said Najah 131


Les Sessions
 Les sessions
 Le protocole HTTP ne permet pas de conserver des informations provenant
d’une page pour les utiliser dans une autre de même site.
 Si, à partir de la page d’accueil, vous cliquez sur un lien vers une autre page
de même site, rien ne lui permet de savoir que ces deux requêtes émanent du
même poste client.
 L’introduction du support des sessions dans la version 4 de PHP permet de
conserver ces informations de façon simple et de les réutiliser dans toutes les
pages d’un site pour un même visiteur. Aucun autre visiteur n’a accès à ces
données.
 L’utilisation du mécanisme des sessions obéit aux étapes générales suivantes:

Said Najah 132


Les Sessions
1- Ouverture d’une session dans chaque page ayant accès aux données à l’aide
de la fonction session_start( ) de syntaxe:
boolean session_start( ) . Dans la plupart des cas, c’est-à-dire quand les
sessions utilisent des cookies, cet appel est la première instruction du script.
2 – Chaque utilisateur se voit attribuer un identifiant de session, qui est une
suite de caractère aléatoire. Lié à la session en cours, et donc différent lors
d’une autre connexion, cet identifiant est transmis d’une page à une autre de
deux manières différentes, soit en étant écrit dans un cookie sur le poste client,
soit en étant ajouté à l’URL de la page cible d’un lien.
3- définition des variables de session, c’est-à-dire des valeurs qui seront
accessibles dans toutes les pages du site qui utilisent la fonction session_start().
Cela se réalise en utilisant le tableau superglobal $_SESSION, dont les clés
sont les noms des variables.

Said Najah 133


Les Sessions

4- Lecture des variables de session dans chaque page en fonction des besoins
à l’aide du tableau superglobal $_SESSION
5- Fermeture de la session après destruction éventuelle des variables de
session.

Remarque:
À la différance des cookies, les noms et valeurs des variables sont stockés
sur le serveur et non sur le poste client. Les variables sont généralement
stockées dans le dossier /tmp du serveur.

Said Najah 134


Les Sessions
 Session avec cookies
 La manière la plus simple de transmettre l’identifiant de session est
d’utiliser un cookie.
 Il faut pour cela que la directive session.use_cookies du fichier php.ini ait la
valeur on et plus fondamentalement que le poste client accepte les cookies.
 Vous n’avez pas à coder vous-même dans le script l’écriture du cookie,
PHP se chargeant de l’envoyer immédiatement quand vous appelez la
fonction session_start( ) pour la premier fois.

 Remarque
Si la directive session.auto_start a la valeur on, vous n’avez même pas à
utiliser la fonction session_start(), le serveur s’en chargeant pour toutes les
pages du site. Cette directive est toutefois rarement activée.

Said Najah 135


E-mail
La fonction mail( )
La premier chose à faire est bien entendu de vous assurer auprès de votre
hébergeur que vous disposez de la fonction mail( ).
La fonction de base d’envoi d’e-mail se nomme mail( ). Sa syntaxe est la
suivante:
boolean mail( $dest, $objet, $texte, [$entete])
Les paramètres de la fonction mail( ) sont les suivants:
$dest : est une chaîne contenant l’adresse e-mail du destinataire. Pour envoyer
plusieurs adresse, il faut séparer chacune d’elles par une virgule.
$objet : est une chaîne donnant le texte qui apparaît dans la colonne objet du
logiciel de courrier de destinataire.
$texte : est une chaine donnant le contenu réel du message, qui peut être au
format texte ou au format HTML
$entete : est une chaine contenant les en-têtes nécessaires à l’envoi d’e-mails,
lorsque ces derniers ne sont pas au format texte. Chaque en-tête se termine par
la séquence “\n” sur un serveur Linux et “\r \n” sous windows
Said Najah 136

Vous aimerez peut-être aussi