ppt

publicité
ARS4:Supervision, contrôle des
procédés
Mise en ouvre d’une supervision
1
Mise en ouvre d’une supervision
• Différentes stratégies de supervision
• Outils de mise en ouvre de page web
– Philosophie: statique/dynamique
– Les bases du langage xhtml
– Page web dynamique: le langage php
2
Stratégie de supervision
Administration
ERP (BDD)
Commerciale
CLIENT
Bureaux
d’étude
(CFAO,
GMAO)
Heures, jours
Minutes, Heures
MES (BDD)
CLIENT
SERVEUR
SUPERVISION
(BDD)
TCP/IP Intranet
SERVEUR
HMI
Poste Opérateur
CLIENT
SERVEUR
SERVEUR
RS485
BDD
Seconde
HMI
API
Module E/S
Capteurs/
Actionneurs
RS485
BDD
Poste Opérateur
API
Module E/S
Milliseconde
Capteurs/
3
Actionneurs
Stratégie de supervision
Administration
ERP (BDD)
Commerciale
CLIENT
Bureaux
d’étude
(CFAO,
GMAO)
Heures, jours
Minutes, Heures
MES (BDD)
CLIENT
SERVEUR
SUPERVISION
(BDD)
TCP/IP Intranet
Seconde
CLIENT
SERVEUR
SERVEUR
SERVEUR
HMI
API
HMI
Module E/S
API
Module E/S
Milliseconde
Poste Opérateur
Capteurs/
Actionneurs
Poste Opérateur
Capteurs/
4
Actionneurs
Stratégie de supervision
•
•
•
•
•
Communication avec les API
Sauvegarde dans des Base De Données
Communication Client Serveur
Affichage
Périodicité
5
Stratégie de supervision
Besoins
Logiciel de supervision
Programmation Internet
Communication API
Driver fournis par le
constructeur
ActiveX et langade de
script (VBscript,
JavaScript, etc.)
Communication
Client/Serveur
Implémenter dans le
logiciel, configurable
par l’utilisateur.
Langage php (asp
chez microsoft)
Base de données
Connexion à une BDD Serveur de base de
extérieur, ou BDD
données (MySQL,
interne.
SQLserver,
ORACLE,etc.)
Affichage des
information
Bibliothèque de
symbole
Programmatio des
pages web en xhtml,
php.
Périodicité
paramétrable
Timer
6
Outils de mise en ouvre de page web
• Philosophie: statique/dynamique
• Les bases du langage xhtml
• Page web dynamique: le langage php
7
Philosophie: statique/dynamique
Statique
Dynamique
Envoie de l ’URL
avec des paramètres
Le serveur
envoie la
page html
La page est la même quelque soit
l ’utilisateur qui la lit. Il n ’y a pas
d ’interaction de l ’utilisateur sur le
contenu de la page.
Le fichier php
renvoie au
serveur la
page html
Le serveur
ouvre le
fichier php
Le fichier php interroge la
BDD et construit la page
html
8
Le langage
XHTML
9
Les bases du langage xhtml
La page minimum
Balise ouvrante
Balise
fermante
Le langage xhtml est un langage à balises
Toutes les zones sont délimitées par une balise ouvrante et une balise
fermante. Exemple: <head> … </head>, <body> … </body>
Une page xhtml est décomposée en 2 parties:
•l ’en-tête: délimité par les balises « head ». Il sert à donner des
informations aux navigateur (titre de la page, langue (fr), l ’auteur,
l ’encodage des caractère, etc.)
•le corps (body): c ’est la partie affiché dans la fenêtre du navigateur.
10
Les bases du langage xhtml
Les balises de contenu:
•div: division, organisation du contenu.
•p: paragraphe
Les balises de liens, de listes et d ’image:
•a: liens
•ul, li, ol: listes
•img: image
Les tableaux
•table, tr, td: éléments de tableaux
Les formulaires:
•form: déclaration de formulaire
•input, select: interface avec l ’utilisateur, saisie
d ’informations
11
Les balises de contenu
12
La balise de liens
13
Les listes
14
Les tableaux
15
Les tableaux
16
Les tableaux
17
Les tableaux
18
Les formulaires
19
Les formulaires
20
Les formulaires
21
Les formulaires
22
Les formulaires
23
Les formulaires
24
Les bases du langage
XHTML
Exercice
25
Exercice
Donner le code de la page xhtml qui permet d ’obtenir l ’affichage suivant:
100 px
50 px
25 px
400 px
300 px
50 px
26
Le langage
Dynamique
PHP
27
PLAN
 Le langage SERVEUR PHP
• Premier programme
 Eléments du langage php
• Les constantes
• Les opérateurs
• Les tests
• Les boucles
• Les tableaux
• Les fonctions (notion de librairies)
 Les formulaires
• 1er formulaire
• Traitement des contrôles (radio,coche,liste)
• Problème de saisie: magic_quote
• Exemple complet : ré-affichage
• Contrôle des données en javascript
 Les BDD (MySQL)
• Connexion/déconnexion
• Requêtes ACTION
• Requêtes SELECT
• Exemple de formulaire d'édition
 Les SESSIONS
• Cookies/ Variables de SESSION
 AJAX
• Intérêt
• Mise en œuvre (avec prototype)
28
Qu'est-ce que le PHP?
PHP est un langage de traitement traité par le serveur qui permet de construire
dynamiquement des pages HTML contenant les résultats provenant de calculs
ou de requêtes SQL adressées à un système de gestion de bases de données
(SGBD).
29
Mon premier programme PHP
CONFIGURATION
C:\EasyPHP
Le dossier des pages web (par défaut) est donc : C:\EasyPHP\www
On suppose que EasyPHP est installé dans le dossier
Si on fait les tests de développement sur la machine locale où
tourne le serveur, alors, dans le navigateur (FF ou IE), les pages
sont accessibles à partir de l'adresse URL : http://localhost/
On crée la page
C:\EasyPHP\www\page1.php
<html>
<head>
<title>Ma première page PHP</title>
</head>
<body>
<?php
echo "<p>bonjour, les GEII !<p>\n";
print("<p>Géniaux Etudiants Infatigables et Intelligents</p>\n");
?>
<p>Aujoud'hui nous sommes le <?php echo Date("l F d Y");"\n";?></p>
</body>
</html>
30
Mon premier programme PHP
Remarques :
• la page est généralement sauvegardée en lui donnant l'extension .php
• le script PHP se trouve entre les balises <?php et
?>
• la page contient ici une alternance de balises HTML 'classiques' et
de 'morceau de code' PHP
• echo ou print sont des fonctions PHP qui servent à produire un
affichage
• pour que echo affiche le texte tel quel, ce texte doit être entouré de
guillemets (") . Sinon echo essaie de comprendre.
par exemple echo 1+2; provoque l'affichage de 3. Tandis que
echo "1+2"; provoque l'affichage de 1+2 .
• date est une fonction PHP qui affiche la date (les paramètres permettent
de définir le format)
l - ('L' minuscule) - Jour de la semaine,
F - Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier)
d - Jour du mois, sur deux chiffres (éventuellement avec un zéro) : "01" à "31"
Y - Année, 4 chiffres; i.e. "1999"
31
Mon premier programme PHP
Sur notre navigateur, on va saisir :
On obtient à l'écran :
http://localhost/page1.php
En allant voir le code source de la page reçue par le navigateur, on voit :
<html>
<head>
<title>Ma première page PHP</title>
</head>
<body>
<p>bonjour, les GEII !<p>
<p>Géniaux Etudiants Infatigables et Intelligents</p>
<p>Aujoud'hui nous sommes le Wednesday March 03 2010</p>
</body>
</html>
On constate qu'il n'y a plus aucune balise PHP.
C'est normal : souvenez-vous que le serveur exécute le programme et n'envoie au
client que le résultat, pas le programme lui-même.
32
Remarque sur echo
 La commande echo est légèrement plus rapide que print.
 On peut inclure des retours chariots, des sauts de ligne, des tabulations... Qui
