Vous êtes sur la page 1sur 119

Langage PHP

Côté Serveur

1
Principe

 Construire une application répartie :


 S’exécutant entre autre sur le poste hébergeant le
serveur HTTP.
 Utilisant le serveur HTTP pour accéder aux
postes clients.
 Utilisant HTML comme langage de base pour
l’interaction avec les utilisateurs.

2
Scripts côté serveur :
les quatre leaders du marché

 Perl

 PHP (Php Hypertext Preprocessor)

 JSP (Java Server Pages)

 ASP (Active Server Pages)

3
Modèle du fonctionnement du
PHP

4
Modèle du fonctionnement
du PHP
Architecture (avec Apache)

APACHE

PHP
POST/GET

Répertoires
web

6
Historique

 PHP = Hypertext PreProcessor


 Site officiel : http://www.php.net
 Créé en 1994 par Rasmus Lerdorf
(PHP : Personnal Home Page.)
 Première version : ensemble de scripts perl
 PHP3 : interprété
 PHP4 : compilé
 PHP5 : compilé Objet

7
PHP, qu'est-ce que c'est ?

 Un langage pour la programmation du serveur


 Permet d'inclure des parties programmées
dans du HTML
 Très proche du langage C
 Très riche en fonctions, notamment pour
l'accès aux bases de données

8
Premier programme

 La conception du script PHP est réalisé avec un éditeur


quelconque,
Côté serveur :

<HTML>
<HEAD><TITLE>Mon premier programme</TITLE></HEAD>
<BODY>
il est sur le serveur
<?php print date ("H i s"); ?>

</BODY>
</HTML>

9
Premier programme

 Côté navigateur

<HTML>
<HEAD> <TITLE> Heure </TITLE> </HEAD>
<BODY>
<P>
Sur le serveur, il est actuellement 16:39:27
</P>
</BODY>
</HTML>

10
Généralité

 Extension du fichier :
 .php pour du PHP 4

 .php3 pour du PHP 3

 Délimiteur :
 <? ... ?>

 <?php ... ?>

 <SCRIPT language="php"> ... </SCRIPT>

11
Les bases du langage

Syntaxe du langage

12
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 Unix
?>
 Tout ce qui se trouve dans un commentaire est ignoré.
Il est conseillé de commenter largement ses scripts.

13
Exemples de commentaires

<?php
/*commentaire multiligne*/
//commentaire une ligne
echo "<h2>PHP is Fun!</h2>";
echo "Hello world!<br>";
echo "I'm about to learn PHP!<br>";
echo "This ", "string ", "was ", "made ", "with multiple parameters.";
# Ceci est un commentaire style shell sur une seule ligne

?>

14
Syntaxe du langage

Variables, types et
opérateurs

15
Variables, types et
opérateurs (I)
 Le typage des variables est implicite en php.
 Il n’est donc pas nécessaire de déclarer leur type au préalable
 ni même de les initialiser avant leur utilisation.
 Les identificateurs de variable sont précédés du symbole "$" (dollars).
Exemple : $variable.
 Les variables peuvent être de type entier (integer), réel (double), chaîne
de caractères (string), tableau (array), objet (object), booléen
(boolean)...
 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

16
Booléen

 C'est le type le plus simple. Un booléen


représente une valeur de vérité. Il peut valoir
TRUE ou FALSE.
 Note: Le type booléen a été introduit en PHP 4.
 Syntaxe
 Pour spécifier un booléen littéral, utilisez le mot
clé TRUE ou FALSE. Les deux sont insensibles
à la casse.

17
Exemple

<?php
$valeur = true;
echo '<br/>affichage valeur à TRUE: "'.$valeur.'"';
$valeur = false;
echo '<br/>affichage valeur à FALSE: "'.$valeur.'"';
exit;
?>

18
Les entiers

 Un entier est un nombre appartenant à la classe Z =


{..., -2, -1, 0, 1, 2, ...}.
 Syntaxe
 Les entiers peuvent être spécifiés en notation décimale (base
10), hexadécimale (base 16), ou octale (base 8),
optionnellement précédée d'un signe (- ou +).

 Pour utiliser la notation octale, précédez le nombre d'un 0


(zéro). Pour utiliser la notation hexadécimale, précédez le
nombre d'un 0x.

19
Exemples

 <?php
$a = 1234; // un nombre décimal
$a = -123; // un nombre négatif
$a = 0123; // un nombre octal (équivalent à 83 décimales)
$a = 0x1A; // un nombre hexadécimal (équivalent à 26 décimales)
?>

20
Nombres décimaux

 Les nombres décimaux, (aussi connus


comme nombres à virgule flottante, "floats",
"doubles", ou "real numbers") peuvent être
spécifiés en utilisant les syntaxes suivantes :

21
Exemple

<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>

22
Les chaînes de caractères

 Syntaxe
 Une chaîne de caractères littérale peut être
