Vous êtes sur la page 1sur 60

Cours 5

Pages Web dynamiques

• PHP
• Les formulaires HTML
• PHP et MySQL

1 Inspiré du cours de Hugo Etiévant et de celui de Lionel Seinturier


Références
• PHP
http://www.php.net
http://www.phpinfo.net
http://www.phpfrance.com
http://www.developpez.com/php/

• MySQL
http://www.mysql.com/
http://dev.nexen.net/docs/mysql/

• HTML
http://cyberzoide.developpez.com/html/

2
Page web statique
3) affiche XXX.html
navigateur

0) Donne-moi la page web qui s’appelle XXX.html

serveur web

1) Lecture du disque 2) Retourne XXX.html

3
Page web dynamique
4) affiche la page HTML
navigateur

0) Donne-moi la page web qui s’appelle XXX.php

serveur web

1) Appel à un programme 3) Retourne la page HTML

Programme
php

2) Fabrication de la page
au format HTML
4
Page web dynamique avec BD
5) Affiche la page HTML
navigateur

0) Donne-moi la page web qui s’appelle XXX.php

serveur web

1) Appel à un programme 4) Retourne la page HTML

Programme 3) Fabrication de la page


php au format HTML

2) Extraction des données

serveur de données BD
MySQL
5
La petite 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 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,
il s’est rapidement répandu sur la toile.
• 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 (acronyme récursif à l’exemple du
système Open Source Linux : Is Not UniX).
• Il existe par ailleurs des applications web prêtes à l’emploi (PHPNuke, PHP
SPIP, PHPSlash…) permettant de monter facilement et gratuitement son
portail. C’est le langage le plus utilisé actuellement pour générer des pages
web dynamiques.

6
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 de la
norme XML :
<?php le code html à générer ?>
• Exemple 1 :

<?php
echo ’’<html>’’; <html>
echo ’’<body>’’; <body>
echo ’’Bonjour ’’; Bonjour
echo ’’</html>’’; </html>
echo ’’</body>’’; </body>
?>

Programme PHP Fichier HTML résultat


7 Mapage.php
Intégration d’un script dans une page
• Il existe une forme plus élégante pour éviter d’utiliser la
commande echo à chaque ligne : il suffit de considérer le
document HTML comme un document à trous. Chaque trou est
un fragment HTML qui doit être généré par un bloc d’instructions
PHP.
• Exemple :
<html>
<body>
<html>
<?php
<body>
echo ’’Bonjour ’’;
Bonjour
?>
</html>
</html>
</body>
</body>

Programme PHP Fichier HTML résultat


8 Mapage.php identique
Exemple
Exemple de script, code
source (côté serveur) : Autre écriture du même script :
<html> <?php
<body> echo ‘’<html>\n<body>\n’’;
<h1>Mon premier script</h1> echo ‘’<h1>Mon premier script</h1>\n’’;
<?php echo ‘’Bonjour\n’’; ?> echo ‘’Bonjour\n’’;
</body> echo ‘’</body>\n</html>\n’’;
</html> ?>

Code source (côté client)


Résultat affiché par le navigateur : de la page essai.php
résultant du script

9
Commentaires
• Un script php se commente comme en C :

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

10
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 : $toto.
• Les variables peuvent être de type entier (integer), réel (double), chaîne de
caractères (string), tableau (array), booléen (boolean) ou objet (object).
• Il est possible de convertir une variable en un type primitif grâce au cast(1)
(comme en C).
• Exemple :
$str = ’’12’’; // $str vaut la chaîne ‘’12’’
$nbr = (int)$str; // $nbr vaut le nombre 12

• (1) : Le cast est une conversion de type. L’action de caster consiste en convertir une variable d’un
type à un autre.

11
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()… : teste le type de la
variable