ne seront visibles que dans le formatage du code source HTML.
Séquence d'échappement
Signification
Voici les principales
nouvelle ligne
séquences utilisables : \n
\r
retour chariot
\t
tabulation horizontale
 Si la chaîne à afficher contient un " (guillemet) il faut alors ajouter un antislash \
echo "un caractère \" guillemet";
echo 'un caractère " guillemet';
33
ELEMENTS
DU LANGAGE
PHP
Les
Lesvariables
variables
 Les constantes
 Les chaînes de caractères
 Les opérateurs
 Les tests
 Les boucles
 Les tableaux
 Les fonctions
34
Les variables en PHP
 Rappelons que les variables sont des zones mémoires où l'on stocke des valeurs.
 En PHP, tous les noms de variable commencent obligatoirement par le
signe $.
 L'affectation d'une valeur à une variable s'effectue par le signe = (attention
la comparaison s'effectue avec ==).
 En PHP, il n'est pas nécessaire de déclarer au préalable les variables qui
seront utilisées, ni de préciser leur type.
 PHP est un langage dit de "typage faible et dynamique", dynamique car le
type de la variable évolue en fonction de la valeur que vous lui assignez.
PHP est sensible à la casse !
$val
$calcul
$unechaine
$var_hexa
$valeur_double
$double2
$a
=
=
=
=
=
=
=
 la variable $a n'est pas identique à $A
1; // une valeur entière
$val/10;
"Bonjour, tous le monde";
0x1A;
// en héxadécimal 26
12.3;
0.123E2; // 12.3
-123e-1;
// -12.3
35
Quelques pièges sur les variables
La présence de l'opérateur "+" convertit automatiquement le type en numérique.
$var = "0";
echo "1. \$var=$var<br>";
$var++;
echo "2. \$var=$var<br>";
$var = $var + 1;
echo "3. \$var=$var<br>";
$var += 1.3;
echo "4. \$var=$var<br>";
$var = 2 + "8 arbres";
echo "5. \$var=$var<br>";
//$var est la chaîne de caractères "0" (code ASCII 48)
//$var est la chaîne de caractères "1" (code ASCII 49)
//$var est un entier et vaut 2
//$var est de type "double" et vaut 3.3
//$var est de type "integer" et vaut 10
Quelques fonctions utiles sur les variables
• isset(variable) permet de savoir si la variable a été définie (affectée). Elle renvoie TRUE si
c'est le cas, FALSE sinon.
• empty(variable) permet de savoir si la variable est vide ou non.
• gettype() retourne le type de la variable.Les valeurs retournées sont les suivantes :
"boolean" ,"integer","double" ,"string","array","object","resource","NULL"
• unset(variable) détruit une variable
36
Portée des variables
 La portée d'une variable est le script dans lequel elle a été définie.
 La durée de vie est le temps d'exécution du script. Si le script est relancé
plus tard , de nouvelles variables sont définies.
Remarque : pour conserver la valeur de la variable, on peut utiliser les variables de
SESSION
 Si on veut utiliser une variable globale dans une fonction, alors il faut
spécifier le mot global
Résultat du premier appel du script
function ajouter() {
global $var1
$var1=$var1. " et Hardy";
}
echo "\var1=$var1<br>";
$var1 = "Laurel";
echo "\var1=$var1<br>";
ajouter();
echo "\var1=$var1<br>";
Var1=
var1=Laurel
var1=Laurel et Hardy
Résultat du second appel du script
Var1 est vide au début, car elle est redéfini au lancement du script
Var1=
var1=Laurel
var1=Laurel et Hardy
37
ELEMENTS
DU LANGAGE
PHP
 Les variables
 Les
Les constantes
constantes
 Les chaînes de caractères
 Les opérateurs
 Les tests
 Les boucles
 Les tableaux
 Les fonctions
38
Les constantes
Une constance est une référence à une valeur qui ne change pas
define(nom, valeur) définit une constante (valeur fixe) :
– le nom d'une constante suit la syntaxe PHP des identificateurs sans le $ !
– la valeur est de type integer, boolean, float ou string
– sa portée est globale
– elle est définie une et une seule fois par define()
define("PI", 3.1416);
define("BR", "<br>");
define("SITE", "<b>Intranet GEII</b>");
echo PI; echo <BR />;
$a = 2 * PI ;
echo $a; echo <BR />;
echo SITE
3.1416
6.2832
Intranet GEII
On peut enfin vérifier la présence d'une constante avec la fonction defined() qui
renvoie 1 si cette première a été déclarée et 0 dans le cas contraire :
if (defined("SITE")) {
echo SITE;
}
39
ELEMENTS
DU LANGAGE
PHP
 Les variables
 Les constantes
 Les
Les chaînes
chaînes de
de caractères
caractères
 Les opérateurs
 Les tests
 Les boucles
 Les tableaux
 Les fonctions
40
Chaîne de caractères

L'opérateur "." sert à concaténer 2 chaînes de caractères
 Les caractères d'une chaîne sont indexés par