spécifiée de 2 façons différentes :
 Entourée de guillemets simples
 Entourée de guillemets doubles

23
Entourée de simple guillemet

 Entourée de simple guillemet


 La façon la plus simple de spécifier une chaîne
de caractères est de l'entourer de guillemet
simple (le caractère ').
 Pour spécifier un guillemet simple littéral, vous
devrez l'échapper d'un antislash (\).
 Pour spécifier un antislash littéral avant un
guillemet simple, ou à la fin d'une chaîne de
caractères, échappez-le deux fois (\\).

24
Exemple

<?php
echo 'ceci est une chaîne simple';

echo 'Vous pouvez également ajouter des nouvelles lignes


dans vos chaînes
de cette façon';

// Affiche : Voulez-vous supprimer C:\*.*?


echo 'Voulez-vous supprimer C:\\*.*?';

// Affiche : Ceci n'affichera pas \n de nouvelle ligne


echo 'Ceci n\'affichera pas \n de nouvelle ligne';

25
Entourée de guillemet double

 Si la chaîne de caractères est entourée de


guillemet double ("), PHP interprétera plus
de séquences échappées pour les caractères
spéciaux :

26
27
Chaînes de caractères (II)
Opérateur de concaténation de chaînes : . (point)

Exemple 1 :
$a = "Salam";
$b= " tout le monde";
echo $a.$b;
Exemple 2 :
$prenom = " Batou ";
$nom = $prenom. " Larbi ";

Exemple 3 :
$filiere = " 3ème année ";
$filiere.= " SIR ";
echo $filiere; 28
Chaînes de caractères (III)
Affichage d’une chaîne avec print :

Exemples:
print 'Hello Word.';
print "Nom : ". $name;
print("Bonjour");

Quelques fonctions:
strlen($str) : retourne le nombre de caractères d’une chaîne
strtolower($str) : conversion en minuscules
strtoupper($str) : conversion en majuscules
trim($str) : suppression des espaces de début et de fin de chaîne
substr($str,$i,$j) : retourne une sous chaîne (entre les positions i et j)
strnatcmp($str1,$str2) : comparaison de 2 chaînes
addslashes($str) : déspécialise les caractères spéciaux (‘, ‘’, \)
ord($char) : retourne la valeur ASCII du caractère

29
Variables, types et
opérateurs (II)
 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()…


 Une variable peut avoir pour identificateur la valeur d’une autre variable.
 Syntaxe : ${$var} = valeur;

 Exemple :

 $variable = ‘’chaineVar’’; ${$ variable } = 2021;

 print $chaineVar; // la variable $chaineVar vaut 2021

30
Variables, types et
opérateurs (III)
Opérateurs arithmétiques :
 + (addition),

 - (soustraction), * (multiplié), / (divisé), % (modulo), ++

(incrément), --(décrément). Ces deux derniers peuvent


être pré ou post fixés
 Opérateurs d’assignement :
 = (affectation), *= ($x*=$y équivalent à $x=$x*$y), /=,

+=, -=, %=

31
Variables, types et
opérateurs (IV)
 Opérateurs logiques :
 and, && (et), or, || (ou), xor (ou exclusif), !

(non)
 Opérateurs de comparaison :
 == (égalité), < (inférieur strict), <= (inférieur

large), >, >=, != (différence)

32
Syntaxe du langage

Les Constantes

33
Constantes

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.
define(‘’var’’,valeur) : définit la constante var (sans $) de valeur
valeur

Exemple :
define("author",“SIR ");
Print author; // affiche ‘SIR’
define("MY_Year","2013");
print MY_Year; // affiche 2013

34
Syntaxe du langage

Mathématiques

35
Mathématiques

 Il existe une myriade de fonctions mathématiques.


 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

36
Mathématiques

 Et aussi :
 cos, sin, tan, exp, log, min, pi, sqrt…
 Nombres aléatoires :
 rand($x,$y) : valeur aléatoire entre x et y

 srand() : initialisation du générateur aléatoire

37
Syntaxe du langage

Les Tableaux

38
Tableaux (I)
Un tableau peut être initialisé avec la syntaxe array.
Exemple :
$name=3;
$tab_colors = array('red', 'yellow', 'blue', 'white');
$tab = array(‘SIR', 2013, 20.5, $name);//on peut mettre n’importe quel type

$prenoms[] = "Ali"; $villes[0] = "Marrakech";


$prenoms[] = "Justin"; $villes[1] = "Londres";
$prenoms[] = "Moha"; $villes[2] = "Atlass";

echo $prenoms[1]; // pour accéder au 2ème élément

39
Tableaux (II)
Parcours d’un tableau.
$tab = array(‘SIR’, ‘3’, ’FSTG’);

Exemple 1 :
$i=0;
while($i < count($tab)) { // count() retourne le nombre d’éléments
echo $tab[$i].’\n’;
$i++;
}
Exemple 2 :

foreach($tab as $elem) {
echo $elem.’’\n’’;
}
La variable $elem prend pour valeurs successives
tous les éléments du tableau $tab.
40
Tableaux (III)
 Quelques fonctions:

 count($tab), sizeof : retournent le nombre d’éléments du tableau

 in_array($var,$tab) : teste 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 interval de valeurs

 shuffle($tab) : mélange les éléments d’un tableau

 sort($tab) : trie alphanumérique les éléments du tableau

41
Tableaux associatifs (I)

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" => "SIR", "Prénom" => " 3ème année");
Exemple 2 :
$personne["Nom" ] = " SIR ";
$personne[" Prénom "] = " 3ème année ";
Ici la clé ‘’Nom’’ est associée la valeur ‘’SIR’’.

42
Tableaux associatifs (II)

Parcours d’un tableau associatif.


$personne = array ("Nom" => " SIR", "Prénom" => " 3ème année ");

Exemple 1 :
foreach($personne as $elem) {
echo $elem;
}

Ici on accède directement aux éléments du tableau sans passer


par les clés.

Exemple 2 :
foreach($personne as $key => $elem) {
echo ‘’$key : $elem’’;
}
Ici on accède simultanément aux clés et aux éléments.

43
Exemple
<?php
// ceci
$a = array( 'couleur' => 'rouge', 'gout' => 'sucre', 'forme' => 'rond', 'nom' => 'pomme', 4); // cette clé sera 0
// est complétement équivalent à
echo $a['couleur']."<br>" ;
echo $a['gout']."<br>" ;
echo $a['forme']."<br>";
echo $a['nom']."<br>";
echo $a[0]."<br>"; // cette clé sera 0
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';
echo $b[0]." ".$b[1]." ".$b[2];
// va créer le tableau array( 0 => 'a' , 1 => 'b' , 2 => 'c' )
// ou plus simplement array('a' , 'b' , 'c' )
?>

44
Les tableaux
Quelques fonctions
array_count_values($tab) : retourne un tableau associatif contenant
les valeurs du tableau $tab comme clés et leurs fréquence comme
valeur
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

L’élément d’un tableau peut être un autre tableau.

Les tableaux associatifs permettent de préserver une structure de


données.
Exemples
<?php
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
?>

résultats:

Array
(
[1] => 2
[hello] => 2
[world] => 1
)

-------------------------------------------------------------
<?php
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));

$array = array("blue", "red", "green", "blue", "blue");


print_r(array_keys($array, "blue"));

$array = array("color" => array("blue", "red", "green"),


"size" => array("small", "medium", "large"));
print_r(array_keys($array));
?>

résultats:

Array
(
[0] => 0
[1] => color
)
Array
(
[0] => 0
[1] => 3
[2] => 4
)
Array
(
[0] => color
[1] => size
)
---------------------------------------------------------------------------

<?php
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
?>

Array
(
[0] => XL
[1] => gold
)
------------------------------------------------------------------------------
Les tableaux

Quelques fonctions
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

Exemple :
<?php
$colors = array("red", "green", "blue");
$nbr = count($colors);
reset($colors);
for($i=1; $i<=$nbr; $i++) {
echo current($colors)."<br>";

next($colors)
}
?>
Les fonctions I

Une fonction est un sous-programme qui permet d'effectuer un


ensemble d'instructions par simple appel dans le corps du
programme principal.
Comme tout langage de programmation. PHP permet l’écriture des
fonction.
La syntaxe est la suivante:

function ma_fonction($argument1, $argument2,…)


{
Liste des instructions;
Return ($valeur_de_retour);
}

Une fonction peut ne pas avoir de valeurs d’entrée (arguments) ou


encore retourner de valeurs (le cas d’une fonction d’affichage de
message d’erreur).
Les fonctions II
Variable locale et variable globale d’une fonction
Toute variable déclarée au sein d’une fonction est de portée locale de
cette fonction. Elle n’est pas reconnue dans le reste du
programme.
global permet de travailler sur une variable de portée globale au
programme. Le tableau associatif $GLOBALS permet d’accéder aux
variables globales du script ($GLOBALS[‘’var’’] accède à la variable
$var).

Exemple :
<?php
function test() {
$foo = "variable locale";

echo "$foo dans le contexte global : " . $GLOBALS["foo"] . "<br>";


echo "$foo dans le contexte courant : " . $foo . "\n";
}

$foo = "Exemple de contenu";


test();
?>
Les fonctions III

Forcer le passage de paramètres par référence


Exemple :
function change(&$var) { // force le passage par référence
$var += 100; // incrémentation de +100
}
$toto = 12; // $toto vaut 12
change($toto);
echo $toto; // $toto vaut 112
Les fonctions IV

Même sans paramètre, un entête de fonction doit porter des


parenthèses ( ). Les différents arguments sont séparés par une
virgule et le corps de la fonction est délimité par des accolades { }.

Quelques exemples :
function afficher($str1, $str2) { // passage de deux paramètres
echo ‘’$str1, $str2’’;
}

function bonjour() { // passage d’aucun paramètre


echo ‘’Bonjour’’;
}

function GetColor() { // retour d’une variable


return ‘’black’’;
}
Les fonctions V
En version 3 du PHP (version interprétée), une fonction ne peut être
appelée qu’après sa définition. En version 4 et 5 (compilées) une
fonction peut être appelée avant sa définition.

Exemple :
function f1() { // définition de la fonction f1
echo ‘’fonction f1…’’;
}
f1(); // appel de la fonction f1 définie plus haut
f2(); // appel de la fonction f2 pas encore définie
function f2() { // définition de la fonction f2
echo ‘’fonction f2’’;
}

Cet exemple affichera : fonction f1…fonction f2!.


Les fonctions VI
Il est possible de faire retourner plusieurs valeurs d’une fonction en
utilisant les tableaux 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.

Exemple :
function trigo($nbr) {
return array(sin($nbr), cos($nbr), tan($nbr)); // retour d’un
// tableau
}
$r = M_PI;
list($a, $b, $c) = trigo($r); /* affectation aux variables $a,$b
et
$c des éléments du tableau retourné par la fonction trigo */
echo '$a='.$a; echo "<br>";
echo '$b= '.$b; echo "<br>";
Fonctions dans une autre
fonction
<?php
function foo()
{
function bar()
{
echo "Je n'existe pas tant que foo() n'est pas appelé.\n";
}
}
/* Impossible d'appeler bar() ici
car il n'existe pas. */
foo();
/* Maintenant, nous pouvons appeler bar(),
car l'utilisation de foo() l'a rendu
accessible. */
bar();
?>
Valeur par défaut des arguments
de fonctions
<?php
function servir_cafe ($type = "cappuccino")
{ return "Servir un $type.\n"; }
echo servir_cafe()."<br>";

// Affiche : Servir un cappuccino.


echo servir_cafe("espresso")."<br>";;
// Affiche : Servir un espresso.
echo servir_cafe(null);?>
Les arguments à valeur par
défaut doivent être en premier :
valide
<?php
function faireunyaourt ($flavour, $type = "acidophilus")
{
return "Préparer un bol de $type $flavour.\n";
}
echo faireunyaourt ("framboise"); // fonctionne comme voulu
?>
Les valeurs de retour

<?php
function carre ($num)
{
return $num * $num;
}
echo carre (4);
?>
Retourner un tableau d'une
fonction
<?php
function petit_nombre()
{
return array (0, 1, 2);
}

list ($zero, $un, $deux) = petit_nombre();


var_dump($zero, $un, $deux);
//retourne le type et la valeur des variables $zero,
$un et $deux?>
Les inclusions
On peut inclure dans un script PHP le contenu d’un autre fichier.
require insert dans le code le contenu du fichier spécifié même si ce
n’est pas du code php. ( équivalent au préprocesseur #include du
C)

Syntaxe:
require("fichier.php");

include évalue et insert à chaque appel (même dans une boucle) le


contenu du fichier passé en argument.

Syntaxe:
include("fichier.php");

Les inclusions sont très utiles lors de l’appel d’une base de


donnée. Les paramètres de connexions sont stockés sur un
fichiers à part.
Exemple avec include()
vars.php

<?php

$color = 'verte';
$fruit = 'pomme';

?>
test.php
<?php

//echo "Une $couleur $fruit"; // Une

include 'vars.php';

echo "Une $fruit $color "; // Une pomme verte

?>
Inclusion de fichiers dans une
fonction
<?php
function foo()
{
global $color;

include 'vars.php';

echo "Une $fruit $color";


}

/* vars.php est dans le contexte de foo() *


* donc $fruit n'est pas disponibles hors de *
* cette fonction. $couleur l'est, car c'est *
* une variable globale */

foo(); // Une verte pomme


echo "Une $color "; // Une verte
?>
La fonction require
 La fonction require permet d’insérer le contenu d’un fichier à l’intérieur
d’un autre fichier.
 Cette fonction a donc pour effet de réaliser un « copier coller » à
l’endroit où elle est écrite.
 Vous comprendrez immédiatement l’intérêt de cette fonction !
 En effet, vous avez désormais la possibilité d’économiser l’écriture de
code ou de texte.

La syntaxe :
<?php require("NomDuFichier"); ?>
La description :
« NomDuFichier » est le nom du fichier depuis lequel vous souhaitez
réaliser l’insertion.
Exemple
Voici le fichier entete.php :

<html>
<head>
<title> Le site INFOS PLUS</title>
</head>
<body>
<h1>Le site INFOS PLUS</h1>
<h1> Le site d'astuces à votre services...</h1>
<p>Contactez-moi au numéro de téléphone suivant :</p>
<p>INFOS PLUS PARIS : <i>01.99.01.01.01</i></p>
<p>Je vous attends ! Venez vite !</p>

Voici le code du fichier index.php :

<?
// insertion de l'entête
<?php require("entete.php"); ?>
<h1>bonjour</h1>
<h1>Présentation</h1>
<p>Ce site vous propose des centaines d'astuces concernant l'utilisation de l'outil informatique.</p>
<p>C'est d'actualité, non ?</p>
<p>Pour continuer la visite, cliquez sur le lien page suivante...</p>
<p><a href="suite.php">Page suivante</a></p>
</body>
</html>

Voici le code du fichier suite.php :

<?php
// insertion de l'entête
require("entete.php"); ?>
<h1>La suite</h1>
<p>Salut !</p>
<p>Maintenant, si vous voulez continuer de visiter ce site, il va falloir me dire d'où vous êtes...</p>
<p>En fait, il n'y a pas de suite !</p>
<p><a href="index.php">Alors retourner à la page d'accueil...</a></p>
</body>
</html>
Les Instructions

64
Tests : if... then... else

Si une condition est vrai alors on exécute des instructions sinon


(facultatif) on en exécute d'autre.
On peut changer de condition avec un 'elseif'.

syntaxe :
if ( condition1 ) {
Action 1
} elseif ( condition2 ) {
Action 2
}
} else {
Action 3
}
65
Tests : if... then... else

exemple :

if ($a==$b) {
echo "A est égal à B";
} elseif ($a > $b) {
echo "A est supérieur à B";
} else {
echo "A est inférieur à B";
}

66
Tests : switch... case... default
la condition est associée à la valeur d'une variable, de plus l'instruction 'break'.

Exemple :
switch ($a) {
case $b:
echo "A est égal à B";
break;
case >$b:
echo "A est supérieur à B";
break;
default:
echo "A est inférieur à B";
break;
}

67
Boucles

while ( condition ) {
Action;
}

do {
Action;
} while (condition);

for (expr1; expr2; expr3) {


Action;
}

68
Boucles
$i=1;
while ($i <= 10) {
echo "- $i -";
$i++;
}

$i=1;
do {
echo "- $i -";
$i++;
} while ($i <= 10)

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


echo "- $i -";
}

