Documente Academic
Documente Profesional
Documente Cultură
Préambule
Un site ou site web (de l'anglais website, qui se traduit littéralement en français par site
de la toile) est un ensemble de pages web hyperliées entre elles et accessible à une adresse
web.
Un site web est un ensemble de pages qui peuvent être consultées en suivant des
hyperliens à l'intérieur du site. L'adresse web d'un site correspond en fait à l'URL d'une page
web, prévue pour être la première consultée : la page d'accueil en générale index.php ou
index.html.
La consultation des pages d'un site s'appelle une « visite », car les hyperliens devraient
permettre de consulter toutes les pages du site sans le quitter (sans devoir consulter une page
web hors du site).
Il existe deux types de sites : les sites statiques et les sites dynamiques.
Ce sont des "vitrines". Les visiteurs peuvent voir le contenu du site mais ne peuvent
pas y participer. Pour les réaliser, deux langages sont nécessaires : le (X)HTML et le CSS (en
théorie, il est toutefois possible d'utiliser uniquement le HTML ou le XHTML).
1
2.2. Site dynamique
Ces sites ne sont pas que des "vitrines" : les visiteurs peuvent y participer. Pour les
réaliser, on a également besoin du (X)HTML et du CSS, mais il faut aussi un autre langage
qui crée dynamiquement les pages.
Il existe plusieurs langages pour créer ces pages (Java, C#, PHP, Ruby, Python, etc.).
Leurs rôles est d'analyser les requêtes des visiteurs pour ensuite fabriquer une réponse
adaptée.
Lorsqu’on visite un site web, on tape son adresse dans un navigateur web, que ce soit
Mozilla Firefox, Internet Explorer, Opera, Safari ou un autre.
Il faut savoir qu'Internet est un réseau composé d'ordinateurs. Ceux-ci peuvent être
classés en deux catégories.
Les clients : ce sont les ordinateurs des internautes. Votre ordinateur fait donc partie
de la catégorie des clients. Chaque client représente un visiteur d'un site web.
Les serveurs : ce sont des ordinateurs puissants qui stockent et délivrent des sites web
aux internautes, c'est-à-dire aux clients. La plupart des internautes n'ont jamais vu un serveur
de leur vie. Pourtant, les serveurs sont indispensables au bon fonctionnement du Web.
2
3.2. Cas d'un site dynamique
Lorsque le site est dynamique, il y a une étape intermédiaire : la page est générée (fig.
suivante).
Selon que l'on crée un site statique ou un site dynamique, on a besoin de logiciels différents.
En fait, faire un site dynamique nécessite quelques logiciels supplémentaires.
Les webmasters qui créent des sites statiques avec HTML et CSS ont en général déjà tous les
programmes dont ils ont besoin.
Un éditeur de texte : tel que le Bloc-notes livré avec Windows suffit, bien qu'il soit
recommandé d'utiliser un outil un peu plus évolué comme Notepad++.
Un navigateur web : il permet de tester la page web. On peut utiliser par exemple
Mozilla Firefox, Internet Explorer, Google Chrome, Opera, Safari, ou tout autre
navigateur. Il est conseillé de tester son site régulièrement sur différents navigateurs.
3
4.2. Avec un site dynamique
Cependant, pour ceux qui travaillent sur des sites dynamiques, ces outils (éditeur de texte et
navigateur) ne suffisent pas. Il est nécessaire d'installer des programmes supplémentaires.
Apache : c'est ce qu'on appelle un serveur web. Il s'agit du plus important de tous les
programmes, car c'est lui qui est chargé de délivrer les pages web aux visiteurs.
Cependant, Apache ne gère que les sites web statiques (il ne peut traiter que des pages
HTML). Il faut donc le compléter avec d'autres programmes.
PHP : c'est un plug-in pour Apache qui le rend capable de traiter des pages web
dynamiques en PHP. En clair, en combinant Apache et PHP, notre ordinateur sera
capable de lire des pages web en PHP.
Tous ces éléments qui vont être utilisé pour créer des sites dynamiques sont libres et gratuits.
Certes, il en existe d'autres (parfois payants), mais la combinaison Apache + PHP + MySQL
est la plus courante sur les serveurs web, à tel point qu'on a créé des « packs » tous prêts qui
contiennent tous ces éléments.
Bien qu'il soit possible d'installer ces outils séparément, il est plus simple pour nous d'installer
un paquetage tout prêt : WAMP sous Windows, MAMP sous Mac OS X ou XAMPP sous
Linux.
A Retenir
– Site web dynamique = ensemble de page hyperlié dont le visiteur peut y participer.
– La page web est générée à chaque fois qu'un client la réclame.
– Pour créer un site web dynamique nous avons besoins d’un serveur web, SGBD et un
plug-in PHP ou tout simplement un paquet tels que WAMP ou easyPHP.
4
Chapitre I : Initiation au développement des sites
avec le langage PHP
PHP: Hypertext Preprocessor, plus connu sous son sigle PHP (acronyme récursif), est
un langage de programmation libre principalement utilisé pour produire des pages Web
dynamiques via un serveur HTTP, mais pouvant également fonctionner comme n'importe quel
langage interprété de façon locale. PHP est un langage impératif orienté-objet.
PHP est un langage interprété (un langage de script) exécuté du côté serveur (comme
les scripts CGI, ASP, ...) et non du côté client (un script écrit en Javascript ou une applet Java
s'exécute sur votre ordinateur...). La syntaxe du langage provient de celles du langage C, du
Perl et de Java.
2. Typologie
5
Le langage PHP est par exemple sensible à la casse (en anglais case sensitive), cela
signifie qu'un nom contenant des majuscules est différent du même nom écrit en minuscules.
Toutefois, cette règle ne s'applique pas aux fonctions, les spécifications du langage PHP
précisent que la fonction print peut être appelée print(), Print() ou PRINT().
Toute instruction se termine par un point-virgule.
Le tag de fin (?>) implique la fin d’instruction, et donc ajoute implicitement un point-virgule.
Les deux exemples suivants sont équivalents.
<?php
echo "Ceci est un test.";
?>
<?php echo "Ceci est un test." ?>
Pour que le script soit interprété par le serveur deux conditions sont nécessaires :
– Le fichier contenant le code doit avoir l'extension telle que .php et non .html
– Le code PHP contenu dans le code HTML doit être délimité par des balises du
type <? et ?>
Pour des raisons de conformité avec certaines normes (XML et ASP par exemple),
plusieurs balises peuvent être utilisées pour délimiter un code PHP :
– <? et ?>
– <?php et ?>
– <script language="php"> et </script>
– <%php et %>
Un exemple de script simple
<html>
<head><title>Exemple</title></head>
<body>
<?php
echo "Hello world";
?>
</body>
</html>
6
On notera bien évidemment que la fonction echo permet d'afficher sur le navigateur la chaine
délimitée par les guillemets.
4. Les commentaires
Une autre façon de rendre le code plus compréhensible consiste à insérer des
commentaires, des lignes qui seront tout simplement ignorées par le serveur lors de
l'interprétation.
Pour ce faire, il est possible, comme en langage C, d'utiliser des balises qui vont
permettre de délimiter les explications afin que l'interpréteur les ignore et passe directement à
la suite du fichier.
Ces délimiteurs sont /* et */. Un commentaire sera donc noté de la façon suivante :
/* Voici un commentaire! */
Le PHP supporte les commentaires comme en C, C++ et Shell Unix. Par exemple:
<?php
echo "Ceci est un test"; // Ceci est un commentaire sur une ligne comme en C++
/* Ceci est un commentaire sur plusieurs lignes,
Comme en C et C++ */
echo "Ceci est encore un test";
echo "Enfin, le test final"; # Ceci est un commentaire comme en Shell Unix
?>
Le premier type de commentaire ne "commente" que jusqu'à la fin de la ligne ou bien jusqu'à
la fin du bloc, cela dépant du premier rencontré.
Faites attention à ne pas emboiter les commentaires de type 'C', ce qui arrive de temps en
temps lorsque vous voulez commenter une grande partie de de code.
<?php
/*
echo "Ceci est un test"; /* Ce commentaire va poser un problème */
*/
?>
7
Il y a toutefois quelques règles à respecter :
– Les commentaires peuvent être placés n'importe où à l'intérieur des délimiteurs du script
– Les commentaires ne peuvent contenir le délimiteur de fin de commentaire (*/)
– Les commentaires ne peuvent être imbriqués
– Les commentaires peuvent être écrits sur plusieurs lignes
– Les commentaires ne peuvent pas couper un mot du code en deux
Il est possible aussi d'utiliser un type de commentaire permettant de mettre toute la fin
d'une ligne en commentaire en utilisant le double slash (//). Tout ce qui se situe à droite de ce
symbole sera mis en commentaire.
Un script PHP est un simple fichier texte contenant des instructions écrites à l'aide de
caractères ASCII 7 bits (des caractères non accentués) incluses dans un code HTML à l'aide
de balises spéciales et stocké sur le serveur.
Ce fichier doit avoir l'extension « .php » pour pouvoir être interprété par le serveur.
Lorsque le code est interprété, les espaces, retours chariot et tabulation ne sont pas pris
en com pte par le serveur. Il est tout de même conseillé d'en mettre afin de rendre le code plus
lisible.
Ainsi, lorsqu'un navigateur (le client) désire accéder à une page dynamique réalisé en PHP :
8
Un script PHP est interprété par le serveur, les utilisateurs ne peuvent donc pas voir le code source!
Le code PHP stocké sur le serveur n'est donc jamais visible directement par le client puisque
dès qu'il en demande l'accès, le serveur l'interprète!
De cette façon aucune modification n'est à apporter sur les navigateurs.
– Adabas D – MySQL
– dBase – Oracle
– Empress – PostgreSQL
– FilePro – Solid
– Informix – Sybase
– Interbase – Velocis
– mSQL – Unix dbm
A Retenir
9
Chapitre II : La syntaxe de base
Le code PHP doit être inséré entre des balises <?php et ?>. Il existe des notations
raccourcies : <? et ?>, voire la notation ASP <% et %> (devrait être abandonnée avec PHP6),
mais celles-ci sont déconseillées, car elles peuvent être désactivées dans la configuration du
serveur (php.ini ou .htaccess) : la portabilité du code est ainsi réduite. Il existe aussi cette
syntaxe, peu courante : <script language="php"> et </script>.
Exemple :
Une variable est un objet repéré par son nom, pouvant contenir des données,
qui pourront être modifiées lors de l'exécution du programme.
– Quel que soit le type de variable, son nom doit obligatoirement être précédé du
caractère dollar ($).
– un nom de variable doit commencer par une lettre (majuscule ou minuscule) ou un "_"
(pas par un chiffre)
– un nom de variable peut comporter des lettres, des chiffres, le caractère _ et les
caractères accentués (les espaces ne sont pas autorisés!)
Remarque : Les noms de variables sont sensibles à la casse (le langage PHP fait la
différence entre un nom en majuscule et un nom en minuscules), il faut donc veiller à utiliser
des noms comportant la même casse! Toutefois, les noms de fonctions font exception
à cette règle...
10
Nom de variable correct Nom de variable incorrect Raison
$Variable $Nom de Variable comporte des espaces
Nombres entiers
11
Les nombres à virgule flottante
Les nombres à virgule flottante ("doubles") peuvent êtres spécifié en utilisant la syntaxe
suivante:
$a = 1.234;
$a = 1.2e3;
Les chaînes de caractères peuvent être définit en utilisant deux types de délimiteurs.
Il existe des caractères repérés par un code ASCII spécial permettant d'effectuer des
opérations particulières. Ces caractères peuvent être représentés plus simplement en langage
PHP grâce au caractère '\' suivi d'une lettre, qui précise qu'il s'agit d'un caractère de contrôle :
Caractère Description
" Guillemet
\\ barre oblique inverse (antislash)
\r retour chariot
\n retour à la ligne
\t Tabulation
PHP supporte les tableaux scalaires et les tableaux associatifs. En fait, il n'y a aucune
différence entre les deux. Ces tableaux stockent des données sous forme de liste. Ces données
sont accessibles grâce à un indice qui peut être :
- un index (un numéro représentant l'élément de la liste) on parle de tableaux scalaires.
- chaînes de caractères, pour les tableaux associatifs (parfois plus agréable à utiliser)
Il est possible de stocker des éléments de types différents dans un même tableau.
12
On peut créer un tableaux en utilisant les fonctions list() ou array() , ou bien en affectant
explicitement chacune des valeurs.Ainsi, pour désigner un élément de tableau, il suffit de faire
suivre au nom du tableau l'indice de l'élément entre crochets :
$Tableau[0] = 12;
$Tableau[1] = "php";
$Toto["Age"] = 27;
$Toto["Adresse"] = "22 rue la liberté";
$Toto["Nom"] = " Ben Salah";
$a["color"] = "red";
$a["taste"] = "sweet"; $a = array("color" => "red","taste" => "sweet",
$a["shape"] = "round"; "shape" => "round","name" => "apple",3 => 4);
$a["name"] = "apple";
$a[3] = 4;
Avec PHP, il n'est pas nécessaire de préciser la valeur de l'index lorsqu'on veut
remplir un tableau, car il assigne la valeur 0 au premier élément (si le tableau est vide)
et incrémente les indices suivants. De cette façon, il est facile de remplir un tableau
avec des valeurs.
Un tableau peut être classé en utilisant les fonctions asort() , arsort() , ksort() , rsort() ,
sort() , uasort() , usort() , et uksort() en fonction du type de classement voulu.
La fonction count() est utilisé pour conter le nombre des éléments d’un tableau
Pour se déplacer à l'intérieur d'un tableau on peut utiliser les fonctions next() et prev()
ou la fonction each() .
13
$Tableau[0][0] = 12;
$Tableau[0][1] = "php";
$Tableau[1][0] = 1245.652;
$Tableau[1][1] = "Au revoir";
Vous pouvez remplir un tableau à plusieurs dimensions par de nombreux moyens mais la
méthode la plus simple à comprendre est l'utilisation de la fonction array() .
La fonction array() peut être emboiter pour remplir un tableau à plusieurs dimension:
La conversion de type en PHP fonctionne de la même manière qu'en C: le nom du type désiré
est écrit entre parenthèses devant la variable à "caster".
14
Les conversions autorisées sont:
Il est à noter que les tabulations et les espaces sont autorisés à l'intérieur des parenthèses, donc
les lignes suivantes sont équivalentes:
Il est à noter qu'une variable peut se comporter de manière différente suivant les
situations, en fonction du type qui lui est affecté.
Une variable déclarée au début du code, c'est-à-dire avant tout bloc de donnée, sera
globale, on pourra alors les utiliser à partir de n'importe quel bloc d'instructions
Une variable déclarée à l'intérieur d'un bloc d'instructions (dans une fonction ou une
boucle par exemple) aura une portée limitée à ce seul bloc d'instructions, c'est-à-dire
qu'elle est inutilisable ailleurs, on parle alors de variable locale
D'une manière générale il est préférable de donner des noms différents aux variables locales
et globales pour des raisons de lisibilité et de compréhension du code.
Un constant est une variable dont la valeur est inchangeable lors de l'exécution d'un
programme. Avec PHP, les constantes sont définies grâce à la fonction define().
define("Nom_de_la_variable", Valeur);
15
3. Les opérateurs
Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire
effectuer des opérations, les évaluer, ...
Opérateur Effet
+= addition deux valeurs et stocke le résultat dans la variable (à gauche)
-= soustrait deux valeurs et stocke le résultat dans la variable
*= multiplie deux valeurs et stocke le résultat dans la variable
/= divise deux valeurs et stocke le résultat dans la variable
%= donne le reste de la division deux valeurs et stocke le résultat dans la variable
|= Effectue un OU logique entre deux valeurs et stocke le résultat dans la variable
^= Effectue un OU exclusif entre deux valeurs et stocke le résultat dans la variable
&= Effectue un Et logique entre deux valeurs et stocke le résultat dans la variable
.= Concatène deux chaînes et stocke le résultat dans la variable
16
Ces opérateurs permettent de simplifier des opérations usuelles. Par exemple au lieu
d’écrire $x=$x+2 on peut écrire $x+=2.
Note: Il existe des fonctions PHP pour effectuer d’autres calculs, par exemple max() et min().
3.3. Les opérateurs d'incrémentation
Ce type d'opérateur permet d’augmenter ou de diminuer d'une unité une variable. Ces
opérateurs sont très utiles pour des structures telles que des boucles.
Ce type d'opérateur traite ses opérandes comme des données binaires, plutôt que des
données décimales, hexadécimales ou octales. Ces opérateurs traitent ces données selon leur
représentation binaire mais retournent des valeurs numériques standard dans leur format
d'origine.
17
Les opérateurs suivants effectuent des opérations bit-à-bit, c'est-à-dire avec des bits de même
poids.
Exemple:
Lorsque l'on associe plusieurs opérateurs, il faut que l'interprêteur PHP sache dans
quel ordre les traiter, voici donc dans l'ordre décroissant les priorités de tous les opérateurs :
18
4. Les structures conditionnelles
On appelle structure conditionnelle les instructions qui permettent de tester si une
condition est vraie ou non, (le PHP associe le mot clé true à 1 et false à 0).
La condition contient des opérateurs de comparaison et des opérateurs logiques. Ces
opérateurs peuvent être combinés entre eux, tout en prenant garde aux règles de priorités.
4.1. La structure if / else
La syntaxe générale est la suivante :
if ( condition )
{ Instruction1; }
else
{ Instruction2; }
4.2. La structure if / elseif / else
Si la condition peut retourner différents résultats plus que deux comme vrai ou faux,
on peut utiliser « elseif » comme suit :
if ( condition1 )
{ Instruction1; }
elseif ( condition2 )
{ Instruction2; }
else
{ Instruction3; }
Exemple
<? $x="a"
if ($x = = "a") { echo "a"; }
elseif ($x = = "b") { echo "b"; }
elseif ($x = = "c") { echo "c"; }
else { echo "autre"; }
?>
4.3. La structure switch
19
switch ($var)
{
case v1 :
instructions 1;
break;
...
case vN :
instructions N;
break;
default : instructions par défaut;
break;
}
La variable doit être de type int, float ou string. Elle est évaluée puis le programme
exécute alors les instructions à partir de la valeur correspondante jusqu'à rencontrer le mot
break. Si aucune valeur correspondante n’est proposée alors le programme exécute les
instructions par défaut.
Exemple
<? $j=1
switch ($j)
{
case 1 : echo "Lundi";
break;
case 2 : echo "Mardi";
break;
//…
case 7 : echo "Dimanche";
break;
default : echo "erreur";
break;
}
?>
5. Les structures répétitives
5.1. La boucle While
Cette boucle appelée en algorithmique « tant que » permet d'effectuer les mêmes
opérations (bloc d'instructions) tant que la valeur de l'expression est vraie. Bien sûr, il faut
s'assurer qu'une instruction de la boucle rende le test faux, sinon la boucle s'exécutera à
l'infini. La syntaxe est la suivante :
20
while (expression)
{
Instructions;
}
Exemple :
<? $x = 3;
$i = 0;
WHILE ($i != $x)
{
echo "x n'est pas égal à $i<br>";
$i++; // $i++ est équivalent à $i=$i+1
}
echo "<b>x est égal à $i</b>";
?>
Le résultat de l’exécution de cet exemple donne :
x n'est pas égal à 0
x n'est pas égal à 1
x n'est pas égal à 2
x est égal à 3
5.2. La boucle Do While
do
{
Instructions;
} while (expresion);
Exemple
<? $x=3;
$i = 0;
do {
echo "$i<br>";
$i ++;
}
while ($i < $x);
?>
Le résultat de l’exécution est:
21
0
1
2
5.3. La boucle For
Cette boucle permet d'exécuter une ou plusieurs instructions un certain nombre de fois.
La syntaxe est la suivante :
ligne 1
ligne 2
ligne 3
ligne 4
5.4. Boucle Each/ foreach
« Each » n'est pas vraiment une boucle mais on l'utilise généralement conjointement à
un type de boucle. Elle est prévue spécialement pour parcourir les tableaux :
<?php
$membres = array('Salah', 'Ali', 'Amel');
print_r(each($membres));
print_r(each($membres));
print_r(each($membres)) ?>
22
Chaque utilisation de la fonction fait avancer le pointeur interne du tableau, c'est-à-
dire la position à laquelle PHP s'est arrêté la dernière fois qu'il a consulté le tableau.
Afin de simplifier son utilisation, on la couple souvent avec une boucle "while" :
<?php
$membres = array('Salah', 'Ali', 'Amel');
while(list($i, $membre) = each($membres))
{ echo $membre; }
Le mot clef "each" étant assez complexe à utiliser, PHP propose une boucle très
pratique : foreach.
<?php
foreach(<tableau> as <element>)
{
<instructions>
}
?>
<?php
foreach(<tableau> as <clef> => <element>)
{
<instructions>
}
?>
Exemple:
<?php
$membres = array('Salah', 'Ali', 'Amel');
//parcours du tableau :
foreach($membres as $membre)
{ echo $membre; //affiche tour à tour "Salah" puis "Ali" puis "Amel" }
//alternative :
foreach($membres as $i => $membre)
{ echo $i . ' ' . $membres[$i]; //affiche tour à tour "0 Salah" puis "1 Ali" puis "2 Amel" }
?>
23
6. Les fonctions utilisateurs
Tout code PHP correcte syntaxiquement peut apparaître dans une fonction et dans une
définition de classe.
Les valeurs sont renvoyées en utilisant une instruction de retour optionnelle. Tous
types de variables peuvent être renvoyés, tableau et objet compris.
On ne peut pas renvoyer plusieurs valeurs en même temps, mais on peut obtenir un
résultat identique en renvoyant un tableau.
function small_numbers() {
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
6.2. Les arguments
24
PHP support le passage d'argument par valeur (méthode par défaut), par référence, et
les valeurs par défaut des arguments. Une liste d'argument dont le nombre est variable ne
fonctionne pas en PHP mais un résultat similaire peut être obtenu en utilisant un tableau.
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
6.3. Passage d'argument par référence
Par défaut, les arguments sont passés à la fonction par valeur (en modifiant la valeur
d'un argument dans la fonction, cela ne change pas sa valeur à l'extérieure de la fonction).
Si on veut que les fonctions changent la valeur des arguments, on doit passer ces
arguments par référence.
Si on veut qu'un argument soit toujours passé par référence, on peut ajouter un '&'
devant l'argument dans la déclaration de la fonction :
function add_some_extra(&$string) {
$string .= 'et du texte supplémentaire.';
}
$str = 'Ceci est une phrase, ';
add_some_extra($str);
echo $str; // affiche 'Ceci est une phrase, et du texte supplémentaire.'
Si on veut passer une variable par référence à une fonction mais de manière ponctuel,
on peut ajouter un '&' devant l'argument dans l'appel de la fonction:
On peut définir des valeurs par défaut pour les arguments de type scalaire :
25
function makecoffee ($type = "cappucino") {
return "Making a cup of $type.\n";
}
echo makecoffee ();
echo makecoffee ("espresso");
La valeur par défaut d'un argument doit obligatoirement être une constante, et ni une
variable ou un membre d'une classe.
En PHP 4.0, il est aussi possible de spécifier qu'un argument n'est pas affecté, (unset)
comme argument par défaut. Cela signifie que l'argument ne sera pas affecté, si aucune valeur
n'est passée comme argument.
Il est à noter qu’on utilise les arguments par défaut, la valeur par défaut doit se trouver
du côté droit du signe '='; sinon, cela ne fonctionnera pas. Considérons le code suivant :
26
Chapitre III : Les formulaires
Introduction
Les formulaires interactifs permettent aux auteurs de pages Web de doter leur page
web d'éléments interactifs permettant par exemple un dialogue avec les internautes.
L'un des intérêts de PHP est sa capacité à exploiter ces données.
Le lecteur saisit des informations en remplissant des champs ou en cliquant sur des
boutons, puis appuie sur un bouton de soumission (submit) pour l'envoyer soit à un URL,
c'est-à-dire de façon générale à une adresse e-mail ou à un script de page web dynamique tel
que PHP, ASP ou un script CGI.
1. La balise FORM
Les formulaires sont délimités par la balise <FORM> ... </FORM>, une balise qui
permet de regrouper plusieurs éléments de contrôle : zones de texte, boutons radio, cases à
cocher, listes déroulantes,... Chacun de ces éléments se caractérise par un attribut "name" qui
définira tout simplement le nom de la variable à récupérer en PHP avec la valeur entrée par
l'utilisateur. Elle possède les attributs obligatoires suivants :
Lorsqu'un formulaire est soumis (appui sur le bouton de soumission), les données présentes
dans le formulaire sont envoyées au script d’une page web dynamique sous forme de paires
nom/valeur, c'est-à-dire un ensemble de données représentées par le nom de l'élément de
27
formulaire, le caractère "=", puis la valeur associée. L'ensemble de ces paires nom/valeur
étant séparées entre elles par des esperluettes (caractère &). Les données envoyées
ressembleront donc à ceci :
champ1=valeur1&champ2=valeur2&champ3=valeur3
Dans le cas de la méthode GET (envoi des données à travers l'URL), l'URL ressemblera à une
chaîne du genre :
URL?champ1=val1&champ2=val2
2.1. Envoi des données avec POST
Sur cet exemple, l'utilisateur a la possibilité de spécifier le prénom, cette donnée sera
exploitable dans la page resultat.php sous la forme d'une variable $_POST["prenom"]
(composée de la valeur de l'attribut "name" de la zone de texte à remplir). Ainsi si on met le
code suivant dans la page resultat.php :
<?
echo "Prénom = ";
echo $_POST["prenom"];
?>
// On aura : Prénom = Ali
Les variables ne transitent pas toujours via un formulaire mais aussi par l'URL via la
méthode GET. Les variables sont ensuite exploitables sur la page cible. Pour déclarer une
28
variable qui sera visible dans la page cible il suffit donc de placer à la fin de l'URL un ? Suivi
d'un couple nom=valeur en séparant les variables par un & lorsqu'il y en a plus d'une.
On peut donc faire transiter un certain nombre de variables par l'URL en répétant la
forme : url.php?var1=valeur1&var2=valeur2&varN=valeurN avec une limite fixée à 255
caractères. Dans le cas d'une seule variable on ne met pas &, nous aurons :
url.php?var1=valeur1.
La récupération des variables se fait avec la syntaxe : $var1 = $_GET["var1"] par
exemple pour la variable 1.
Exemple
<!--page exemple.php-->
<?
echo 'Choisir une action<br>';
echo '1. <a href="dossier.php?page=2&n=15">lire la suite</a><br>';
echo '2. <a href="dossier.php?fin=1">terminer</a>';
?>
<!---------------------------------------------------------------------->
<!--page dossier.php-->
<?
if ( $_GET["fin"]= =1 ) {
echo 'Fin de lecture';
}
else {
$page = $_GET["page"];
$nbpage = $_GET["n"];
echo 'Dossier - page '.$page.' sur '.$nbpage;
}
?>
3. Les contrôles d’un formulaire
Il est possible d'insérer n'importe quel élément HTML de base dans une balise FORM
(textes, boutons, tableaux, liens, ...) mais il est surtout intéressant d'insérer des éléments
interactifs. Ces éléments interactifs sont :
29
3.1. La balise INPUT
La balise INPUT est la balise essentielle des formulaires, car elle permet de créer un bon
nombre d'éléments "interactifs". La syntaxe de cette balise est la suivante :
L'attribut name est essentiel car il permettra la connaissance du champ associé à la paire
nom/valeur, c'est-à-dire que le nom du champ sera suivi du caractère "=" puis de la valeur
entrée par l'utilisateur, ou dans le cas contraire de la valeur par défaut repéré par l'attribut
value. L'attribut type permet de préciser le type d'élément que représente la balise INPUT,
voici les valeurs que ce champ peut prendre :
– checkbox: il s'agit de cases à cocher pouvant admettre deux états : checked (coché) et
unchecked (non coché). Lorsque la case est cochée la paire nom/valeur est envoyée.
– hidden: il s'agit d'un champ caché. Ce champ non visible sur le formulaire permet de
préciser un paramètre fixe qui sera envoyé.
– file: il s'agit d'un champ permettant à l'utilisateur de préciser l'emplacement d'un fichier
qui sera envoyé avec le formulaire. Il faut dans ce cas préciser le type de données
pouvant être envoyées grâce à l'attribut ACCEPT de la balise FORM
– image: il s'agit d'un bouton de soumission personnalisé, dont l'apparence est l'image
situé à l'emplacement précisé par son attribut SRC (source).
– password: il s'agit d'un champ de saisie, dans lequel les caractères saisis apparaissent
sous forme d'astérisques (*) afin de camoufler la saisie de l'utilisateur.
– radio: il s'agit d'un bouton permettant un choix parmi plusieurs proposés (l'ensemble
des boutons radios devant porter le même attribut name. La paire nom/valeur du bouton
radio sélectionné sera envoyé au CGI. Un attribut checked pour un des boutons permet
de préciser le bouton sélectionné par défaut
– reset: il s'agit d'un bouton de remise à zéro permettant uniquement de rétablir
l'ensemble des éléments du formulaire à leurs valeurs par défaut
– submit: il s'agit du bouton de soumission permettant l'envoi du formulaire. Le texte du
bouton peut être précisé grâce à l'attribut « value ».
– text: il s'agit d'un champ de saisie permettant la saisie d'une ligne de texte. La taille du
champ peut être définie à l'aide de l'attribut size et la taille maximale du texte saisi grâce
à l'attribut maxlength
30
Exemples
La balise TEXTAREA permet de définir une zone de saisie plus vaste (plusieurs
lignes) par rapport à la simple ligne de saisie que propose la balise INPUT. Cette balise
possède les attributs suivants :
31
3.3. La balise SELECT
La balise SELECT permet de créer une liste déroulante d'éléments (précisés par des
balises OPTION à l'intérieur de celle-ci). Les attributs de cette balise sont :
– name: représente le nom associé au champ, c'est le nom qui permettra d'identifier le
champ dans la paire nom/valeur
– disabled: permet de créer une liste désactivée, c'est-à-dire affichée en grisée
– size: représente le nombre de lignes dans la liste (cette valeur peut être plus grande que le
nombre d'éléments effectifs dans la liste)
– multiple: marque la possibilité pour l'utilisateur de choisir plusieurs champs dans la liste
Exemple
<select name="L1">
<option value="E1">Element1</option>
<option value="E2">Element2</option>
</select>
4. Un exemple de formulaire
Les formulaires peuvent être mis en page à l'aide de tableaux (cela est même conseillé pour
avoir une mise en page soignée). Voici un exemple :
32
<TR>
<TD>Fonction</TD>
<TD>
<SELECT name="fonction">
<OPTION VALUE="enseignant">Enseignant</OPTION>
<OPTION VALUE="etudiant">Etudiant</OPTION>
<OPTION VALUE="ingenieur">Ingénieur</OPTION>
<OPTION VALUE="retraite">Retraité</OPTION>
<OPTION VALUE="autre">Autre</OPTION>
</SELECT>
</TD>
</TR>
<TR>
<TD>Commentaires</TD>
<TD>
<TEXTAREA rows="3" name="commentaires">
Tapez ici vos commentaires</TEXTAREA>
</TD>
</TR>
<TR>
<TD COLSPAN=2> <INPUT type="submit" value="Envoyer"> </TD>
</TR>
</TABLE>
</FORM>
Nom
Prénom
Homme :
Sexe
Femme :
Fonction
Commentaires
Envoyer
33
Chapitre IV : Accès aux bases de données
Introduction
L'intérêt majeur de PHP est son interfaçage avec un grand nombre de bases de
données. Pratiquement tous les SGBD sont pris en charge, mais PHP s'utilise souvent avec le
SGBD MySQL. Pour créer une base de données avec MySQL on utilise un utilitaire
approprié. Ensuite l’exploitation de cette base de données avec PHP s'effectue en 5 étapes :
– connexion à MySQL
– sélection de la base de données
– exécution de requêtes sur la base de données
– exploitation des résultats de la requête
– fermeture de la connexion à MySQL
1. Connexion à une base de données MySQL
Avant d'exploiter les données qui se trouvent dans la base, il faut ouvrir une connexion
qui ne sera fermé qu'une fois toutes les opérations sont effectuées. La base de données se
trouve sur un serveur désigné avec un nom de domaine, une adresse IP ou un alias.
La première étape consiste à déclarer les variables qui vont permettre la connexion à la
base de données (ce sont les paramètres des fonctions de connexion à la base). Ces variables
sont :
– $user : Le nom d'utilisateur
– $passwd : Le mot de passe
– $host : L'hôte (ordinateur sur lequel le SGBD est installé)
– $bdd : Le nom de la base de données
Rappel: Les variables ne sont pas visibles par vos visiteurs étant donné que le script (portant
l'extension .php3) est systématiquement interprété par le serveur Web !
34
Le comble de l'élégance voudrait que l'on stocke ces valeurs dans un fichier à part,
afin de changer les valeurs dans tous les fichiers y faisant référence en une seule fois.
Pour se connecter, on utilise la fonction mysql_connect () qui retourne vrai si la
connexion a réussi et faux sinon, comme suit :
<?php
// Déclaration des paramètres de connexion
$host = la_machine; // Généralement la machine est localhost
// C’est-a-dire la machine sur laquelle le script est hébergé
$user = votre_login;
$bdd = Nom_de_la_base_de_donnees;
$passwd = Mot_de_passe;
// Connexion au serveur
mysql_connect($host, $user,$passwd);
?>
Exemple :
<?
$serveur = "mysql.com";
$login = "cours";
$pwd = "php";
mysql_connect ($serveur, $login, $pwd) ;
?>
2. Sélection de la base de données
Une fois nous sommes connectés à une base de données MySQL, nous pouvons
effectuer des tâches classiques dans un SGBD, à savoir :
– ajouter un enregistrement,
– modifier un enregistrement,
– supprimer un enregistrement
– et afficher le résultat d'une requête select.
35
Toutes ces actions sont directement effectuées en SQL en utilisant la requête
appropriée qui sera exécuter en utilisant la fonction PHP mysql_query ().
$requete = "requête SQL";
$res = mysql_query ($requete);// ou encore mysql_query ($requete);
Cet exemple permet de comprendre comment PHP s'interface avec MySQL : une
requête SQL est passée en argument de la fonction mysql_query (), cette requête est déclarée
dans une variable de type chaîne de caractères. De la même façon, on peut exécuter toute
autre requête.
Supposons qu’on a dans notre base de données une table etudiant qui contient les
champs numero, nom, age. Le code PHP suivant permet d’afficher le contenu de cette table, la
connexion et la sélection de la base sont déjà faites :
<?
$requete = "SELECT * FROM Etudiant";
$res = mysql_query ($requete);
$nb = mysql_num_rows($res);
$i=0;
while($i!=$nb) {
$num = mysql_result($res,$i,"numero");
$nom = mysql_result($res,$i,"nom");
$age = mysql_result($res,$i,"age") ;
echo "Numero = $num -- Nom = $nom -- Age = $age <br>";
$i++;
}
mysql_close (); // fermer la connexion
?>
36
3.2. Cas de la requête INSERT
On veut insérer dans la table « etudiant » des valeurs saisie par l’utilisateur. Pour cela
on doit créer une page nommée « saisie.htm » qui contient un formulaire dans lequel on
trouve 3 zones de texte pour la saisie du numero, nom et age, et un bouton pour l’insertion et
qui a l’interface suivante :
<?
mysql_connect("mysql.com", "cours", "php");
mysql_select_db("coursPHP");
$num=$_POST["num"];
$nom=$_POST["nom"];
$age=$_POST["age"];
if ( mysql_query("insert into etudiant values($num,'$nom',$age)") )
echo " Insertion OK ";
37
else
{
$erreur = mysql_error(); echo "$erreur";
}
mysql_close();
?>
Remarque :
On doit vérifier que la requête s’est exécuter correctement sinon on affiche l’erreur qui s’est
produite grâce à la fonction mysql_error().
<?
mysql_connect("mysql.com", "cours", "php");
mysql_select_db("coursPHP");
$a = 30;
if ( mysql_query("UPDATE etudiant SET age=$a where numero=1") )
echo "Table modifié ";
else
{
$erreur = mysql_error();
echo "$erreur";
}
mysql_close();
?>
On veut supprimer de la table « etudiant » l’étudiant qui a un numéro saisi par l’utilisateur.
Pour cela on doit créer une page nommée « choix.htm » qui contient un formulaire dans
lequel on trouve une zone de texte pour la saisie du numero et un bouton pour la suppression
et qui a l’interface suivante :
38
Le code de la page « choix.htm » est le suivant :
<html>
<head></head>
<body>
<form action="supprime.php" method="post">
Choix du Numéro: <br>
Numero:<input type="text" name="num"><br>
<input type="submit" value="Supprimer">
</form>
</body>
</html>
39
4. fermeture de la connexion à MySQL
Une fois on a terminé d’exploiter les données de la base on doit fermer la connexion en
utilisant la fonction mysql_close ().
$connect = mysql_connect($host,$user,$passwd);
mysql_connect($host,$user,$passwd)
or die("erreur de connexion au serveur $host");
6. Traitement des résultats
<html>
<head>
<title>Liens</title>
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0">
40
<tr>
<th>Nom du site</th>
<th>URL</th>
</tr>
<?php
// Déclaration des paramètres de connexion
$host = la_machine; // Généralement la machine est localhost
$user = votre_login;
$bdd = Nom_de_la_base_de_donnees;
$passwd = Mot_de_passe;
// Connexion au serveur
mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
?>
</tr>
</table>
</body>
</html>
Dans l'exemple ci-dessus, les requêtes retournent les champs nom et url.
41
La fonction mysql_fetch_row() analyse donc chaque ligne de résultat de la requête et stocke
les colonnes dans le tableau row[].
Ainsi, le champ nom sera stocké dans row[0] et url dans row[1].
D'autre part, on inclue généralement mysql_fetch_row() dans une boucle while de telle façon
à ce que l'ensemble des lignes de résultat soient traitées. Lorsqu'il n'y a plus de ligne à traiter,
la boucle while se termine et l'interpréteur exécute la suite des instructions.
Il peut être utile, avant d'insérer des données dans une table, de détecter la présence d'un
enregistrement dans une table, afin d'éviter de stocker des doublons. Cela peut se faire en
effectuant une requête SQL avec un ordre SELECT et une clause WHERE permettant de
vérifier la présence ou non d'enregistrements correspondant à la requête. La non présence de
résultat se traduit par un retour nul de la part de la fonction mysql_fetch_row().
Voici un exemple affichant le résultat d'une requête le cas échéant, et dans le cas contraire une
phrase expliquant qu'aucun enregistrement correspondant n'a été trouvé (le code HTML dans
lequel le code PHP doit être implanté a volontairement été omis) :
<?php
// Déclaration des paramètres de connexion
$host = la_machine; // Généralement la machine est localhost
$user = votre_login;
$bdd = Nom_de_la_base_de_donnees;
$passwd = Mot_de_passe;
// Connexion au serveur
mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
42
$Nom = $row[0];
$Url = $row[1];
echo "<tr>\n
<td><a href=\"$Url\">$Nom</a></td>\n
<td>$Url</td>\n
</tr>\n";
}
}
43