leur position (début à 0)
$a =
echo
echo
echo
echo
echo
echo
echo
position
I
U
T
0
1
2
"abc";
"entre guillemets : $a <br>" ;
'entre quotes : $a <br>';
"combinaison de 'quottes' et de \"guillemets\"<br>";
'autre combinaison de \'quottes\' et de "guillemets"<br>';
"le passage \n a la ligne doit être écrit en HTML !<br>";
"le backslash \\ lui-meme<br>";
"et le dollar \$";
entre guillemets : abc
entre quottes : $a
combinaison de 'quottes' et de "guillemets"
autre combinaison de 'quottes' et de "guillemets"
le passage à la ligne doit être écrit en HTML !
le backslash \ lui-même
et le dollar $
41
Quelques fonctions sur les chaînes
• chr(0x65)  e
chr (num) retourne une chaîne d'un seul caractère, dont le code ASCII est égal à
l'entier num
• strtolower("aBCd")  abcd
• strtoupper("aBCd")  ABCD
• trim(" aBCd sdf ")  aBCd sdf
trim(chaîne) supprime les caractères invisibles en début et fin de chaîne
•nl2br("ligne1\nligne2")  ligne1<br/>
ligne2
insère <br/> devant tout les caractères de fin de ligne de la chaîne
• strlen("abcd")  4
longueur de la chaîne
• strcmp("abcd","aac")  1
strcmp retourne < 0 si str1 est inférieure à str2 ; > 0 si str1 est supérieure à
str2 , et 0 si les deux chaînes sont égales (sensible à la casse)
• strpos("une ligne pour chercher","ne")  1
donne la position de la chaîne 2 dans la chaîne 1
• strpos("une ligne pour chercher","ne",2)  7
donne la position de la 2ième occurrence de la chaîne 2 dans la chaîne 1
 strrev("abcd")  dcba
inverse la chaîne
 substr("une ligne pour chercher",4,5)  ligne
substr(chaîne, position, longueur) retourne la sous-chaîne de chaîne commençant en
position et de longueur indiquée (l'indice de début d'une chaîne est 0!)
42
Quelques fonctions sur les chaînes
 str_replace("ne", "NE", "une ligne pour chercher")  uNE ligNE pour chercher
str_replace(ancien, nouveau, chaîne_a_modifier) remplace toutes les
occurrences de la chaîne ancien par la chaîne nouveau dans la chaîne_a_modifier
(depuis PHP4, les paramètres peuvent être des tableaux de chaînes et str-replace a
alors d'autres fonctionnalités)
 addslashes(chaîne) ajoute des backslashes aux caractères ' " \ et le caractère nul
pour les requêtes le nécessitant en requête de bases de données
 sprintf('$x = %d', 3)  $x = 3 ; sprintf('$x =%1.1f', 3.42)  $x =3.4
formate l'affichage comme le sprintf du C
 explode(séparateur, chaîne) découpe la chaîne en sous-chaînes en utilisant le
séparateur (de type chaîne). Le résultat est le tableau de sous-chaînes obtenues.
$pizza = "garniture1 garniture2 garniture3 garniture4";
$pieces = explode(" ", $pizza);
$pieces[0] "garniture1", $pieces[1] "garniture2",..,$pieces[3]"garniture4"
 implode(séparateur, array) retourne une chaîne contenant tous les éléments du tableau
séparés par le séparateur (de type chaîne).
$array = array('nom', 'email', 'telephone');
$chained = implode(",", $array);
$chaine  "nom,email,telephone"
43
ELEMENTS
DU LANGAGE
PHP
 Les variables
 Les constantes
 Les chaînes de caractères
 Les
Les opérateurs
opérateurs
 Les tests
 Les boucles
 Les fonctions
 Les tableaux
44
Les opérateurs
Les opérateurs vont permettre de manipuler les variables.
opérateurs de calcul + - * /
* (multiplier), + (additionner), - (soustraire), / (diviser), = (affecter) , % (prendre le reste de la division =
modulo).
$a=5;$b=2;
($a/$b)  2
($a%$b)  1
opérateurs de comparaison ==, <, …
Ils sont utilisés dans les instructions de conditions (if …. then ….).
if ($x == 0)
if ($x != 0)
signifie si x = 0
signifie si x différent de 0
Les opérateurs associatifs += -= *= /=
Ils permettent à la fois le calcul et l'affectation de la valeur calculée à une variable.
$x+=$y
est équivalent à $x=$x+$y
45
Les opérateurs (suite)
Les opérateurs logiques && (ou and) || (ou or) !
Ils servent à comparer 2 expressions.
if
if
if
if
if
(
(
(
(
(
$x > 10 && $y < b ) … si x > 10 et y < b alors …
$x < 0 || $z == 1) … si x < 0 ou z = 1 ou les deux alors …
$x < 0 xor $z == 1) … si x < 0 ou z = 1 mais pas les deux alors …
!$x) … si $x ne vaut pas true …
$x) … si $x vaut true
Les opérateurs d'incrémentation ++ et -Ils servent à augmenter (ou diminuer) de 1 la valeur d'une variable. Ils sont très utilisés .
$i++ équivalent de $i = $i + 1
$i-- équivalent de $i = $i - 1
46
ELEMENTS
DU LANGAGE
PHP
 Les variables
 Les constantes
 Les chaînes de caractères
 Les opérateurs
Les
Lestests
tests
 Les boucles
 Les tableaux
 Les fonctions
47
Les tests [1/2]
Les structures de contrôle permettent notamment d'effectuer des tests sur des
valeurs de variables, des résultats de fonction pour exécuter ou non d'autres
instructions en fonction des résultats attendus de ces tests.
IF … THEN …ELSE
if (!isset($POST[‘nom’])) { //si la variable $_POST[‘nom’] n ’est pas affectée
echo "Bonjour, inconnu, je vais vous appeler Michel!";
$nom= "Michel"; // on affecte la valeur «Michel» à la variable $nom
}
Ce test, fort utile par la suite, permet de vérifier qu'une variable existe via la fonction isset(). Ceci permet
par exemple de savoir si un formulaire HTML a été rempli ou non en passant la variable "nom".
$n1=mt_rand(0, 9); // nombre aléatoire entre 0 et 9
Pour recopier plusieurs fois
$n2=mt_rand(0, 9);
une chaîne de caractères
$n3=mt_rand(0, 9);
echo "NOMBRE=$n1$n2$n3<br>\n";
if ($n1==4 && $n2==2 && $n3==1)
{
echo "BRAVO, vous avez gagné ".str_repeat("!",50)."<br>\n";
} else
{
NOMBRE=588
echo "COURAGE, essayez encore. :-] <br>\n";
COURAGE, essayez
}
encore. :-]
Remarque : PHP reconnaît aussi une syntaxe raccourci pour les tests :
$a=($b>$c)? 1 : 2;
Cette instruction d'affectation compare les valeurs de $b et $c. Si $b est supérieure à $c, la valeur 1
48
sera attribuée à $a, sinon ce sera la valeur 2.
Les tests [2/2]
SWITCH
L'instruction switch clarifie le code et évite plusieurs if imbriqués ou l'utilisation de elseif.
<?php
$langue="anglais";
?>
<head>
<title>les tests SWITCH en PHP</title>
</head>
<body>
<?php
switch ($langue)
{
case "français" : // 2 cas possibles
case "québécois" : ?>
<!--code HTML-->
Hé, mon ami, tu aimes manger les bonnes patates <br>
<?php
break;
case "espagnol": ?>
<!--code HTML-->
ola, amigo mio, a ti te le gusta comer las patatas buenas<br>
<?php
break;
default: ?>
<!--code HTML-->
Hey, my friend, do you like good potatoes ???? <br>
<?php
}
?>
</body>
</html>
49
ELEMENTS
DU LANGAGE
PHP
 Les variables
 Les constantes
 Les chaînes de caractères
 Les opérateurs
 Les tests