69
Break;Continue
Break :Cette instruction permet de sortir de n'importe quelle boucle, à n'importe
quel moment.
Continue : Cette instruction permet de ne pas exécuter le code contenu dans la
boucle et de passer à l'itération suivante.

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


if ($i<=5) { echo $i; }
else {
break;
}
echo "- ";
}
// cette boucle affichera : 1 - 2 - 3 - 4 - 5

70
Interaction avec l’usager

get, post
et
les formulaires

71
Bonnes pratiques

 Il faut absolument vérifier toute valeur reçue


de la part d’un usager (par exemple dans
$_GET).
 La variable est-elle initialisée ?
 La variable est-elle du bon type ?
 La variable contient-elle une valeur raisonnable ?

72
Interaction avec
l’usager

Formulaires HTML

73
Formulaires HTML

 Le langage HTML permet de définir des


formulaires en se servant du conteneur
<form>.
 On peut ainsi créer des pages beaucoup plus
interactives qu’avec seulement des liens

74
Formulaires HTML (Suite)

 Le conteneur <form> accepte plusieurs arguments:


 action: l’URL du script ou du programme à déclencher
(en principe, sur le serveur)
 method: post ou get
 get inclut les paramètres dans l’URL, directement
visibles pour l’usager
 post inclut les paramètres dans le corps de la