12
Variables, types et opérateurs (III)
• 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 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), *= , /=, +=, -=, %=
• Opérateurs logiques :
ƒ and, && (et), or, || (ou), xor (ou exclusif), ! (non)
• Opérateurs de comparaison :
ƒ = = (égalité), < (inférieur strict), <= (inférieur large), >, >=, != (différence)
ƒ Test ? val1 : val2 (vaut val1 si test est vrai, et val2 sinon)

13
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 1 :
define(’’author’’,’’Foobar’’);
echo author; // affiche ‘Foobar’
• Exemple 2 :
define(MY_YEAR,1980);
echo MY_YEAR; // affiche 1980
• Contrairement aux variables, les identificateurs de constantes (et aussi ceux de
fonction) ne sont pas sensibles à la casse.
14
Chaînes de caractères (I)
• 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 = "Dupont";
$prenom = ‘Jean’;
• 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: Dupont
echo ’Nom: $nom’; // affiche Nom: $nom
• Quelques caractères spéciaux : \n (nouvelle ligne), \r (retour à la ligne), \t
(tabulation horizontale), \\ (antislash), \$ (caractère dollars), \’’ (double quote).
• Exemple :
ƒ echo ‘’Hello Word !\n’’;
15
Chaînes de caractères (II)
• Opérateur de concaténation de chaînes : • (point)
• Exemple 1 :
$foo = "Hello";
$bar = "World";
echo $foo • $bar;

• Exemple 2 :
$name = "Henry";
$whoiam = $name • "IV’’;

• Exemple 3 :
$out = ‘Patati’;
$out • = "et patata…";

16
Chaînes de caractères (III)
• Affichage d’une chaîne avec echo:
ƒ echo ‘Hello Word.’;
ƒ echo "Hello ${name}\n";
ƒ echo "Nom : ", $name;
ƒ echo("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 de $str de taille $j et débutant à la
position $i
ƒ 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 $char
ƒ explode($delimiteur, $chaine) : retourne un tableau des sous-chaînes extraites de
chaine en utilisant le séparateur $delimiteur.

17
Les dates
• time() : retourne le nombre de secondes écoulées depuis le 1er Janvier 1970
• checkdate($mois, $jour, $année) : retourne true si la date est valide (par ex pour
éviter les 35 décembre)
• strftime ($format) : pour afficher la date courante en indiquant le format sous
lequel vous voulez représenter la date.
ƒ <?php
echo "Affichage au format jour/mois/annee heure:minute:seconde ".
strftime("%d/%m/%y %H:%M:%S")."<br />";?>
• strftime ($format, $date) : par défaut la fonction strftime() formatte la date et
heure courante mais vous pouvez spécifier un second paramètre pour afficher
une autre date. Ce paramètre étant exprimé en secondes depuis le 1 Janvier
1970.
ƒ <?php
echo "Dans 15 jours nous serons le " . strftime("%d/%m/%y",time()+15*24*3600) .
"<br>";?>

18
Les dates
• le format est donné par une chaîne de caractères comportant
quelques caractères précédés d'un signe % ayant une signification
particulière (d pour jour, m pour mois, y pour année, etc...) et des
caractères choisis librement (ici, le slash, l'espace, les 2 points).
• Liste des principales lettres "clés":

%y - année (sur 2 chiffres) %H - heure (sur 24 heures)


%Y - année %I - heure (sur 12 heures)
%B - mois en toutes lettres %M - minute
%m - mois %S - seconde
%A - jour en toutes lettres %j - numéro du jour dans l'année
%d - jour %V - numéro de la semaine
%u - numéro du jour dans l'année
dans la semaine (1=Lundi) %% - pourcent

19
Structures de contrôle (I)
• Structures conditionnelles (même syntaxe qu’en langage C) :

if( ... ) {

} elseif {

} else {

}

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

default : { … }
}
20
Structures de contrôle (II)
• Structures de boucle (même syntaxe qu’en langage C) :

for( … ; … ; … ) {

}

while( … ) {

}

do {

} while( … );

21
Tableaux (I)
• Une variable tableau est de type array. Un tableau accepte des éléments de tout type.
Les éléments d’un tableau peuvent être de types différents et sont séparés d’une virgule.
• Un tableau peut être initialisé avec la syntaxe array.
• Exemple :
$tab_colors = array(‘red’, ’yellow’, ’blue’, ‘white’);
$tab = array(‘foobar’, 2002, 20.5, $name);

• Mais il peut aussi être initialisé au fur et à mesure.


• Exemples :
$prenoms[ ] = ‘’Clément’’; $villes[0] = ‘’Paris’’;
$prenoms[ ] = ‘’Justin’’; $villes[1] = ‘’Londres’’;
$prenoms[ ] = ‘’Tanguy’’; $villes[2] = ‘’Lisbonne’’;

• L’appel d’un élément du tableau se fait à partir de son indice (dont l’origine est zéro
comme en C).
• Exemple :
echo $tab[10]; // pour accéder au 11ème élément

22
Tableaux (II)
• Parcours d’un tableau.
$tab = array(‘Hugo’, ‘Jean’, ’Mario’);

• 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.
23
Tableaux (III)
• 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

24
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’’ => ‘’César’’, ‘’Prénom’’ => ‘’Jules’’);