Les
Lesboucles
boucles
 Les tableaux
 Les fonctions
50
Les boucles [1/3]
Les boucles sont des structures qui permettent d'exécuter plusieurs fois une ou
plusieurs instructions en fonction d'une ou plusieurs conditions.
WHILE
Cette boucle permet d'effectuer le traitement tant que la valeur de l'expression est vraie.
$i=1;
echo "<h1>Table de multiplication de <b>6</b></h1>\n";
echo "<table width=\"100\" border=\"1\">\n";
while ($i<=10)
{
echo "<tr><td>$i</td><td>".(6*$i++)."</td></tr>\n";
}
echo "</table>\n";
<h1>Table de multiplication de <b>6</b></h1>
<table width="100" border="1">
<tr><td>1</td><td>6</td></tr>
<tr><td>2</td><td>12</td></tr>
<tr><td>3</td><td>18</td></tr>
<tr><td>4</td><td>24</td></tr>
<tr><td>5</td><td>30</td></tr>
<tr><td>6</td><td>36</td></tr>
<tr><td>7</td><td>42</td></tr>
<tr><td>8</td><td>48</td></tr>
<tr><td>9</td><td>54</td></tr>
<tr><td>10</td><td>60</td></tr>
</table>
51
Les boucles [2/3]
DO …. WHILE
Cette boucle appelée "jusqu'à" fonctionne comme la boucle while sauf que le bloc d'instruction est
au moins exécuté une fois puisque le test se fait à la fin de la structure.
$i=1;
echo "<h1>Table de multiplication de <b>7</b></h1>\n";
echo "<table width=\"100\" border=\"1\">\n";
do
{
echo "<tr><td>$i</td><td>".(7*$i++)."</td></tr>\n";
} while ($i<=10);
echo "</table>\n";
Le résultat est le même.
Notons que l'utilisation de cette boucle est nécessaire lorsque l'on souhaite que
les instructions soient au moins effectuées une fois.
52
Les boucles [3/3]
FOR
Cette boucle permet d'exécuter une ou plusieurs instructions un certain nombre de fois.
for (initialisation; condition_de_poursuite; action_a_chaque_tour) {
instructions;
}
 Initialisation contient les conditions de départ de la boucle (ex.: $c=0)
 Condition_de_poursuite est une condition qui détermine si la boucle doit se poursuivre (ex.: $i<10)
 action_a_chaque_tour représente le traitement effectuer à chaque nouveau tour de boucle (ex. : $i++)
$MAX_ETOILES=5;
$nbre_etoiles=3; //nombre d'étoiles à afficher devant le LIVRE
$etoiles="";
for ($i = 0 ; $i < $nbre_etoiles ; $i++)
{
$etoiles .= "<img src=\"img/et1.gif\">\n";
}
for (;$i<$MAX_ETOILES;$i++) $etoiles .= "<img src=\"img/et2.gif\">\n";
echo $etoiles;
53
ELEMENTS
DU LANGAGE
PHP
 Les variables
 Les constantes
 Les chaînes de caractères
 Les opérateurs
 Les tests
 Les boucles
Les
Lestableaux
tableaux
 Les fonctions
54
Les tableaux
 Pas de surprises avec les tableaux, l’utilisation est classique.
Tableaux à une dimension
$ville[0]
$ville[1]
$ville[2]
Echo "Je
= "toulouse";
= "paris";
= "Angoulême";
vis à ".$ville[1]."<BR>" ;
L'indice du premier
élément du tableau est 0
Dans les cas où l’on ne désire pas se préoccuper de mentionner les index, PHP le fera à votre place :
$ville[] = "toulouse";
$ville[] = "paris";
$ville[] = "Angoulême";
Si l’on désire savoir combien de valeurs ont été entrées dans un tableau, on utilisera la fonction count(tab) :
$limiteIndex=count($ville) ;
et pour les afficher :
for ($index = 0 ; $index < $limiteIndex ; $index++) {
echo (“$bab[$index] <BR>”);
}
Il est également possible d'indexer les tableaux autrement qu'avec des entiers :
$capitale[fr]="Paris";
$capitale[es]="Madrid";
print "La capitale de l'Espagne est : $capitale[es]";
55
Les tableaux
Initialisations
Il est également possible de déclarer un tableau avec ses initialisations. Ce type de
tableau est appelé associatif :
$mois=array(2=>"Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre",
"Novembre","Décembre") ;
echo "Mois de $mois[5]" ; // affichera "Mois de Avril"
L’opérateur => permet ici de faire démarrer le tableau à l’index 2 et non pas 0 comme c’est le cas par défaut.
Enfin , il n'est pas nécessaire d'avoir des tableaux avec des indices numériques successifs.
$tabbizarre[12] = "pas bien grand";
$tabbizarre[1025] = "plutôt grand";
$tabbizarre[15215] = "très grand";
Afin de réaliser un parcours efficace de ce genre de tableaux, on peut utiliser 2 méthodes :
 avec each et list : la fonction each permet de renvoyer uniquement les éléments du tableau contenant les
données. La fonction list ($cle, $valeur) récupère l'indice et la valeur de l'élément.
while (list($cle,$valeur) = each ($tabbizarre)) {
echo "$cle $valeur<br>";
}
 avec foreach : la fonction foreach passe en revue le tableau. A chaque itération les éléments