requête HTTP

75
Formulaires HTML :
Exemple POST
exemple (fichier test.html) :
<HTML>
<FORM ACTION="test.php" METHOD=POST>
<INPUT TYPE=hidden NAME=« IGSI" VALUE="bonjour">
Nom : <INPUT TYPE=text NAME="nom">
<INPUT TYPE=submit VALUE="Envoyer">
</FORM>
</HTML>

76
Formulaires HTML :
Exemple GET
 Code HTML classique :
<form action="traitement.php" method="get">
<p>
Formation: <input type="text" name="Form" /> <br />
École: <input type="text" name="ecole" />
<input type="submit" value="OK" />
</p>
</form>

77
Formulaires HTML :
Exemple GET
 On récupère les données et on les affiche
(fichier traitement.php)

<?php
$formation = $_GET["Form"];
$ecole = $_GET["ecole"];
echo "Vous êtes de l'école $ecole.";
echo " <br /> ";
echo "Vous êtes en ".$formation.".";
?>
78
Autre utilité de $_GET

 Adresse :
http://serveur/page.php?a=bonjour&b=bye

 $_GET["a"] vaut "bonjour"


$_GET["b"] vaut "bye"

79
Transmission
 Chaque champ a un nom
 GET : les données sont transmises dans l’URL