• Exemple 2 :
$personne[‘’Nom’’] = ‘’César’’;
$personne[‘’Prénom’’] = ‘’Jules’’;

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

25
Tableaux associatifs (II)
• Parcours d’un tableau associatif.
$personne = array(‘’Nom’’ => ‘’César’’, ‘’Prénom’’ => ‘’Jules’’);

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

26
Tableaux associatifs (III)
• 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

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


• Les tableaux associatifs permettent de préserver une structure de
données.
27
Fonctions (I)
• Comme tout langage de programmation, php permet l’écriture de fonctions.
• Les fonctions peuvent prendre des arguments dont il n’est pas besoin de
spécifier le type. Elles peuvent de façon optionnelle retourner une valeur.
• L’appel à une fonction peut ne pas respecter son prototypage (nombre de
paramètres). Les identificateurs de fonctions sont insensibles à la casse.

• Exemple :
function mafonction($toto) {
$toto += 15;
echo ‘’Salut !’’;
return ($toto+10);
}
$nbr = MaFonction(15.1);
/* retourne 15.1+15+10=40.1, les majuscules n’ont pas d’importance */
28
Fonctions (II)
• Les paramètres sont passés par copie et les résultats sont retournés par copie (sauf à
forcer la référence). 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 de type chaîne


return ‘’black’’;
}

29
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. Est équivalent au préprocesseur
#include du C.
• Exemple :
require(‘’fichier.php’’);

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


contenu du fichier passé en argument.
• Exemple :
include(‘’fichier.php’’);

30
Arrêt prématuré
Pour stopper prématurément un script, il existe deux fonctions.

• die arrête un script et affiche un message d’erreur dans le navigateur.


• Exemple :
if(mysql_query($requette) == false)
die(‘’Erreur de base de données à la requête : <br />$requet’’);

• exit l’arrête aussi mais sans afficher de message d’erreur.


• Exemple :
function foobar() {
exit();
}

• Ces fonctions stoppent tout le script, pas seulement le bloc en cours.

31
Variables d’environnement
• Le langage php est doté d’une multitude de variables d’environnement que la
fonction phpinfo() permet d’afficher (ainsi que bien d’autres informations sur
la configuration du serveur Apache). Ces variables permettent au script
d’accéder à des informations très utiles voire quelques fois indispensables.

• Quelques variables :
ƒ $PHP_SELF : nom du script en cours
ƒ $HTTP_ACCEPT : liste des types MIME supportés par le client
ƒ $HTTP_USER_AGENT : signature du navigateur du client
ƒ $REMOTE_ADDR : adresse IP du client
ƒ $QUERY_STRING : chaîne au format URL contenant les paramètres passés à la
page en cours
ƒ $HTTP_REFERER : URL de la source ayant renvoyée le client sur la page en
cours (en l’analysant, on peut connaître le moteur de recherche utilisé ainsi que les
mots clés entrés par l’internaute, s’il vient effectivement d’un moteur de recherche;
permet d’évaluer la qualité du référencement d’un site web)