($cle,$valeur) sont récupérés et le pointeur interne avance d'un élément.
foreach ($tableau as $cle=>$valeur) {
echo "$cle $valeur<br>";
}
Tableaux à dimensions multiples
L’utilisation de tableaux à dimensions multiples est là encore semblable aux autres langages.
56
$matrice[5][4]
Les fonctions sur les tableaux
•
•
•
•
•
•
•
•
•
in_array(valeur,tableau)
retourne true si la valeur se trouve dans le tableau
explode(séparateur, chaîne)
découpe la chaîne en sous-chaînes en utilisant le séparateur (chaîne). Le résultat est
le tableau de sous-chaînes obtenues
implode (séparateur, array)
retourne une chaîne contenant tous les éléments du tableau séparés par le séparateur
(de type chaîne)
sort (array)
trie le tableau array (associatif ou non) dans l'ordre croissant des éléments !
ksort (array)
trie le tableau associatif suivant l'ordre croissant des clés. Elle maintient la
correspondance entre les clés et les valeurs.
array_key_exists(cle, tableau)
retourne true si une clé existe dans un tableau
array_keys(tableau)
retourne un tableau de toutes les clés du tableau en paramètre
array_slice(tableau, position, nombre)
retourne un sous-tableau extrait du tableau à partir de la position et composé de
nombre éléments
array_sum(tableau) :
retourne la somme des valeurs du tableau
57
ELEMENTS
DU LANGAGE
PHP
 Les variables
 Les constantes
 Les chaînes de caractères
 Les opérateurs
 Les tests
 Les boucles
 Les tableaux
 Les fonctions
58
Les fonctions
RAPPEL
 une fonction réalise une succession d'instructions et renvoie une valeur issue
d'un calcul (instruction return).
 une fonction peut (mais ce n'est pas obligé) accepter des valeurs (appelées
"arguments" ou "paramètres"). Si il y en a plusieurs, les arguments sont
séparés par des virgules.
 les instructions qui composent la fonction sont encadrées de { et }
 une fonction ne retourne pas OBLIGATOIREMENT une valeur (pas de return
dans ce cas)
/**
* calcule la surface d'un cercle à partir du rayon passé en paramètre
* @param rayon – la valeur du rayon.
* @return un double.
Il est intéressant de respecter une
*/
certaine forme d'écriture pour l'en tête
function calcul_surface_cercle ($rayon) {
de la fonction car on peut alors utiliser
$surf=3.14 * $rayon * $rayon;
des outils (comme DOXYGEN) de
return $surf; // ou return ($surf);
}
génération automatique de
Pour appeler l'exemple ci-dessus, on écrira :
$surface=calcul_surface_cercle (5); // $surface78.5
documentation des fonctions du code
59
Transmission des valeurs
 Par défaut, le passage des paramètres s'effectue par valeur: c'est une copie de
la valeur qui est passée à la fonction. Donc les modifications à l'intérieur de la
fonction n'ont aucun effet sur les valeurs dans le script appelant.
 Il est possible de passer une référence directe (une adresse) aux paramètres en
utilisant l'opérateur de référence &. La fonction travaille directement sur les
variables du script appelant.
Par valeur
function par_valeur ($param) {
$param++;
// affichage du paramètre dans la fonction
echo "paramètre=$param<br>";
}
// init de la variable
$x=1;
echo "AVANT appel \$x=$x<br>";
par_valeur($x);
echo "APRES appel \$x=$x<br>";
Résultat
AVANT appel $x=1
paramètre=1
APRES appel $x=1
Par référence
function par_valeur (&$param) {
$param++;
// affichage du paramètre dans la fonction
echo "paramètre=$param<br>";
}
// init de la variable
$x=1;
echo "AVANT appel \$x=$x<br>";
par_valeur($x);
echo "APRES appel \$x=$x<br>";
Résultat
AVANT appel $x=1
paramètre=1
APRES appel $x=2
60
Les librairies de fonctions
Au fur et à mesure de votre travail , vous allez construire des fonctions PHP très
utiles donc très souvent utilisées.
Il faut alors organiser son code.
Les fonctions importantes vont être regroupées dans des fichiers librairies
séparés.
Pour appeler ces fichiers librairies, on va écrire
ou
require (nom_de_fichier_librairie)
include (nom_de_fichier_librairie)
La fonction include() renverra une erreur de type WARNING si elle n'arrive pas à ouvrir le fichier en question. De ce fait
l'exécution du code qui suit dans la page sera exécuté. En revanche, la fonction require() affichera une erreur de type FATAL
qui interrompt l'exécution du script.
Par exemple, on peut créer le dossier C:\EasyPHP\www\lib\
et placer dans ce dossier un fichier perso.php qui contiendrait la fonction calcul_surface_cercle
Voici un exemple :
<?php
define("LIBRAIRIES",$_SERVER['DOCUMENT_ROOT']."/lib/");
require(LIBRAIRIES."perso.php");
Équivalent à l'écriture
?>
C:/EasyPHP/www/lib/
<head>
<title>les librairies en PHP</title>
</head>
<body>
<?php
echo "la surface d'un cercle de rayon=5 est :<b>".calcul_surface_cercle(5)."</b>";
?>
</body>
61
</html>
PHP
Et les
formulaires
62
Les formulaires
• Les formulaires permettent de doter les pages web d'éléments
interactifs permettant un dialogue avec les internautes.
 La structure d'un formulaire de saisie est simple, elle se compose d'un
élément FORM contenant essentiellement une suite de contrôles
(éléments INPUT, TEXTAREA, SELECT, BUTTON, etc.) mais aussi des
éléments de structuration de document afin d'aligner correctement les
champs d'entrée.
<FORM
NAME="nom_du_formulaire"
METHOD="GET" | "POST"
ACTION="URL_de_traitement"
>
du texte, des boutons, des zones de saisie ...
<INPUT TYPE="submit">
</FORM>
63
Les formulaires
METHOD indique la méthode de transmission HTTP des données saisies dans le
formulaire :
• POST est la valeur qui correspond à un envoi de données stockées dans le
corps de la requête (les données sont cachées mais PAS CRYTEES !!!)
• GET correspond à un envoi des données visibles dans l'URL (séparées
de l'adresse du script par un point d'interrogation) : à éviter mais pratique
pendant la phase de mise au point.
(si cet attribut est omis, il vaut "get" par défaut).
ACTION permet d'indiquer l'URL absolue ou relative qui va recevoir les
informations entrées dans le formulaire, lorsque l'on cliquera sur le bouton de
validation. C'est généralement le nom d'un fichier script PHP.
(si le champ ACTION est absent, l'URL sera celle du document courant).
NAME est le nom de l'objet formulaire. Peu d'intérêt sauf, coté CLIENT, où le
javascript peut manipuler l'objet formulaire (mais on préférera plutôt travailler
avec la propriété ID).
64
Formulaires et PHP
PHP peut intervenir à deux endroits par rapport au formulaire :
• Pour la construction du formulaire (avec des informations dynamiques)
• Pour le traitement des données du formulaire (les données utilisateur)
On peut utiliser 3 méthodes pour faire interagir le formulaire et le script PHP :
• Mettre le formulaire dans un document HTML pur et indiquer le nom du
script PHP qui doit traiter les données dans l'option ACTION
• Mettre le formulaire dans un script PHP (pour construire dynamiquement
une partie du formulaire) et faire traiter les données par un autre script PHP
• Mettre le formulaire dans un script PHP (pour construire
dynamiquement une partie du formulaire) et le faire traiter par le même
script PHP
Dans la pratique, il est souhaitable de séparer au maximum
• la partie affichage des informations (le HTML pur)
• la partie mise en forme des informations (le CSS)
• la partie traitement des données (le PHP)
65
1er exemple de formulaire
Voici un premier exemple de formulaire (très simple) qui permet d'identifier le
client :
<head>
<title>Mon premier formulaire</title>
</head>
<body>
<form action="formulaire1.php" method="get" id="login">
<fieldset>
<legend> Identification </legend>
<p><label> Nom : </label><input type="text" name="nom" /></p>
<p><label> Mot de passe : </label><input name="mdp" type="password" /></p>
<input type="submit" value="Ok" id="ok"/>
</fieldset>
</form>
</body>
</html>
 Le formulaire contient 2 zones de texte (nom et mdp), dont l'une est de type Password (remplacement