test.php
 POST : transmission dans le protocole HTTP
(invisible sur l’URL)

80
Champs de formulaire :
<INPUT>
 Très général: saisie de texte, ou choix dans
des listes. L'attribut TYPE vaut:
 TEXT pour les chaînes de caractères
 HIDDEN pour les champs cachés
 CHECKBOX pour un choix multiple
 RADIOBOX pour un choix exclusif
 SUBMIT pour déclencher l'action
 FILE pour transmettre un fichier

81
Champs de formulaire :
<INPUT> (Suite)
<input type= "file"> Fichier

<textarea></textarea> Zone de texte

<select><option></select> Zone de liste

<input type= "checkbox"> Case à cocher

<input type= "radio"> Bouton d’option

<input type= "hidden"> Champ invisible

<input type= "password"> Mot de passe

<input type= "text"> Champ

82
Champs <SELECT>

 Permet de choisir une ou plusieurs


valeurs dans une liste
<SELECT NAME='realisateur' SIZE=3>
SIZE=3
<OPTION VALUE=1>Alfred Hitchcock
<OPTION VALUE=2 SELECTED>Maurice
SELECTED
Pialat
<OPTION VALUE=3>Quentin Tarantino
</SELECT>

83
Champs <SELECT>:
MULTIPLE
 L'option MULTIPLE permet de sélectionner plusieurs valeurs