32
Les formulaires HTML

33
Motivation
• HTML 1.0 est non-directionnel
ƒ Les informations sont fournies par le serveur à un client (le navigateur)
• HTML 2.0 introduit les formulaires
ƒ Permettent aux clients de saisir des informations qui seront envoyées au
serveur
• Un formulaire est défini en HTML et peut contenir :
ƒ zones de saisie de texte
ƒ boites à cocher
ƒ boutons radio
ƒ menus déroulants
ƒ boutons

34
Exemple de formulaire

<form action="http://monserveur.com/prog.php" method="post">


<p>Nom <input name="client" size="46" /></p>
<p>Rue <input name="rue" size="40" /> </p>
<p>Ville <input name="ville" size="40" /> </p>
<p<Code postal <input name="cp" size="5" /> </p>
<p>Carte de crédit No <input name="carte" />
Expire <input name="expire" type="text" size="4" /></p>
<p> M/C <input name="cc" type=“radio" value="mc" CHECKED />
VISA <input name="cc" type=“radio" value="vis" /> </p>
<p>Contre remboursement <input name="cr" type=“checkbox“ />
</p>
<p><input type=“submit" value="Envoi"></p>
<p><input type=“reset" value="Remise à zéro"> </p>
</form>

35
Exemple de formulaire

36
Balises <FORM>
• Déclaration d'un formulaire

• <FORM ACTION=.. METHOD=.. NAME=.. >


<form action="http://monserveur/mapage.php"
method="post"
name="monformulaire"> … </form>

ƒ ACTION : URL vers laquelle envoyer les données saisies


ƒ METHOD : commande HTTP à utiliser pour effectuer l'envoi : GET ou
POST
ƒ NAME : nom du formulaire

• Toutes les balises HTML sont permises entre <form> </form>


ƒ des images, tableaux, ... peuvent être inclus dans un formulaire
ƒ des formulaires peuvent être insérés à l'intérieur d'un autre formulaire

37
Eléments de formulaire
Les éléments de formulaires sont répartis en 3 classes :
• Input
Champs de saisie de texte et différents types de boutons
• Select
Listes (menus déroulants et ascenseurs)
• Textarea
Zone de saisie de texte libre

38
Balise <INPUT>
• Déclaration des champs de saisie (exclusivement entre <FORM> </FORM>)

• t <input type="text" name="lenom" … />


ƒ TYPE : type du champ de saisie
ƒ NAME : nom du champ de saisie (unique à l'intérieur d'un formulaire)

• Types possibles (TYPE=...)