des caractères par des * à la saisie).
 Il faut toujours veiller à bien structurer les éléments de la page dans la perspective prochaine de leur
appliquer une mise en forme par feuille de style.
On ajoutera donc toujours un LABEL devant les en têtes : <label> Nom : </label>
et un attribut ID ou CLASS sur les balises importantes
<form id="login"> , <input type="submit" value="ok" id="ok">
66
1er exemple de formulaire
1
Lorsque l'on appelle la page
http://localhost/formulaire1.php
2 On obtient l'écran suivant :
3
Saisie d'une valeur :
fwateau
fwateau
***
4
Après clic sur le bouton OK, les paramètres du formulaire sont transmis dans
l'URL sous la forme de couple nom1=valeur1&nom2=valeur2 ….
http://localhost/form1.php?nom=fwateau&mdp=iut
Remarque : le mot de passe est en 'clair' !!!!
Le SERVEUR reçoit les informations dans des variables $_GET[ ]
fwateau
fwateau
nom=fwateau&mdp=iut
F/
67
1er exemple de formulaire
REMARQUES
 Si l'attribut METHOD est réglé sur POST
<form action="formulaire1.php" method="post" id="login">
…
</form>
alors après clic sur le bouton OK, les paramètres du formulaire n'apparaissent
pas dans l'URL mais sont transmis dans la trame TCP/IP
Le SERVEUR reçoit les informations dans des variables $_POST[ ]
 Si 2 zones portent le même nom dans un formulaire, c'est la dernière zone
rencontrée qui fixe la valeur
<label> Nom : </label><input type="text" name="nom" />
<label> prénom : </label ><input type="text" name="nom" />
La valeur de cette zone
 S'il y a 2 formulaires dans la page, les variables transmises sont celles du
formulaire qui a été validé.
68
1er exemple de formulaire
REMARQUES
 Pour récupérer facilement les variables, on peut aussi utiliser la fonction
extract.
Elle exporte le tableau associatif et créé une variable pour chaque clé du
tableau.
extract($_POST,EXTR_OVERWRITE);
Cette fonction va créer une variable pour chaque clé du tableau associatif
$_POST.
Si l'on a :
$_POST['nom']
$_POST['prenom']
$_POST['age']
alors la fonction extract($_POST, EXTR_OVERWRITE) va créer les variables suivantes :
$nom
$prenom
$age
Signification du second paramètre :
EXTR_OVERWRITE écrase les variables existantes
EXTR_SKIP
n'écrase pas les variables existantes
69
Modification du 1er formulaire
Maintenant, quand le formulaire est validé, le SERVEUR doit vérifier le login et le
comparer à l'utilisateur attendu (nom=prof,mdp=iut)
Une variable pour le message
d'erreur et une autre pour le message
de bienvenue
Vérifier que des données ont été reçues :
Si FAUX alors c'est le premier appel de la page
Si VRAI alors le formulaire a été validé
Tests de contrôle du login (comparaison
avec les constantes)
Si LOGIN OK  $message est renseignée
Si LOGIN nOK  $err est renseignée
… sinon affichage (normal) de la page (avec
éventuellement
un message
d'erreur desi
Affichage du message
de bienvenue
login)
l'utilisateur vient de s'identifier correctement
…
70
Commentaires sur la page de login
 La page est structurée : déclaration des constantes et variables, traitement
des données et présentation des données. C'est une bonne pratique à adopter
en programmation. On traite toujours les informations avant de les présenter.
Avec cette méthode, nous pourrons par exemple effectuer des redirections sans
risque d'erreur d'en-têtes déjà envoyés.
 Voici quelques explications :