<HTML>
<form action=« test.php" method="post">
Nom : <input type="text" name="Master" VALUE="Master" <br />
Email : <input type="text" name="igsi"><br />
COURS : <br />
<select multiple name=« cours[]">
<option value=" BD ">BD</option>
<option value=" java ">java</option>
<option value=" php ">php</option>
</select><br />
<input type="submit" name="submit" value="me contacter!">
</form>
</HTML>

84
Champ <TEXTAREA>

 Pour entrer du texte libre:


<TEXTAREA NAME= ‘description’
COLS=30
ROWS=3>
texte libre de description
</TEXTAREA>
 L'attribut MAXLENGTH indique la longueur
maximale du texte.

85
Traitement des données en
PHP

 On récupère, sous forme de variable PHP, les


champs d'un formulaire
 Pour les valeurs scalaires -> une variable

 Pour les fichiers -> un nom de fichier

temporaire

86
Que se passe-t-il quand on
valide ?
 Le programme client transmet au programme
serveur les informations sous la forme:
$_POST["titre"]=t
$_POST["annee"]=a

 Et on peut maintenant utiliser ces données pour


fabriquer une page HTML
<?php if ($_POST["annee"]<1920) echo
“Desole, on a pas.”; ?>
87
Passage de valeurs
multiples

88
Passage de valeurs multiples
<H1>Passage de valeurs multiples</H1>
<FORM ACTION="ExPHP.php"
METHOD="POST">
Titre : <INPUT TYPE=TEXT SIZE=20 NAME="titre" >
<TABLE><TR><TH>Prénom</TH><TH>Nom</TH></TR>
<TR><TD><INPUT TYPE=TEXT SIZE=30 NAME=" prenom[]">
<TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]">
<TR><TD><INPUT TYPE=TEXT SIZE=30 NAME=" prenom[]">
<TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]">
<TR><TD><INPUT TYPE=TEXT SIZE=30 NAME=" prenom[]">
<TD><INPUT TYPE=TEXT SIZE=30 NAME="nom[]">
</TABLE>

<H1>Votre choix</H1>
<INPUT TYPE=SUBMIT VALUE='Valider'>
<INPUT TYPE=RESET VALUE='Annuler'>
</FORM>

89
Que se passe-t-il quand on
valide ?
 Le programme client transmet au programme serveur les infos sous la forme:
titre=t&prenom[]=p1&nom[]=n1&prenom[]=p2&nom[]=n2&...
 Pour le script PHP, cela donne:

<?php
$titre = $_POST['titre'];
$prenom=$_POST['prenom'];
$nom=$_POST['nom'];

echo "Pour le film $titre j'ai reçu les acteurs suivants :<P>\n";

for ($i=0; $i <3; $i++)


echo "<B> $prenom[$i] $nom[$i]<B><BR>\n";

?>
 => on crée deux tableaux PHP ! 90
Ce que fait le script

 Une boucle sur les tableaux permet de


récupérer les valeurs.
<?php
$titre = $_POST['titre'];
$prenom=$_POST['prenom'];
$nom=$_POST['nom'];

echo "Pour le film $titre j'ai reçu les acteurs


suivants :<P>\n";
$nbActeurs = count($prenom);
for ($i=0; $i < $nbActeurs; $i++)
echo "<B> $prenom[$i] $nom[$i]<B><BR>\n";
?>
 -> A utiliser aussi pour les champs SELECT
multiples. 91
Les sessions
 Les sessions sont un moyen de conserver des variables sur toutes les
