1. LST INFO 1
PHP Hypertext Preprocessor
LST Informatique
FST 2016-2017
Mohamed OUZARF
Techniques du web
2. LST INFO 2
Modèle
Client
Base de
données
MySQL
Serveur
Script
PHP
internet
requête
réponse
Document
Html
appel de la page
extraction
de données exécution
3. LST INFO 3
Le navigateur demande une page web auprès du serveur.
Le serveur traite le fichier demandé (qui peut contenir du code
PHP), il le traite, puis l’envoie le résultat au navigateur.
Le navigateur reçoit une page HTML. Il interprète le code HTML,
CSS, javascript, … et affiche la page.
Il arrive souvent que le serveur web ait besoin d’une autre
application (par exemple un SGBD).
Modèle
4. LST INFO 4
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.
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 PHP Hypertext Preprocessor).
5. 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 PHP sont au format php.
Le code source php est directement insérer dans le fichier html grâce
au conteneur :
<?php … ?>
Exemple:
<html>
<body>
<?php
echo ’’Bonjour’’;
?>
</body>
</html>
6. LST INFO 6
Exemple de script
<html>
<body>
<h1>Mon premier script</h1>
<?php echo “Bonjourn“ ; ?>
</body>
</html>
Exemple de script, code source (côté serveur) :
Résultat affiché par le navigateur :
7. LST INFO 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.
8. LST INFO 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 script.
L’initialisation des variables n’est pas non plus obligatoire.
Les identificateurs de variable sont précédés du symbole « $ »
(dollars). Exemple : $toto.
9. LST INFO 9
Les noms des variables sont sensibles à la casse
(majuscules et minuscules). $mavar et $Mavar ne
désignent pas la même variable.
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).
Variables, constantes et types
10. LST INFO 10
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.
Initialiser une variable : affecter une valeur initiale
qui pourra éventuellement être modifiée par le
programme. Le symbole d'affectation est le signe =.
$i_i = 4 ; // initialisation par un entier
$s_ecole = "ENITA Bx"; // initialisation par une chaîne
$s_w = "1.2 euros"; // initialisation par une chaîne
$d_nb=12345678.99; // initialisation par un réel
$t_tb[ ] = 100; // initialisation du 1er élément du
tableau
Variables, constantes et types
11. LST INFO 11
Dans php, vous pouvez affecter une aussi par référence.
-L’affectation par référence, au moyen de l’operateur =,
l’opérande de droite est une variable qui doit être précédée du
caractère &.
Variables, constantes et types
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*/
12. LST INFO 12
Quelques fonctions utiles pour les variables:
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()…
Variables, constantes et types
14. LST INFO 14
Lors de l’envoi de données d’un formulaire vers le serveur, le
script 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($var);
renvoie TRUE si la variable var est définie, FALSE sinon
- La fonction empty(), dont la syntaxe est la suivante:
Boolean empty($var );
retourne la valeur TRUE si la variable $var n’est pas initialisée à
la valeur 0 ou NULL ou la chaine “0” et la valeur FALSE si elle a
une valeur quelconque.
Contrôle d’état d’une variable
15. 15
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.
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)
Variables, constantes et types
16. LST INFO 16
Opérateurs arithmétiques :
Variables, constantes et types
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
17. LST INFO 17
Opérateur Description
= = Test l’égalité de deux valeurs
$a=345; $b=“345” ou $b=“345 elements”
$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”; $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)
Les opérateurs de comparaison
18. LST INFO 18
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.
Les operateurs logiques
20. LST INFO 20
Il existe en php un grand nombre de constantes prédéfinis, que vous
pouvez notamment utiliser dans 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.
Les constantes ne portent pas le symbole $ (dollars) en début
d’identificateur et ne sont pas modifiables.
Variables, constantes et types
21. Les constantes sont manipulés à l’aide de la syntaxe define:
define (‘’constante’’, ‘’valeur’’);
Exemple 1 :
define(‘’author’’,’’Foobar’’);
echo author; // affiche ‘Foobar’
Exemple 2 :
define(“MY_YEAR”,1980);
echo MY_YEAR; // affiche 1980
Variables, constantes et types
Exemple 3 :
Define ("font", "<FONT size=4 color=#FF0000><B>")
defined (”author") ; // renvoi 1
defined (”my_date") ; // renvoi 0
Remarque : test d’existense de constante:
22. LST INFO 22
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 :
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
Variables, constantes et types
23. Les Structures de contrôle
Structures conditionnelles
(même syntaxe qu’en langage C) :
if( ... ) {
…
} elseif {
…
} else {
…
}
<!DOCTYPE html>
<html>
<body>
<?php
$t = date("H");
echo "<p>The hour (of the server) is " . $t;
echo ", and will give the following
message:</p>";
if ($t < "10") {
echo "Have a good morning!";
} elseif ($t < "20") {
echo "Have a good day!";
} else {
echo "Have a good night!";
}
?>
</body>
</html>
24. <?php
$color = "red";
switch ($color) {
case "red":
echo "Your favorite color is red!";
break;
case "blue":
echo "Your favorite color is blue!";
break;
case "green":
echo "Your favorite color is green!";
break;
default:
echo "Your favorite color is neither
red, blue, nor green!";
}
?>
switch-case
Les Structures de contrôle
switch( … ) {
case … : { … }
break;
…
default : { … }
}
25. Les Structures de contrôle
Structures de boucle (même syntaxe qu’en langage C) :
for( … ; … ; … ) {
…
}
while( … ) {
…
}
do {
…
} while( … );
26. Les Structures de contrôle
--------------------------------- FOREACH----------------------------------
foreach($tableau as $valeur)
{
// bloc utilisant la valeur de l’élément courant
}
foreach ($tableau as $key => $value){
//commandes
}
La structure de langage foreach fournit une façon simple de parcourir des
tableaux. foreach ne fonctionne que pour les tableaux et les objets,
27. Structures de contrôle (FOR)
Structures de boucle (même syntaxe
qu’en langage C) :
<?php
for ($x=0; $x<=50; $x=$x+5) {
echo '<p>variable $x is now = ' . $x .
'</p>';
}
?>
Sortie:
variable $x is now = 0
variable $x is now = 5
.
.
variable $x is now = 40
variable $x is now = 45
variable $x is now = 50
html>
<head>
<title>Titres</title>
</head>
<body>
<?php
for ($ x=1; $x<=6; $x=$x+1) {
echo "<h" . $x . ">Heading levels</h" . $x .
">";
}
?>
</body>
</html>
Sortie:
Heading levels
Heading levels
Heading levels
Heading levels
Heading levels
Heading levels
28. Structures de contrôle (While et Do-while)
Structures de boucle (même syntaxe
qu’en langage C)
<?php
$x = 1;
while ($x <= 50) {
echo "<p>This text is repeated 50
times</p>"; $x = $x + 1;
}
?>
Sortie:
This text is repeated 50 times
This text is repeated 50 times
.
.
This text is repeated 50 times
This text is repeated 50 times
This text is repeated 50 times
<?php
$i = 1;
do
{
echo $i . '<br />';
$i++;
}while( $i < 5 );
?>
Sortie:
1
2
3
La différence entre les deux réside dans le fait que dans le cas de la boucle while, la condition est
examinée avant la boucle tandis que pour la boucle do-while elle est éxaminée à la fin.
29. LST INFO 29
Mathématiques
Le module de base de PHP offre un grand nombre de fonctions
mathématiques utiles..
abs($x) : valeur absolue
ceil($x) : retourne l’entier n le plus proche à $x tel que $x <=n
floor($x) : la partie entière de $x .
pow($x,$y) : x à la puissance 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)
30. 30
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.
Si vous utilisez les doubles quotes pour délimiter une chaîne, alors les
variables et les caractères contenus dans cette chaîne sont évalués.
Ce n’est pas le cas si vous utilisez les simples quotes.
Exemples :
<? php
$Nom=“saad”;
echo “Bonjour $Nom”; // affiche Bonjour saad, la variable $Nom
est évaluée
echo ‘Bonjour $Nom’; // affiche Bonjour $Nom , la variable $Nom
n’est pas évaluée
?>
31. LST INFO 31
Exemple : echo ‘’Hello Word !n’’;
Caractères spéciaux Description
n nouvelle ligne
r retour à la ligne
t tabulation horizontale
antislash
$ et “ caractère dollars et double quotte
Chaînes de caractères
32. LST INFO 32
Chaînes de caractères
Opérateur de concaténation de chaînes : . (point)
Exemples:
<?php
$nom = ’’saad ’’.
echo ’’Nom : ’’. $nom; // affiche Nom saad.
?>
33. LST INFO 33
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é !”
Chaînes de caractères
34. LST INFO 34
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, 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
inférieure à $ch2, un nombre positif(généralement 1) dans le cas contraire et 0
en cas d’égalité.
Chaînes de caractères
36. Fonction: création
LST INFO 36
Exemple2
<?php
// Ci-dessous, la fonction qui calcule le volume du cône: syntaxe déclaration
function VolumeCone($rayon, $hauteur)
{
// calcul du volume
$volume = $rayon * $rayon * 3.14 * $hauteur * (1/3);
return $volume; // indique la valeur à renvoyer, ici le volume
}
// utilisation de la fonction :
$volume = VolumeCone(3, 1);
echo 'Le volume d'un cône de rayon 3 et de hauteur 1 est de ' . $volume;
echo 'Le volume d'un cône de rayon 3 et de hauteur 1 est de ' . $VolumeCone(5, 2);
?>
37. LST INFO 37
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 utilisé 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, 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 seule
opération, vous disposez de la fonction array().
$tab=array( valeur0, valeur1, …, valeurN)
Les Tableaux
39. LST INFO 39
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’’ => ‘’Alami’’, ‘’Prenom’’ => ‘’Saad’’);
40. LST INFO 40
Les Tableaux
Exemple Les tableaux
associatifs:
1° méthode
2° méthode
41. LST INFO 41
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”),
);
Les Tableaux
42. Exemple
LST INFO 42
<?php
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
echo $cars[0][0].": In stock: ".$cars[0][1].", sold: ".$cars[0][2].".<br>";
echo $cars[1][0].": In stock: ".$cars[1][1].", sold: ".$cars[1][2].".<br>";
echo $cars[2][0].": In stock: ".$cars[2][1].", sold: ".$cars[2][2].".<br>";
echo $cars[3][0].": In stock: ".$cars[3][1].", sold: ".$cars[3][2].".<br>";
?>
Volvo: In stock: 22, sold: 18.
BMW: In stock: 15, sold: 13.
Saab: In stock: 5, sold: 2.
Land Rover: In stock: 17, sold: 15.
44. LST INFO 44
//*********************************************
// Lecture d’un tableau associatif
//*********************************************
$montab=array("France"=>"Paris","Great Britain"=>"London","Belgie"=>"Brussel");
While(list($cle, $valeur) = each($montab))
{
echo “ L’élément de clé <b>$cle</b> a la valeur <b>$valeur</b> <br>";
}
?>
Les Tableaux
Les deux premiers éléments sont : Paris et London
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
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
45. LST INFO 45
Exemple
Passer en revue un tableau avec each()
<?php
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (list($key, $val) = each($fruit)) {
echo "$key => $valn";
}
?>
a => apple
b => banana
c => cranberry
Retourne la paire clé/valeur courante du tableau array
46. LST INFO 46
est très efficace pour parcourir les tableaux associatifs mais fonctionne
également pour les tableaux indicé.
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;
}
Les Tableaux
L’instruction foreach ( ):
47. LST INFO 47
Les Tableaux
Exemple de l’instruction foreach ( ):
48. LST INFO 48
Les Tableaux
Exemple de l’instruction foreach ( ):
49. LST INFO 49
Les Tableaux
Quelques fonctions:
count($tab), sizeof($tab) : 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 les éléments du tableau
rsort($tab) : trie inverse les éléments du tableau
implode($str,$tab): 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
50. LST INFO 50
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
51. LST INFO 51
Rechercher dans un tableau
array_key_exists : pour vérifier si une clé existe dans l'array ;
in_array : pour vérifier si une valeur existe dans l'array ;
array_search : pour récupérer la clé d'une valeur dans l'array.
52. LST INFO 52
<?php
$coordonnees = array (
'prenom' => 'François',
'nom' => 'Dupont',
'adresse' => '3 Rue du Paradis',
'ville' => 'Marseille');
if (array_key_exists('nom', $coordonnees))
{
echo 'La clé "nom" se trouve dans les coordonnées !';
}
if (array_key_exists('pays', $coordonnees))
{
echo 'La clé "pays" se trouve dans les coordonnées !';
}
?>
array_key_exists
53. LST INFO 53
Vérifier si une valeur existe dans l'array : in_array
<?php
$fruits = array ('Banane', 'Pomme', 'Poire', 'Cerise', 'Fraise',
'Framboise');
if (in_array('Myrtille', $fruits))
{
echo 'La valeur "Myrtille" se trouve dans les fruits !';
}
if (in_array('Cerise', $fruits))
{
echo 'La valeur "Cerise" se trouve dans les fruits !';
}
?>
54. LST INFO 54
Récupérer la clé d'une valeur dans l'array : array_search
<?php
$fruits = array ('Banane', 'Pomme', 'Poire', 'Cerise', 'Fraise',
'Framboise');
$position = array_search('Fraise', $fruits);
echo '"Fraise" se trouve en position ' . $position . '<br />';
$position = array_search('Banane', $fruits);
echo '"Banane" se trouve en position ' . $position;
?>
55. LST INFO 55
Créer un lien avec des paramètres
nous pouvons créer des liens en HTML qui transmettent des
paramètres d'une page vers une autre.
Soit: deux fichiers sur votre site :
index.php (l'accueil) ;
bonjour.php.
Ce lien appelle la page bonjour.php et lui envoie deux paramètres :
nom : Dupont ;
prenom : Jean.
Communication avec PHP
56. LST INFO 56
Envoyer des paramètres dans l'URL
Le point d'interrogation sépare le nom de la page PHP des paramètres.
Ensuite, ces derniers s'enchaînent selon la forme: nom=valeur
et sont séparés les uns des autres par le symbole &.
Communication avec PHP
57. LST INFO 57
Récupérer les paramètres en PHP
Nom Valeur
$_GET['nom’] Dupont
$_GET['prenom’] Jean
la page bonjour.php va automatiquement créer un array au nom :
$_GET. Il s'agit d'un array associatif dont les clés correspondent aux
noms des paramètres envoyés en URL.
Communication avec PHP
59. LST INFO 59
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 site dynamique
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, 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.
Les Formulaires
60. LST INFO 60
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.
Les Formulaires
61. LST INFO 61
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 super-globaux 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
Les Formulaires
62. LST INFO 62
Cas de la méthode POST
<html>
<head>
<title>formulaire traité par php</title>
</head>
<body>
<form action=“form.php ” method="post" >
<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="effacer">
<input type="submit" value="envoyer">
</fieldset>
</form>
Les Formulaires
formulaire.php
64. Cas de la méthode GET:
Avec la méthode GET vous récupérez les données du formulaire dans les
variables $_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.
Les Formulaires
65. LST INFO 65
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.
Les Formulaires
66. <form action="checkbox.php">
<input type="hidden" name="envoi" value="yes">
<input type="text" name="voiture"><br>
<input type="checkbox" name="options[]" value="Injection au
méthane"> Injection au méthane<br>
<input type="checkbox" name="options[]" value="Trois roues de
secours"> Trois roues de secours<br>
<input type="checkbox" name="options[]" value="Miroir de courtoisie
dans le coffre"> Miroir de courtoisie dans le coffre<br>
<input type="checkbox" name="options[]" value="Ventilation des rotules
(côté conducteur)"> Ventilation des rotules côtés conducteur)<br>
1<input type="checkbox" name="options[]" value="Kit James-Bond
"> Kit James-Bond <br>
<input type="submit">
</form>
67. <?php
$envoi = $_GET['envoi']; //aiguilleur
$voiture = $_GET['voiture']; //Nom de la voiture
$options = $_GET['options']; //Contenu des cases à coche
if ($envoi == 'yes') {
$options_text = implode(', ',$options);
echo '<h1>L'auto de vos rêves "'.$voiture.'":</h1>';
echo '<p>options:<br><br>'.$options_text.'</p>';
}
?>
69. L’inclusion d’un élément HTML <input type=“file”> dans un
formulaire
<form action="file.php" method="post"
enctype="multipart/form-data">
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’élément <form> doit avoir l’attribut method à la valeur post et
l’attribut enctype à la valeur multipart/form-data.
Transfert de fichier vers le serveur
70. LST INFO 70
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” name=“monfichier” accept=“image/gif,
image/ipeg” size=“ 30”/>
Transfert de fichier vers le serveur
71. LST INFO 71
Transfert de fichier vers le serveur
Le formulaire doit comporter les quelques spécificités suivantes:
- utilisation de la method="post" la seule permettant le transfert de
données volumineuses
- une option enctype="multipart/form-data" indiquant un échange de
données
- un champ caché (optionnel) indiquant la taille maximale (en octets)
autorisée pour le fichier à "uploader"
- un champ de type fichier permettant entre autre à l'utilisateur de
sélectionner le fichier dans son système de fichiers.
il doit renvoyer (champ action) vers un script PHP capable de
"réceptionner" le fichier.
72. 72
<head>
<title>file</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form action="file.php" method="post" enctype="multipart/form-data">
<p>
Formulaire d'envoi de fichier :<br />
<input type="file" name="monfichier" /><br />
<input type="submit" value="Envoyer le fichier" />
</p>
</form>
Transfert de fichier vers le serveur
73. 73
<?php
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
// Testons si le fichier n'est pas trop gros
if ($_FILES['monfichier']['size'] <= 1000000)
{
// Testons si l'extension est autorisée
$infosfichier = pathinfo($_FILES['monfichier']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
if (in_array($extension_upload, $extensions_autorisees))
}
}
?>
74. LST INFO 74
PHP fourni alors de nouvelles informations dans un tableau
associatif $_FILE[ ] . Ce tableau contient les clés suivantes:
tmp_name qui contient le nom (et chemin) du fichier temporaire
sous lequel le fichier a été stocké.
name qui contient le nom qu'avait le fichier dans l'espace de
l'utilisateur
size qui contient la taille du fichier en octets
type qui contient le "MIME type" du fichier (ex: text/html, image/gif,
etc.)
Transfert de fichier vers le serveur
75. LST INFO 75
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” />
Transfert de fichier vers le serveur
79. LST INFO
79
Les Sessions
La session est un mécanisme qui permet à PHP de garder "en
mémoire" un nombre illimité de valeurs entre plusieurs requêtes
d'un même utilisateur.
Les sessions permettent de conserver des variables tant que
l'internaute reste connecté au site
Elles servent aux statistiques( visiteurs); transmettre des
variables sur toutes les pages de votre site.
-L’utilisation du mécanisme des sessions obéit aux étapes
générales suivantes:
80. LST INFO 80
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:
session_start( );
2 – Chaque utilisateur se voit attribuer un identifiant de session, lié à la session
en cours, et donc différent lors d’une autre connexion.
3- Lecture des variables de session dans chaque page en fonction des besoins
à l’aide du tableau superglobal $_SESSION
4- Fermeture de la session après destruction éventuelle des variables de
session, de synthaxe: session_destroy();
EXEMPLES ‘openclassrooms’
83. LST INFO 83
Les Cookies
Un cookie est un petit fichier qui peut être écrit par un script
PHP ou par un autres langages, tel JavaScript, et enregistré sur l’ordinateur
du visiteur.
Ce fichier contient du texte et permet de « retenir » des informations sur le
visiteur. Par exemple, vous inscrivez dans un cookie le pseudo du visiteur,
comme ça la prochaine fois qu'il viendra sur votre site, vous pourrez lire son
pseudo en allant regarder ce que son cookie contient.
Les cookies font l’objet de limites d’emploi. Un site donné ne peut écrire
beaucoup de 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 est souvent utilisé pour identifier un utilisateur.
84. LST INFO 84
Les Cookies
Ecriture des cookies
Pour écrire un cookie, on utilise la fonction setcookie( ), dont la syntaxe est la
suivante:
setcookie($cookie_name, $cookie_value, time() + $temps );
Avec : $temps = 3600*24*365
Ici temps de validité est de 1 an.
Les paramètres de la fonction setcookie( ) sont les suivants:
$cookie_name: est une chaîne définissant le nom du cookie. Ce nom obéissant aux
même règles des noms que les variables, il faut éviter les caractères spéciaux.
$cookie_value : contient la valeur associe a cookie, il s’agit d’une chaine de
caractère.
EXEMPLES ‘openclassrooms’
85. <?php
setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true);
// On écrit un cookie
setcookie('pays', 'France', time() + 365*24*3600, null, null, false, true);
// On écrit un autre cookie...
// Et SEULEMENT MAINTENANT, on peut commencer à écrire du code html
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Ma super page PHP</title>
</head>
<body>
un code PHP pour afficher de nouveau le pseudo du visiteur :
<p>
Hé ! Je me souviens de toi !<br />
Tu t'appelles <?php echo $_COOKIE['pseudo']; ?> et tu viens de <?php echo
$_COOKIE['pays']; ?> c'est bien ça ?
</p>
86. LST INFO 86
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:
$monfichier = fopen(‘ nom ‘, ‘ mode ‘)
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:
Les Fichiers
87. LST INFO 87
“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(le fichier est crée s’il n’existe pas)
“w+”: Le fichier est ouvert en lecture et en écriture, et ces opérations
commencent au début du fichier (le fichier est crée s’il n’existe pas)
“a ”: le fichier est ouvert en écriture seule, le pointeur est place en fin de
fichier. Si le fichier n’existe pas, il est créé.
“a+ ”: le fichier est ouvert en lecture et écriture, le pointeur est place en fin
de fichier. Si le fichier n’existe pas, il est créé.
Les Fichiers
88. LST INFO 88
Fermeture du fichier:
Apres avoir ouvert un fichier pour y effectuer des 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:
fclose($monfichier)
Les Fichiers
89. 89
Les Fichiers
Lire et écrire dans un fichier
Pour lire, on a deux possibilités :
lire caractère par caractère avec la fonction fgetc ;
lire ligne par ligne avec fgets.
<?php
// 1 : on ouvre le fichier
$monfichier = fopen('compteur.txt', 'r+');
// 2 : on lit la première ligne du fichier
$ligne = fgets($monfichier);
// 3 : quand on a fini de l'utiliser, on ferme le fichier
fclose($monfichier);
?>
Exemple :
$fichier = fopen("essai.txt","r");
$premier = fgetc($fichier);
echo "Premier Caractère : " . $premier;
fclose($fichier);
?>
90. 90
Pour l'écriture, on peut :
utiliser fwrite et fputs.
Cette fonction va écrire la ligne que vous voulez dans le fichier.
Elle s'utilise comme ceci :
<?php fputs($monfichier, 'Texte à écrire'); ?>
La fonction fputs s’utilise la fonction fseek qui va replacer le curseur
où l'on veut dans le fichier.
Les Fichiers