• 2 variables globales sont créées :
$message pour contenir le message de bienvenue
$err pour le message d'erreur pour un login incorrect
• La première condition vérifie que le tableau $_POST existe et n'est pas vide. Si c'est le cas, alors elle
renverra vrai (TRUE) [ce qui signifie que c'est le premier appel de la page] et sera franchie pour
accéder aux tests suivants.
• On effectue ensuite une série de tests pour contrôler le login (correspondance avec les constantes
définies en-tête du fichier).
Si le login est correct alors la variable $message est renseignée sinon c'est la variable $err qui est
renseignée.
• Dans le corps de la page, nous vérifierons si la variable $message existe. Si c'est le cas, on l'affiche
sinon c'est le reste du code HTML qui est présenté (avec éventuellement l'indication d'erreur de login).
71
Une autre mécanique pour le login
On souhaite rediriger l'utilisateur vers une autre page lorsqu'il est correctement
identifié.
Pour cela, PHP dispose de la fonction header qui se charge d'envoyer les entêtes passés en paramètre.
Règle importante : l'appel de cette fonction doit se faire avant tout envoi au
navigateur (instruction echo, print, espace blanc, balise html...) sous peine de
générer une erreur de type Headers already sent by.... Cette erreur signifie que
la page a déjà été envoyée au navigateur avant de vouloir envoyer des en-têtes
HTTP.
L'utilisateur est maintenant redirigé vers
la page index.php qui se trouve dans le
if (!empty($_POST)) {
même dossier que la page en cours
// vérifier le login
if ($_POST['nom']==NOM && $_POST['mdp']==MDP) {
header('location: index.php');
exit();
} else $err="identification incorrecte : RECOMMENCEZ";
}
Note 1 : l'instruction exit() qui succède la fonction header() permet de couper
l'exécution du script car la redirection aura lieu immédiatement et le reste du code
n'a pas d'intérêt à être interprété.
Note 2 : pour rediriger vers un autre serveur on écrira :
72
l'instruction exit() qui succède la fonction
header("location : http://www.monserveur.com/page2.php)
Traitement des contrôles de formulaire
Groupe de bouton radio
utilisé pour sélectionner un choix et un seul parmi plusieurs. Au maximum, un
seul radio-bouton reste coché. Si l'option "checked" est ajoutée, le radio-bouton
sera pré-coché.
Sexe :
<input name="sexe" type="radio" value="M" checked="checked" /> Masculin
<input name="sexe" type="radio" value="F" /> Féminin
<input name="sexe" type="radio" value="?" /> Ne sait pas
Le résultat est récupéré dans la variable $_POST['sexe']  valeurs possibles ={'M','F','?'}
Case à cocher
ici $_POST['sexe'] ='M'
utilisées pour des valeurs de type "oui" (case cochée) ou "non" (case décochée)
si l'option "checked" est ajoutée, la case sera pré-cochée.
Couleur :
<input type="checkbox"
<input type="checkbox"
<input type="checkbox"
<input type="checkbox"
name="couleur[bleu]" checked="checked" /> Bleu
name="couleur[blanc]" /> blanc
name="couleur[rouge]" /> rouge
name="couleur[nsp]" /> ne sait pas
Le résultat est récupéré dans une variable tableau. Seules les cases qui sont cochées créent
un élément dans le tableau.
ici $_POST['couleur']['bleu']='on', $_POST['couleur']['rouge']='on' et les autres sont empty
73
Traitement des contrôles de formulaire
Liste à sélection simple
utilisée pour afficher une liste de valeurs qui se déroule quand on clique sur la
flèche
<label>Langue : </label>
<select name="langue">
<option value="F">Francais
<option value="A">Anglais
<option value="C">Chinois
</select>
Le résultat est récupéré dans la variable $_POST['langue']
 valeurs possibles ={'F','A','C'}
ici $_POST['langue'] ='F'
Liste à sélection multiple
Comme une liste simple mais avec l'attribut multiple
<label>J'aime : </label><br>
<select name="fruits[]" size="5" multiple>
<option value="abricot">les abricots
<option value="peche">les péches
<option value="poire">les poires
<option value="pomme">les pommes
</select>
Le résultat est récupéré dans une variable tableau. Seuls les éléments qui sont sélectionnés créent un
élément dans le tableau.
ici $_POST['fruits'][0]='peche', $_POST['fruits'][1]='poire'
74
PHP
Et les
Bases de
données
75
Présentation
 Il est souvent incontournable d'utiliser une base de données dans un site
web dynamique car c'est un moyen standardisé pour stocker les données.
 PHP propose un support natif pour plusieurs types de bdd :
• MySQL (la plus utilisée),
• Oracle,
• Microsoft SQL server,
• Sybase
PHP supporte aussi les connexions ODBC pour une liaison sur ACCESS
par exemple.
 La plupart des interactions entre un script PHP et une bdd (ici MySQL)
correspondent à la séquence suivante :
1 Ouverture d'une connexion avec le serveur MySQL
2 Spécification de la bdd concernée par l'accès
3 Lancement de requêtes, récupération et traitement des données
4 Fermeture de la connexion avec le serveur MySQL
76
Notion de fetch
 Avec une bdd, l'instruction SELECT (en vue de lire les données) se contente
d'exécuter la requête; aucune donnée n'est retournée.
 Il faut donc extraire les lignes du résultat : c'est la notion de fetch.
Pour résumer :
L'instruction SELECT identifie un résultat et positionne un pointeur interne sur la première ligne de
ce résultat
Ligne
Ligne
Ligne
….
Ligne
1
2
2
N
L'instruction FETCH permet de lire la ligne courante du résultat, de ramener les valeurs dans des
variables PHP et de faire avancer le pointeur sur la ligne suivante
Ligne
Ligne
Ligne
….
Ligne
1
2
3
Ligne
Ligne
Ligne
….
Ligne
1
2
3
FETCH
Variable(s) PHP
N
N
1er FETCH
FETCH
Variable(s) PHP
2cd FETCH
77
Connexion à la bdd
 PHP va faire l'intermédiaire entre l'internaute et MySQL.
Problème : PHP ne peut pas dire à MySQL simplement
"Récupère-moi ces valeurs"
En effet, MySQL demande d'abord un nom d'utilisateur et un mot de passe.
S'il ne faisait pas ça, tout le monde pourrait accéder à votre BDD et lire les
informations qu'il y a dedans (parfois confidentielles !).
 Il va donc falloir que PHP s'authentifie, on dit qu'il établit une connexion avec
MySQL.
Une fois que la connexion sera établie, il est possible de travailler sur la bdd
dans le script.
La connexion
 Pour se connecter, on utilise la fonction : mysql_connect.
Cette fonction a besoin de 3 arguments :
• Le nom de l'hôte : c'est l'IP de l'ordinateur où MySQL est installé. Le plus souvent, MySQL est
installé sur le même ordinateur que PHP. Dans ce cas, mettez la valeur "localhost" et ça marchera
• Le login : c'est l'identifiant MySQL de l'utilisateur. Il faut se renseigner auprès de l'administrateur de
la bdd pour l'obtenir. Chez un hébergeur, c'est souvent le même login que celui de la liaison FTP).
• Le mot de passe : c'est le mot de passe MySQL (à voir avec l'administrateur).
78
Connexion à la bdd
On va supposer que le nom de l'hôte est "localhost" (c'est valable dans la quasi-totalité des cas),
que le login est »geii" et que mon mot de passe est "open".
Le code suivant permet d'établir une connexion à MySQL :
$bd=mysql_connect("localhost", "geii", "open");
Remarque: par défaut, mysql_connect() essaie de se connecter au service MYSQL sur le port
3306, port standard. On peut préciser un autre numéro de port en écrivant : localhost:3310
$bd=mysql_connect ("univ:3005",
"geii", "open");
Ici, on se connecte sur une base hébergée sur une autre machine serveur nommée univ (en port 3005)
Le choix de la base
 Il faut maintenant définir le nom de la base de données avec laquelle on