pages de votre site.
 Jusqu'ici, nous étions parvenus à passer des variables de page en page via:
 la méthode GET (en modifiant l'url : page.php?variable=valeur)
 et via la méthode POST (à l'aide d'un formulaire).
Mais imaginez maintenant que vous souhaitiez transmettre des variables sur
toutes les pages de votre site pendant la durée d'une visite d'un visiteur. Ce ne
serait pas facile avec GET et POST car ils sont plutôt fait pour transmettre les
informations une seule fois, d'une page à une autre.

 On sait ainsi envoyer d'une page à une autre le nom et le prénom du visiteur, mais
dès qu'on charge une autre page ces informations sont "oubliées".

 C'est pour cela qu'on a inventé les sessions


Les sessions I
Les sessions permettent le passage des variables (variables de
session) d’une page à une autre tout au cours de la visite du site
web.

Les variables de session ne sont pas visibles dans l’URL et peuvent


être de types différents (tableau, float…).

Cette méthode permet de conserver les paramètres de connexions


d’un visiteur et conserver ses choix (sauvegarder son panier e-
commerce par exemple)
Fonctionnement des sessions
 Comment sont gérées les sessions en PHP ? Voici les 3 étapes à connaître :

 Un visiteur arrive sur votre site. On demande à créer une session pour lui. PHP génère alors un numéro
unique. Ce numéro est souvent très gros et généralement écrit en hexadécimal. Par exemple :
a02bbffc6198e6e0cc2715047bc3766f.
Ce numéro sert d'identifiant et est appelé "ID de session" (ou PHPSESSID). PHP transmet
automatiquement cet ID de page en page en utilisant un cookie en règle générale.
 Une fois la session créée, on peut créer une infinité de variables de session pour nos besoins. Par
exemple, on peut créer une variable $_SESSION['nom'] qui contient le nom du visiteur,
$_SESSION['prenom'] qui contient le prénom, etc. Le serveur conserve ces variables même lorsque la
page PHP a fini d'être générée. Cela veut dire que, quelle que soit la page de votre site, vous pourrez
récupérer par exemple le nom et le prénom du visiteur via la superglobale $_SESSION !
 Lorsque le visiteur se déconnecte de votre site, alors la session est fermée et PHP "oublie" toutes les
variables de sessions que vous avez créées. Il est en fait difficile de savoir précisément quand un
visiteur quitte votre site. En effet, lorsqu'il ferme son navigateur ou va sur un autre site, votre site n'en
est pas informé. Soit le visiteur clique sur un bouton "Déconnexion" (que vous aurez créé) avant de s'en
aller, soit on attend quelques minutes d'inactivité pour le déconnecter automatiquement (on parle de
timeout). Le plus souvent, le visiteur est déconnecté par un timeout.
Les sessions II
Fonctions
session_start() : démarre une session

session_destroy() : détruit les données de session et ferme la


session

session_start() doit être présente sur toutes les pages qui utilisent
les variables de sessions et doit être déclarée avant tout envoie au
navigateur du client.
Remarque: il faut appeler session_start() sur chacune de vos
pages AVANT d'écrire le moindre code HTML (avant même
la balise <!DOCTYPE>). Si vous oubliez de lancer
session_start(), vous ne pourrez pas accéder aux variables
superglobales $_SESSION.
Exemple d'utilisation des
sessions
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();

// On s'amuse à créer quelques variables de session dans $_SESSION


$_SESSION['prenom'] = ‘Batou';
$_SESSION['nom'] = ‘Larbi';
$_SESSION['age'] = 60;
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Titre de ma page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

<p>
Salut <?php echo $_SESSION['prenom']; ?> !<br />
Tu es à l'accueil de mon site (index.php). Tu veux aller sur une autre page ?
</p>

<p>
<a href="mapage.php">Lien vers mapage.php</a><br />
<a href="monscript.php">Lien vers monscript.php</a><br />
<a href="informations.php">Lien vers informations.php</a>
</p>

</body>
</html>
Voici par exemple le code source
de la page informations.php
<?php
session_start(); // On démarre la session AVANT toute chose
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Titre de ma page</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

<p>Re-bonjour !</p>

<p>
Je me souviens de toi ! Tu t'appelles <?php echo $_SESSION['prenom'] . ' ' . $_SESSION['nom']; ?> !<br />
Et ton âge hummm... Tu as <?php echo $_SESSION['age']; ?> ans, c'est ça ? :-D
</p>

</body>
</html>
Avantages des sessions
L'utilité des sessions en pratique
 Concrètement, les sessions peuvent servir dans de nombreux cas sur votre
site ,Voici quelques exemples :
 Imaginez un script qui demande un login et un mot de passe pour qu'un
visiteur puisse se « connecter » (s'authentifier). On peut enregistrer ces
informations dans des variables de session et se souvenir de l'identifiant du
visiteur sur toutes les pages du site !
 Puisqu'on retient son login et que la variable de session n'est créée que s'il a
réussi à s'authentifier, on peut l'utiliser pour restreindre certaines pages de
notre site à certains visiteurs uniquement.
 Cela permet de créer toute une zone d'administration sécurisée : si la
variable de session login existe, on affiche le contenu, sinon on affiche une
erreur.

98
Avantages des sessions

 On se sert activement des sessions sur les


sites de vente en ligne. Cela permet de gérer
un « panier » : on retient les produits que
commande le client quelle que soit la page
où il est. Lorsqu'il valide sa commande, on
récupère ces informations et… on le fait
payer. ;-)