ƒ TEXT zone de saisie texte (type par défaut en cas d'omission de TYPE) SIZE :
taille de la zone
ƒ RADIO bouton radio : tous les boutons ayant même nom (NAME) appartiennent
au même groupe. Dans ce cas, les attributs (VALUE) permettent de les différencier
ƒ CHECKBOX boîte à cocher
ƒ SUBMIT bouton d'envoi des données au serveur
ƒ RESET bouton d'effacement du formulaire

39
Autres types possibles pour la balise <INPUT>
• PASSWORD zone de saisie d'un mot de passe + attribut
ENCTYPE
• FILE sélection d'un fichier à envoyer

<form action="http://monserveur.com/prog.php" method="post"


enctype="multipart/form-data">
<p>Mot de passe <input type="password" name="pwd" size="16"/>
</p>
<p>Sélectionner un fichier <input type="file" name="fichier"/>
<input type="submit" value="Envoi" />
<input type="reset" value="Remise à zéro" />
</p>
</FORM>

40
Autres types possibles pour la balise <INPUT>
• PASSWORD les caractères saisis sont remplacés par des *
• FILE provoque l'affichage
ƒ d'un champ de saisie du nom du fichier
ƒ d'un bouton Parcourir pour sélectionner
ƒ via une fenêtre de parcours du disque

41
Autres types possibles pour la balise <INPUT>
• HIDDEN : champ caché (ne provoque aucun affichage)
• BUTTON : un bouton simple => association avec un traitement
JavaScript

< form action="http://monserveur.com/prog.php" method="post" >


Champ caché <input type="hidden" name="cache" value="Cecile">
<input type="button" value="Cliquez" onClick="fonctionJS()">
<input type="submit" value="Envoi">
<input type="reset" value="Remise à zéro"> <P>
</form>

42
Balises <TEXTAREA> et <SELECT>
• TEXTAREA zone de saisie d'un texte sur plusieurs lignes
• SELECT définition d'un menu déroulant
• balise OPTION pour définir les choix du menu

<form action="http://monserveur.com/prog.php" method= "post" >


<textarea name="zone" rows= "3" cols= "40" >texte initial</textarea>
<P>
<select name="musicTypes">
<option> R&B </option>
<option> Jazz </option>
<option> Blues </option>
<option> New Age </option>
</select> <P>
<input type="submit" value="Envoi">
</form>

43
Balises <TEXTAREA> et <SELECT>

44
Balise <SELECT> multiple
• SELECT MULTIPLE définition d'un menu déroulant à choix
multiples
• Par défaut taille zone = 4, sinon attribut size

<form action="http://monserveur.com/prog.php"
method="post">
<select multiple name="musicTypes">
<option> R&B </option>
<option> Jazz </option>
<option> Blues </option>
<option> New Age </option>
</select> <P>
<input type="submit" value="Envoi">
</form>

45
Récupération des données par PHP
• Les informations fournies dans le formulaire sont récupérables via
des variables de type tableau associatif.
• L’attribut name du champ est la clé de la donnée dans le tableau
associatif.
• Le tableau qui contient les données dépend de la provenance de la
donnée, et notamment si l'attribut METHOD du formulaire est
GET ou POST.
ƒ $_POST['donnee'] : s'utilise lorsque l'attribut METHOD du formulaire est
POST.
ƒ $_GET['donnee'] : s'emploie lorsque l'attribut METHOD du formulaire est
GET ou bien lorsque celui-ci n'est pas (ou pas correctement) spécifié.
ƒ $_REQUEST[‘donnee’] : s’utilise aussi bien lorsque l'attribut METHOD du
formulaire est POST que s’il est GET.
ƒ $_FILES['la_variable'] : récupérer la valeur d'une variable de fichier
envoyée par un formulaire.
46
Récupération des données
• Exemple

<html>
<head>
<title>Ma page de test</title>
</head>
<body>
<form action="traitement.php" method="post">
Votre nom : <input type="text" name="nom" /><br>
Votre fonction : <input type="text" name="fonction" /><br>
<input type=‘hidden’ name=‘etat’ value=‘1’/><br>
<input type="submit" value="Envoyer">
</form>
</body>
</html>

47
Récupération des données
• Lorsque l'utilisateur cliquera sur le bouton "Envoyer", les données
du formulaire seront envoyées sur la page traitement.php.
• Dans la page traitement.php, nous allons récupérer les données
dans la variable $_POST de type tableau associatif.
ƒ $_POST['nom'] : contient la chaîne de caractères qu’a saisi le visiteur dans
le champ pour lequel l’attribut name vaut ‘nom’.
ƒ $_POST['fonction'] : contient la chaîne de caractères qu'a saisi le visiteur
dans la champ "Votre fonction : "
ƒ $_POST[‘etat'] : contient la valeur du champ caché dont l’attribut name
prend la valeur état.

48
Récupération des données
• Prenons ensuite le code suivant pour la page traitement.php :
<html>
<head>
<title>Ma page de traitement</title>
</head>
<body>
<?
// on teste la déclaration de nos variables
if (isset($_POST['nom']) && isset($_POST['fonction'])) {
// on affiche nos résultats
echo 'Votre nom est '.$_POST['nom'].‘;
echo ‘ et votre fonction est '.$_POST['fonction'].’<br>’;
}
if(isset($_POST[‘etat‘])){
if($_POST[‘etat’]==1){
echo ‘Vous êtes en pleine forme.’;
}else{
echo ‘Vous êtes malade.’;
}
}
?>
</body>
</html>
49
Récupération des données
• La page retournée au client affiche:
ƒ Votre nom est Jean Dupont et votre fonction est employé.
Votre état est 1.

• Dans le cas où le formulaire utilise une méthode get, nous


utilisons la variable tableau $_GET.

50
Récupération de fichiers
• Cas des formulaires munis d'un champ de type file permettant le
téléchargement de fichiers (de chez vous vers le serveur ou
upload).

<html>
<head>
<title>Ma page de test</title>
</head>
<body>
<form action = "traitement.php" method="post"
enctype="multipart/form-data">
Votre fichier : <input type="file" name="mon_fichier">
<br>
<input type="hidden" name="MAX_FILE_SIZE" value="20000">
<input type="submit" value="Envoyer">
</form>
</body>
</html>

51
Récupération de fichiers
• Pour récupérer votre fichier, vous avez à votre disposition le tableau $_FILES
qui aura plusieurs entrées :
ƒ $_FILES['mon_fichier']['tmp_name'] : le nom temporaire du fichier sur le serveur
ƒ $_FILES['mon_fichier']['name'] : le nom original du fichier sur la machine cliente
ƒ $_FILES['mon_fichier']['type'] : le type MIME du fichier
ƒ $_FILES['mon_fichier']['size'] : la taille du fichier

• Naturellement, vous pourrez utiliser ces valeurs pour tester votre fichier.
• Si il correspond à vos attentes, vous pourrez finaliser votre téléchargement à
l'aides des fonctions copy ou move_uploaded_file (afin de copier le fichier
téléchargé sur le disque dur du serveur).

52
Méthodes GET et POST
• La méthode GET permet d'envoyer les éléments du formulaire au travers de
l'URL du script, en ajoutant l'ensemble des paires nom/valeur à l'URL du script,
séparé de celui-ci par un point d'interrogation, ce qui donne un URL du type :
http://nom_du_serveur/cgi-bin/script.cgi?champ1=valeur1&champ2=valeur2...
• Toutefois, la longueur de la chaîne URL étant limitée à 255 caractères, les
informations situées au-delà de cette limite seront irrémédiablement perdues.
De plus, cela crée une URL surchargée dans la barre d'adresse d'un navigateur
et peut dévoiler des informations sensibles comme un mot de passe...
• Ainsi, la méthode POST est une bonne alternative à la méthode GET. Cette
méthode code les informations de la même façon que la méthode GET mais elle
envoie les données à la suite des en-têtes HTTP, dans un champ appelé corps
de la requête. De cette façon la quantité de données envoyées n'est plus limitée,
et est connue du serveur grâce à l'en-tête permettant de connaître la taille du
corps de la requête.

53
PHP et MySQL

54
Connexion (I)
• Pour se connecter à une base depuis php, il faut spécifier un nom de serveur, un
nom d’utilisateur, un mot de passe et un nom de base.
• Les fonctions de connexion :
ƒ mysql_connect($server,$user,$password) : permet de se connecter au serveur
$server en tant qu’utilisateur $user avec le mot de passe $password, retourne
l’identifiant de connexion si succès, FALSE sinon
ƒ mysql_select_db($base[,$id]) : permet de choisir la base $base, retourne TRUE en
cas de succès, sinon FALSE
ƒ mysql_close([$id]) : permet de fermer la connexion
ƒ mysql_pconnect : idem que mysql_connect sauf que la connection est persistante,
il n’y a donc pas besoin de rouvrir la connexion à chaque script qui travaille sur la
même base.
• Les identifiants de connexion ne sont pas nécessaires si on ne se connecte qu’à
une seule base à la fois, ils permettent seulement de lever toute ambiguïté en
cas de connexions multiples.

55
Connexion (II)
• Exemple 1 :
if( $id = mysql_connect(‘’localhost’’,’’dupont’’,’’1234’’) ) {
if( $id_db = mysql_select_db(‘’lenomdemabase’’) ) {
echo ‘’Succès de connexion.’’;
/* code du script … */
} else {
die(‘’Echec de connexion à la base.’’);
}
mysql_close($id);
} else {
die(‘’Echec de connexion au serveur de base de données.’’);
}

56
Interrogation
• Pour envoyer une requête à une base de donnée, il existe la fonction :
mysql_query($str) qui prend pour paramètre une chaîne de caractères qui
contient la requête écrite en SQL et retourne un identificateur de résultat ou
FALSE si échec.
• Les requêtes les plus couramment utilisées sont : CREATE (création d’une
table), SELECT (sélection), INSERT (insertion), UPDATE (mise à jour des
données), DELETE (suppression), ALTER (modification d’une table), etc.
• Exemple :
$result = mysql_query(‘’SELECT address FROM users WHERE
name=\’’$name\’’’’);
• Cet exemple recherche l’adresse de l’utilisateur portant pour nom la valeur de
la chaîne $name. L’identificateur de résultat $result permettra à d’autres
fonctions d’extraire ligne par ligne les données retournées par le serveur.
• Attention, les requêtes MySQL ne se terminent pas par un point virgule ‘;’

57
Extraction des données (I)
• Une fois la requête effectuée et l’identificateur de résultat acquis, il ne reste
plus qu’à extraire les données retournées par le serveur.
• Ll’affichage des résultats d’une requête se fait ligne par ligne. Une boucle
permettra de recueillir chacune des lignes à partir de l’identifiant de résultat.

• SQL > SELECT * FROM users;


• ID NAME ADDRESS
• ----------------------------
• 1 Boris Moscou ← 1ère ligne
• 2 Bill Washington ← 2ème ligne
• 3 William London ← 3è ligne

• Une ligne contient (sauf cas particulier) plusieurs valeurs correspondants aux
différents attributs retournés par la requête. Ainsi, une ligne de résultat pourra
être sous la forme d’un tableau, d’un tableau associatif, ou d’un objet.
58
Extraction des données (II)
• mysql_fetch_row($result) : retourne une ligne de résultat sous la forme d’un tableau.
Les éléments du tableau étant les valeurs des attributs de la ligne. Retourne FALSE s’il
n’y a plus aucune ligne.
• Exemple 1 :
$requet = ‘’SELECT * FROM users’’;
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_row($result)) {
$id = $ligne[0];
$name = $ligne[1];
$address = $ligne[2];

echo ‘’$id - $name, $address <br />’’;


}
} else {
echo ‘’Erreur de requête de base de données.’’;
}
• Ici, on accède aux valeurs de la ligne par leur indice dans le tableau.
59
Extraction des données (III)
• mysql_fetch_array($result) : retourne un tableau associatif. Les clés étant les noms des
attributs et leurs valeurs associées leurs valeurs respectives. Retourne FALSE s’il n’y a
plus aucune ligne.

• Exemple 2 :
$requet = ‘’SELECT * FROM users’’;
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_array($result)) {
$id = $ligne[‘’id’’];
$name = $ligne[‘‘name’’];
$address = $ligne[‘’address’’];
echo ‘’$id - $name, $address <br />’’;
}
} else {
echo ‘’Erreur de requête de base de données.’’;
}
• Ici, on accède aux valeurs de la ligne par l’attribut dans le tableau associatif.
60