souhaite travailler.
La fonction qui permet de sélectionner la BDD est :
mysql_select_db(nom_base)
Par exemple, si la base s'appelle "bd_test", voici comment faire:
mysql_connect ("localhost", "geii", "open"); // Connexion à MySQL
mysql_select_db("bd_test"); // Sélection de la base bd_test
79
Connexion à la bdd
La déconnexion
Une fois que la travail sur la BDD est fini, il faut vous déconnecter.
Il faut utiliser la fonction mysql_close() [pas de paramètre]
Il n'est généralement pas nécessaire d'invoquer cette fonction dans la mesure
où PHP ferme automatiquement les connexions au serveur quand le script est
terminé (en fin de page).
Par exemple, pour fermer la connexion, on écrira :
mysql_close(); // ferme la connexion à MySQL
Pourquoi la fonction mysql_close existe-t-elle si elle est inutile?
1. Fermer la connexion AVANT la fin du script permet de libérer des ressources
système sur la machine.
2. Quand on travailler avec plusieurs serveurs MySQL, généralement on ne
conserve qu'une seule connexion ouverte à la fois
80
Connexion à la bdd :: gestion des erreurs
 Lors du processus de connexion, il peut toujours se produire une erreur (la
base n'existe pas, le mot de passe est erroné,…)
 La librairie MYSQL fournit deux fonctions de gestion d’erreur :
mysql_errno() retourne le texte associé à l'erreur générée, s'il y a, de
la dernière requête du SGBD MySQL
et
mysql_error() retourne le numéro d'erreur de la dernière commande
MySQL
mysql_connect ("localhost", "geii", "open");
or die("Impossible de se connecter : " . mysql_error());
mysql_select_db("bd_test");
if (mysql_errno()) {
die "<br>".mysql_errno().": ".mysql_error()."<br>";
}
…
…
mysql_close();
if (mysql_errno()) {
die "<br>".mysql_errno().": ".mysql_error()."<br>";
}
81
Exécution des requêtes
 La fonction mysql_query() lance l'exécution d'une requête sur le SERVEUR
mysql_query(requête, connexion)
–
–
–
–
envoie une requête SQL à la BD de la connexion
retourne une ressource de résultat MySQL si succès, sinon false et envoie un message
d'erreur
le paramètre "requête" est une chaîne comprenant une requête SQL qui ne doit pas être
terminée par un point-virgule ! Attention !!
le paramètre "connexion" est une ressource de connexion ouverte à un serveur MySQL (s'il
n'est pas spécifié, la dernière connexion est prise en compte).
Remarque :
mysql_query peut contenir des requêtes d'interrogation, mais aussi d'insertion, de
mise à jour, de suppression de données !
 Pour la suite, nous allons créer une table ARTICLE ayant la structure suivante :
Colonne
contenu
Id
Identifiant de l'article
Libelle
Le nom de l'article
Prix
Le prix en euros
82
CREATE,INSERT,UPDATE
 Voici le script qui permet de
créer la table en PHP (sans
traitement d'erreur) :
 le script qui
permet d'ajouter
des
enregistrements
dans la table :
mysql_connect ("localhost", "root", "");
mysql_select_db("bd_test");
$sql ="CREATE TABLE article ( ";
$sql.="id INT NOT NULL AUTO_INCREMENT , ";
$sql.="libelle VARCHAR( 30 ) NOT NULL , ";
$sql.="prix FLOAT NOT NULL,";
$sql.="PRIMARY KEY (id));";
mysql_query($sql);
$sql ="INSERT INTO article (id,libelle,prix) VALUES
$resultat=mysql_query($sql);
echo "clé primaire utilisée : ".mysql_insert_id();
$sql ="INSERT INTO article (id,libelle,prix) VALUES
$resultat=mysql_query($sql);
$sql ="INSERT INTO article (id,libelle,prix) VALUES
$resultat=mysql_query($sql);
$sql ="INSERT INTO article (id,libelle,prix) VALUES
$resultat=mysql_query($sql);
$sql ="INSERT INTO article (id,libelle,prix) VALUES
$resultat=mysql_query($sql);
('', 'Abricots', '2')";
('', 'Cerises', '1.2')";
('', 'Pommes', '1')";
('', 'Fraises', '3')";
('', 'Pêches', '2.75')";
La fonction mysql_insert_id() permet de retourner la valeur de la clé primaire attribuée automatiquement
par MySQL.
 le script qui
permet de modifier
le prix des fraises
$sql ="UPDATE article SET prix=3.15 WHERE libelle='Fraises'";
$resultat=mysql_query($sql);
echo "Nombre de lignes affectées: ".mysql_affected_rows();
La fonction mysql_affected_rows() retourne le nombre d'enregistrements affectés
par la dernière requête
83
Traiter les requêtes SELECT
 La requête SELECT retourne les enregistrements d'une table. Ces
enregistrements sont contenus dans une structure appelée Resultset.
 PHP dispose d'une fonction toute prête, mysql_fetch_array, qui va créer un
array à partir du Resultset.
mysql_fetch_array(liste_résultat_requête)
–
–
–
parcourt les enregistrements du Resultset
retourne un tableau associatif : les valeurs d'index du tableau sont les noms des
colonnes
retourne False s'il ne reste plus de ligne.
$sql ="SELECT * FROM article";
$resultat= mysql_query ($sql);
$total_produit= mysql_num_rows ($resultat);
echo "<b>$total_produit</b> produits dans la table ARTICLE<br>";
echo "<ul>\n";
while ($enr= mysql_fetch_array ($resultat)) {
echo "<li>Prix des ".$enr['libelle']." : ".$enr['prix']."</li>\n";
}
echo "</ul>\n";
84
Quelques utilitaires ….
 Pour obtenir le nombre de colonnes mysql_num_fields
$sql ="SELECT * FROM article";
$resultat= mysql_query($sql);
$nombre_col=mysql_num_fields($resultat);
 Pour obtenir le nom d'une colonne mysql_field_name
$nom_col2=mysql_field_name($resultat,1);
 Pour obtenir le type d'une colonne mysql_field_type
$type_col1=mysql_field_type($resultat,0);
85
Le langage
php
Exercices
86
exo1.php
Modifier le code de la page
TD1_exo_1.html pour que le
formulaire ressemble à la figure
suivante. Ce formulaire doit envoyer
les données à la page TD2.exo2.php.
exo2.php
Ecrire le code de la page
TD2.exo2.php qui affiche les données
reçues de TD2_exo1.php sous la
forme suivante. Le nom des lignes
doit correspondre aux propriétés
« name » des balises input de la page
TD2_exo1.php.
87
exo3.php
Modifier le code de la page ci-dessus de
façon à faire apparaître « utilisateur » ou
« administrateur » à la place de « 0 » ou
« 1 » en face de profil.
exo4.php
On considère une base de données « td »
qui comporte une seule table nommée td.
Cette base de données se trouve sur un
serveur MySql dont les caractéristiques
sont les suivantes:
• nom: localhost
• utilisateur: root
• mot de passe: « »
La table td est composée des champs et
données suivants:
Modifier la page TD2_exo1.php en
TD2_exo4.php de telle sorte que:
Si la personne qui se connecte existe dans la
base de données, elle est réorienté vers la
page TD2_exo3.php,
Sinon, elle est réorientée vers
TD2_exo4.php, en effaçant les données du
formulaire et en affichant un message
d'erreur : « Données incorrectes, veuillez
recommencer! ».
88
Téléchargement