99
Les cookies

 Travailler avec des cookies fonctionne à peu


près de la même façon qu'avec des sessions,
à quelques petites différences près que nous
allons voir. Voici ce que nous allons faire
pour découvrir les cookies
Qu'est-ce qu'un cookie ?

 Un cookie, c'est un petit fichier que l'on enregistre


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

 Chaque cookie stocke généralement une


information à la fois.
 Si vous voulez stocker :
 le pseudonyme du visiteur
 et sa date de naissance,

il est donc recommandé de créer 2 cookies


Ecrire un cookie

 Comme une variable, un cookie a un nom et


une valeur. Par exemple, le cookie pseudo
aurait chez moi la valeur M@teo21.

 Pour écrire un cookie, on utilise la fonction


PHP setcookie (qui signifie "Placer un
cookie" en anglais).
 On lui donne en général 3 paramètres, dans
l'ordre suivant
 Le nom du cookie (ex. : pseudo)
 La valeur du cookie (ex. : M@teo21)
 La date d'expiration du cookie, sous forme de
timestamp (ex : 1090521508).
Les cookies

 Le paramètre correspondant à la date d'expiration


du cookie mérite quelques explications.
 Il s'agit d'un timestamp, c'est-à-dire du nombre de
secondes écoulées depuis le 1er janvier 1970.
 Le timestamp est une valeur qui augmente de 1
toutes les secondes.
 Pour obtenir le timestamp correspondant à
maintenant, on fait appel à la fonction time().
 Pour définir une date d'expiration du cookie, il faut
ajouter au "moment actuel" le nombre de secondes
dans lequel il doit expirer.

 Si vous voulez supprimer le cookie dans un an, il


vous faudra donc écrire : time() + 365*24*3600.

 Cela veut dire : timestamp actuel + nombre de


secondes dans une année. Cela aura pour effet de
supprimer votre cookie dans exactement un an
Voici donc comment on peut créer
un cookie

<?php setcookie('pseudo', 'M@teo21', time() + 365*24*3600); ?>


Sécuriser son cookie avec le
mode httpOnly
Je recommande toutefois d'activer l'option httpOnly sur le cookie. Sans
rentrer dans les détails, cela rendra votre cookie inaccessible en
javascript sur tous les navigateurs qui supportent cette option (c'est le
cas de tous les navigateurs récents).

 Je vous recommande donc de créer votre cookie plutôt comme ceci :

Code : PHP
<?php setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true); ?>
Créer le cookie avant d'écrire du
HTML

 Il y a un petit problème avec setcookie...


Comme pour session_start, cette fonction ne
marche que si vous l'appelez avant tout code
HTML.

 Ne placez donc JAMAIS le moindre code


HTML avant d'utiliser setcookie
Afficher un cookie

 C'est la partie la plus simple. Avant de


commencer à travailler sur une page, PHP lit les
cookies du client pour récupérer toutes les
informations qu'ils contiennent. Ces
informations sont placées dans la superglobale
$_COOKIE, sous forme d'array comme
d'habitude.
De ce fait, si je veux ressortir le pseudo du
visiteur que j'avais inscrit dans un cookie, il
suffit d'écrire : $_COOKIE['pseudo']
<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>
Modifier un cookie existant

 Par exemple, si j'habite maintenant en Tunisie, je


ferai :

Code : PHP
<?php setcookie('pays', ‘Tunisie', time() + 365*24*3600, null, null, false, true); ?>
Passage par cookies
PHP propose des fonctions pour :
Poser un cookie :
<?php
$expire = 365*24*3600;// durée du cookie en sec, 1 an
setcookie("lenom","lavaleur",time()+$expire);
?>
Récupérer un cookie :
<? // On affiche la valeur de nickname
echo 'le cookie "lenom" a pour valeur : ';
echo $_COOKIE["lenom"];
?>
Dates et heures

114
Dates et heures (I)

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

115
Dates et heures (III)
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
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 bissextile (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] 116
Dates et heures (IV)

 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

117
Dates et heures (II)

Exemple 1 :
echo date(''Y-m-d H:i:s'');
/* affiche la date au format MySQL :‘ 2002-09-27 20:30:29’ */
Exemple 2 :
if(checkdate(15-04-2005))
echo ‘’c’est le grand oral!!! ’’;

Exemple 3 :
$ aujourdhui = getdate();
$mois =$aujourdhui['mon'];
$ jour =$aujourdhui['mday'];
$annee =$aujourdhui['year'];
echo ''$jour/$mois/$annee''; // affiche ‘29/4/2006’
118
PHP et MySQL

Cette partie sera détaillée dans un autre


fichier traitant le PDO

119

Vous aimerez peut-être aussi