Professional Documents
Culture Documents
2
Références
PHPFrance.com
• PHPFrance est l’espace avec lequel de nombreux développeurs PHP d’aujourd’hui
se sont formés il y a quelques années. (site Internet : http://www.phpfrance.com).
3
Références
PHPIndex.com
• PHPIndex est l’un des sites pionniers français sur le PHP. Ce portail propose de
nombreuses ressources et informations sur des sujets pointus (site Internet :
http://www.phpindex.com).
4
Références
PHPScripts-fr.net
• PHPScripts offre de nombreuses ressources sur le PHP. Son principal atout est son
annuaire de scripts. Il contient des ressources dans tous les domaines :
administration de base de données, agenda, annuaire, authentification, etc.
• site Internet : http://www.phpscripts-fr.net).
5
Références
PHP Solutions
• PHP Solutions est un magazine papier dédié à PHP et MySQL. Il rassemble de
nombreux articles intéressants en français. D’origine polonaise, le magazine est
traduit dans de nombreuses langues (site Internet : http://www.phpsolmag.org).
6
Références
7
Références
8
Références
9
Références
10
Editeurs
Eclipse
• L’éditeur Eclipse accompagné du plug-in PHP Eclipse constitue une des solutions les
plus complètes à disposition des développeurs de projets de grande taille.
• http://www.phpeclipse.de
Zend Studio
• Un éditeur similaire à Eclipse, également écrit en Java par la société Zend
Technologies.
• http://www.zend.com/store/products/zend-studio/
Maguma Open Studio/Maguma Studio
• Un bon éditeur, qui existe maintenant en deux versions, une open-source et une
commerciale.
• http://www.maguma.com
Komodo Professional
• Komodo est un éditeur stable, qui possède une interface agréable et intuitive
• http://www.activestate.com/Products/Komodo/
PHPEdit
• PHPEdit est un bon éditeur commercial spécialisé pour PHP.
• http://www.waterproof.fr
11
Documentation en ligne
• Exemple :
• http://fr.php.net/echo
12
Comment ça fonctionne sans PHP
public/www
2
Serveur http
client 3
index.html
support
Le répertoire
13
Comment ça fonctionne avec PHP/MySQL
1 SGBD
MySQL
public/www
client
4
fichier.php
2
Serveur http
3
Module PHP
Génération Fichier_bis.php
du code html
14
Serveur http
15
Introduction
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. Ses principaux atouts sont:
Une grande communauté de développeurs partageant des centaines de milliers
d'exemples de script PHP
La gratuité et la disponibilité du code source (PHP est distribué sous licence GNU GPL)
La simplicité d'écriture de scripts
La possibilité d'inclure le script PHP au sein d'une page HTML (contrairement aux
scripts CGi, pour lesquels il faut écrire des lignes de code pour afficher chaque ligne en
langage HTML)
La simplicité d'interfaçage avec des bases de données (de nombreux SGBD sont
supportés, mais le plus utilisé avec ce langage est MySQL, un SGBD gratuit disponible sur
de nombreuses plateformes : Unix, Linux, Windows, MacOs X, Solaris, etc...)
L'intégration au sein de nombreux serveurs web (Apache, Microsoft IIS, etc.).
16
H. Mouncif, Dep. Info. FSAC 2005 Notes de cours : Technologies du web
Serveur Web locale: EasyPHP
Pourquoi EasyPHP?
Seul un serveur web peut générer le PHP. Le client ne
peut pas interpréter les scripts PHP.
Il va donc falloir trouver un moyen pour compiler les
scripts PHP localement. Vous pourrez alors travailler
dessus pour réaliser votre site en PHP.
EasyPHP est en fait un "package" qui contient tous les
programmes nécessaires pour pouvoir traiter du PHP !
Le site web de EasyPHP est : www.easyphp.org
17
Serveur Web locale: EasyPHP
18
Serveur Web locale: EasyPHP
Installez le programme qui se trouve dans le ZIP, comme vous le feriez pour
n'importe quel autre programme. A la fin, on vous proposera deux options.
Moi tout ce que je vous demande c'est de lancer EasyPHP, alors vous pouvez
cocher la case "Lancer EasyPHP".
Configurer EasyPHP
Dernière étape : il faut configurer EasyPHP. Je vous rassure de suite c'est
très rapide et très simple.
Faites un clic droit sur l'icône EasyPHP dans la barre des tâches. Un petit
menu s'ouvre :
C'est "Administration" qui va nous servir. Cela permet de configurer
EasyPHP.
19
Serveur Web locale: EasyPHP
1. Apache > Alias : c'est là qu'on va se rendre pour configurer EasyPHP. Cela permet d'indiquer
les sites web que vous avez sur votre disque dur, pour que EasyPHP les reconnaisse.
2. PhpMyAdmin > Gestion BDD : c'est par ici que vous pourrez gérer votre base de données. On
verra ce que c'est dans la partie II de ce cours.
20
Serveur Web locale: EasyPHP
1. Nom de l'alias : c'est le nom de votre site. Il faut bien lui donner un nom quoi :p.
Dans notre exemple, on mettra "TestsPHP".
2. Le chemin du répertoire : il faut indiquer dans quel dossier se trouve votre site. Si
vous avez fait comme je vous l'ai dit, vous devriez avoir créé un dossier "Tests
PHP" dans "Mes documents".
3. Paramètres par défaut du répertoire : dès que vous voyez des mots bizarres en
anglais, vous faites comme moi : vous n'y touchez pas
4. OK : une fois que tout est rempli, cliquez sur ce petit bouton et c'est bon
21
Syntaxe de base
Les instructions PHP peuvent être insérées dans les commandes HTML, ce
qui facilite le développement des sites web dynamiques. Lorsque PHP
commence à traiter un fichier, il ne fait qu'afficher le texte HTML qu'il
rencontre. Un fichier, qu’il soit « .html » ou « .php », fonctionnera
exactement de la même façon. Si on veut insérer des commandes PHP dans
un fichier, il faut indiquer à PHP le début d'une telle séquence, en passant
en mode PHP comme tel :
22
Syntaxe de base
La fonction echo
La fonction echo est la fonction de base de toute page PHP. Elle permet
d’afficher une ou plusieurs chaînes et donc d’inclure du texte dans la page
HTML envoyée au navigateur.
Syntaxe :
echo (texte)
echo texte1, texte2
Le séparateur d’instruction
En PHP, toutes les instructions doivent se terminer par un point-virgule.
Exemple :
<?php
echo ("Bonjour");
echo("Olivier");
?>
24
Les commentaires
# formme de commentaires 2
Ce type de commentaire à la Unix est très peux utilisé
// forme de commentaires 3
Comme en langage C++
25
Constantes
Définition
• La fonction define permet de définir une constante. Une constante
est une zone mémoire identifié par un nom qui contient une valeur
lisible mais non modifiable.
Syntaxe
Booléen define(Identificateur, valeur, booleén)
– Identificateur : Nom de la constante
– Valeur : valeur de la constante
– booleén : indique si le nom de la constante est sensible à la casse
(TRUE – Valeur par défaut), ou non (FALSE).
26
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.
•Exemple 1 :
•define(‘’author’’,’’Foobar’’);
•echo author; // affiche ‘Foobar’
•Exemple 2 :
•define(MY_YEAR,1980);
•echo MY_YEAR; // affiche 1980
27
Fonctions utiles
La fonction defined
• La fonction defined permet de savoir si une constante est définie ou
non.
Syntaxe
– Booléen defined(texte)
– Defined retourne TRUE si la constante est définie et FALSE dans le cas
contraire.
La fonction constant
• La fonction constant permet de retourner la valeur d’une constante
dont le nom est passé en paramètre.
Syntaxe
– Constant(Identificateur)
Identificateur : Nom de la constante
28
Variables
Les variables
Une variable est un objet repéré par son nom, qui peut être nombre,
texte ou autre. Les variables conservent temporairement des valeurs,
qui pourront être modifiées lors de l'exécution du programme.
29
Variables
Le typage des variables est implicite en PHP. Il n’y a donc pas besoin de
les déclarer ni même de les initialiser avant leur utilisation, toutefois, les
noms de variables doivent répondre à certaines règles syntaxiques:
Tout nom de variable doit obligatoirement être précédé du caractère
dollar ($).
Tout nom de variable doit commencer par une lettre (majuscule ou
minuscule) ou un "_", mais jamais un chiffre.
Un nom de variable peut comporter des lettres, des chiffres et le
caractère _ (les espaces ne sont pas autorisés).
Les noms de variables sont sensibles à la casse.
On affecte des valeurs aux variables à l’aide du signe égale (=)
En PHP3 les variables sont assignées uniquement par valeurs
En PHP4 les variables peuvent être assignées par références
Elles deviennent un alias
30
Fonctions utiles
32
Fonctions utiles
bool is_type(var) : renvoie True si la variable testée est du type
<?php
$var = 12;
is_int($var); //true
Is_string($var); //false
?>
<?php
$var = 12;
var_dump($var);
?>
Le code ci-dessus affichera int(15)
33
Fonctions utiles
• Quelques constantes :
• M_PI : valeur de pi (3.14159265358979323846)
• M_E : valeur de e (2.7182818284590452354)
34
Variables
36
Les chaînes de caractères
• Une variable chaîne de caractères n’est pas limitée en nombre de
caractères. Elle est toujours délimitée par des simples quotes ou des doubles
quotes.
• Exemples :
• $nom = ‘’Etiévant’’;
• $prenom = ‘Hugo’;
• Exemple 1 :
• $foo = ‘’Hello’’;
• $bar = ‘’Word’’;
• echo $foo.$bar;
• Exemple 2 :
• $name = ‘’Henry’’;
• $whoiam = $name.‘’IV’’;
• Exemple 3 :
• $out = ‘Patati’;
• $out .= ‘’ et patata…’’;
38
Les chaînes de caractères
• Affichage d’une chaîne avec echo:
• Exemples:
• 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 39
Portée des variables
La portée d'une variable dépend du contexte dans lequel la variable est définie.
Les constantes, les fonctions et classes sont partout visible donc accessible.
Variable globales
Les variables globales ne peuvent être utilisées telles quelles au niveau
du corps des fonctions.
Une variable globale ne peut être au sein d’une fonction que si elle est
précédée du mot réservé global.
Variable locales
Elles sont définies au niveau du corps des fonctions
40
Portée des variables
Toute variable utilisée dans une fonction est par définition, locale. Par exemple :
<?php
$a = 1;
function test() {
echo $a; /* portée locale */
}
test();
?>
41
Portée des variables
En PHP, une variable globale doit être déclarée à l'intérieur de chaque
fonction afin de pouvoir être utilisée dans cette fonction. Par exemple:
<?php
$a = 1;
$b = 2;
function somme() {
global $a, $b;
$b = $a + $b;
}
somme();
echo $b;
?>
•Exemple 1 :
•$toto = 100; // la variable $toto est initialisée à la valeur 100
•$foobar = &$toto; // la variable $foobar fait référence à $toto
•$toto++; // on change la valeur de $toto
•echo $foobar; // qui est répercutée sur $foobar qui vaut alors 101
•Exemple 2 :
•function change($var) {
• $var++; // la fonction incrémente en local l’argument
•}
•$nbr = 1; // la variable $nbr est initialisée à 1
•change(&$nbr); // passage de la variable par référence
•echo $nbr; // sa valeur a donc été modifiée 44
Conversion de type
<?php
$a = 3.14;
If(gettype($a)=="double")
settype($a, "integer" );
?>
45
Les opérateurs arithmétiques
Avec PHP on peut utiliser les différents opérateurs arithmétiques comme dans
les exemples suivants :
L'opérateur de division ("/") retourne une valeur entière (le résultat d'une
division entière) si les deux opérandes sont entiers (ou bien des chaînes
converties en entier. Si l'un des opérandes est un nombre à virgule flottante, ou
bien le résultat d'une opération qui retourne une valeur non entière, un nombre
à virgule flottante sera retourné.
46
Les opérateurs d’assignation
L'opérateur d'assignation est le signe "=". Il signifie que l'opérande de gauche se voit
affecter la valeur de l'expression qui est à droite du signe égal. En plus, il existe des
"opérateurs combinés" pour tous les opérateurs arithmétiques et pour les opérateurs
sur les chaînes de caractères. Cela permet d'utiliser la valeur d'une variable dans
une expression et d'affecter le résultat de cette expression à cette variable. Par
exemple:
<?php
$a = 3;
$a += 5; // affecte la valeur 8 à la variable $a.
// correspond à l'instruction '$a = $a + 5');
$b = "Bonjour";
$b .= "tout le monde!"; // affecte la valeur "Bonjour tout le
//monde!" à la variable $b
// identique à $b = $b." tout le monde!";
?> 47
Les opérateurs de comparaison
For
While
do…while
foreach(PHP4)
break, continue
49
Les structures de contrôles
If else elseif
Syntaxe:
If(expression)
{
bloc;
}
Elseif(expression 2)
{
bloc2;
}
………..
else
{
dernier block
}
50
Les tableaux
Les tableaux
51
Les tableaux
Indexation numérique
Indexation explicite
• $couleur[0] = "blanc", $couleur[1] = "bleu", $couleur[2] = "rouge";
Indexation automatique
• $couleur[] = "blanc", $couleur[] = "bleu", $couleur[] = "rouge";
Avec array sans indice
• $couleur = array("blanc", "bleu", "rouge");
Avec array + indice
• $couleur = array(5=>"blanc", "bleu", "rouge");
Indexation associative
$personne = array("nom" =>"LeMouel", "prenom"=>"Yann",
"age"=>30);
$couleur = array(1=>"blanc", 3=>"bleu", 5=>"rouge");
52
Les tableaux
<?php
$couleur[] = "blanc"; $couleur[] = "bleu"; $couleur[] = "rouge";
echo "$couleur[2]";
$couleur2 = array("blanc", "bleu", "rouge");
echo "<br /> $couleur2[2]";
$couleur3 = array(5=> "blanc", "bleu", "rouge");
echo "<br /> $couleur3[6]";
$personne = array("nom"=> "LeMouel", "prenom"=> "Yann", "age"=> 30);
echo "<br />$personne[prenom]";
$couleur4 = array(1=> "blanc", 3=> "bleu", 5=> "rouge");
echo "<br />$couleur4[5]";
?>
53
Les tableaux
54
Les tableaux
Tableaux multidimensionnels
Deux notations peuvent être utilisées pour construire un tableau
multidimensionnel, sous forme
$tableau[…]=$tableau_intérieur ou,
$tableau[…][…]=valeur.
Méthode 1 :
<?php
//création d’un tableau contenant les villes du Maroc
$villes_maroc[]= "Rabat";
$villes_maroc[]= "Temara";
$villes_maroc[]= "Casablanca";
// stockage du tableau des villes de Maroc dans le tableau des villes
$villes["Maroc"]=$villes_maroc; //tableau de tableau
//viles de France
$villes_france[]= "Paris";
$villes_france[]= "Brest";
$villes_france[]= "Quimper";
// stockage du ville de France
$villes["France"]=$villes_france;
?>
55
Les tableaux
Tableaux multidimensionnels
Méthode 2 :
<?php
//villes du maroc
$villes["Maroc"][]= "Rabat";
$villes["Maroc"][]= "Temara";
$villes["Maroc"][]= "Casablanca";
//villes de france
$villes["France"][]= "Paris";
$villes["France"][]= "Brest";
$villes["France"][]= "Quimper";
?>
56
Les tableaux
Tableau multidimensionnels
Méthode 1 :
<?php
$villes_maroc[]= array("Rabat", "Temara", "Casablanca");
$villes_france[]= array("Paris", "Brest", "Quimper");
$villes=array("Maroc"=>$villes_maroc,"France"=>$villes_france);
?>
Méthode 2 :
<?php
$villes=array("Maroc"=>array("Rabat", "Temara", "Casablanca"),
"France"=>array("Paris", "Brest", "Quimper"));
?>
57
Les tableaux
59
Les tableaux
60
Les tableaux
61
Les tableaux
La structure de parcours do ..while
synatxe:
do
{
instructions…
} while(next(tableau))
Pour parcourir le tableau, nous avons besoin des fonctions suivantes:
62
Les tableaux
63
Fonctions
1 Introduction
PHP offre la possibilité de définir des fonctions avec tous les avantages associés.
Les fonctions en PHP peuvent prendre des arguments sans spécifier leurs types.
Elles peuvent de façon optionnelle retourner une valeur.
2 Déclaration et appel
Le mot clé function permet d’introduire la définition d’une fonction
qui peut être définie selon la syntaxe suivante :
<?php
function nom_function($paramètre0, $paramètre1, $paramètre2, …)
{
instructions ;
}
?>
64
Fonctions
1 Introduction
PHP offre la possibilité de définir des fonctions avec tous les avantages
associés.
Les fonctions en PHP peuvent prendre des arguments sans spécifier leurs
types.
Elles peuvent de façon optionnelle retourner une valeur.
2 Déclaration et appel
Le mot clé function permet d’introduire la définition d’une fonction
qui peut être définie selon la syntaxe suivante :
<?php
function nom_function($paramètre0, $paramètre1, $paramètre2, …)
{
instructions ;
}
?>
Il est possible de retourner plusieurs valeurs d’une fonction sous forme d’un
tableau. Dans l’appel de cette fonction, il faudra affecter le tableau retourner à la
procédure list() qui prend en paramètre la taille de ce tableau. On affecte à list() le
retour de la fonction.
<?php
function opération($arg1,$arg2){
return array ($arg1+$arg2, $arg1-$arg2, $arg1*$arg2 ) ;
}
$a=5 ; $b=3 ;
list($a1,$a2,$a3)= opération($a,$b) ;
echo " somme : $a1 <br />" ;
echo " soustraction : $a2 <br />" ;
echo " produit : $a3 <br />" ;
?>
67
Fonctions
Visibilité de la fonction
Une fonction est utilisable uniquement dans le script où elle est définie. Pour l’employer dans
plusieurs scripts, il faut, soit recopier sa définition dans les différents scripts, soit la définir dans
un fichier inclus partout où la fonction est nécessaire.
Exemple :
Fichier fonctions.inc contenant des définitions de fonctions :
<?php
function somme($arg1,$arg2){
return $arg1+$arg2;
}
?>
Script utilisant les fonctions définies dans fonctions.inc :
<?php
include("fonctions.inc") ; //inclusion du fichier fonctions.inc
echo somme(3,3) ; //utilisations de la fonction somme
?>
68
Fonctions
Fonction variable
PHP propose une fonction variable qui permet de stocker un nom de fonction
dans une variable, et d’appeler la variable dans une instruction. Dans ce cas,
PHP remplace la variable par sa valeur et cherche à exécuter la fonction
correspondante.
Exemple :
<?php
function somme($arg1,$arg2){ function calculer($opération, $arg1,$arg2)
return $arg1+$arg2; {
} return $opération($arg1,$arg2) ;
}
function division($arg1,$arg2){
if($arg2==0) // utilisation de la fonction calculer
echo "division par zero !!! echo
<br />";calculer("somme",1,2)
else echo "<br />";
return $arg1/$arg2; echo calculer("division",1,2);
} ?>
69
Fonctions
Paramètres avec valeur par défaut
Les paramètres sont passés par copie et les résultas sont retournés par copie.
Même sans paramètre, un entête de fonction doit en porter. Comme en C++, il
est possible d’indiquer qu’un paramètre possède une valeur par défaut grâce à
la syntaxe suivante :
<?php
function nom_function($arg1 = valdeft1, $arg2= valdef2,..., $argn=valdeft){
instructions ; }
?>
La valeur par défaut d’un paramètre doit être une expression littérale et ne
peut être, ni une variable, ni une fonction, ni une expression composée.
<?php
function affiche($titre, $couleur="black"){
echo("<h1 style=\"color:$couleur\">$titre</h1>"); }
affiche("couleur noire"); affiche("couleur bleu", "red"); affiche("couleur!",
"#aaff55");
?> 70
Fonctions
Passage d’arguments par valeur, par référence
Le passage d’arguments par référence permet à une fonction de modifier les
variables passées en paramètres. Pour passer un argument par référence, il
suffit d’utiliser l’opérateur de référence & devant le nom du paramètre dans
la déclaration de la fonction.
<?php <?php
function incr_valeur($cmp){ function incr_valeur(&$cmp){
$cmp++; //incrémentation $cmp++ ; // incrémentation
echo "\$cmp =$cmp <br />"; echo "\$cmp = $cmp <br />";
} }
$i=1 ; $i=1 ; // initialisation
echo "\$i avant appel = $i <br />"; echo "\$i avant appel = $i <br />";
incr_valeur($i) ; incr_valeur($i) ;
echo "\$i après appel =$i <br >"; echo "\$i après appel =$i <br />";
?> ?>
71
Fonctions
Récursivité
PHP permet d’utiliser la récursivité, c-à-d, la possibilité d’une fonction de
s’appeler par elle-même.
Exemple :
<?php
function factoriel($n){
if($n==0) return 1 ;
else return $n*(factoriel($n-1));
}
$nombre=3 ;
echo "factoriel($nombre)=", factoriel($nombre);
?>
72
Formulaires
1 Introduction
Les formulaires servent essentiellement pour la gestion interactive d’un
site.
Les formulaires sont à la base des pages web dynamiques.
2 Mise en œuvre d’un formulaire
Un formulaire XHTML est défini entre les balises <form> et </from>
Exemple:
<form method="post" action="traitement.php">
<p>Texte à l'intérieur du formulaire</p>
</form>
action : le script qui va traiter le formulaire.
method : Mode de transmission vers le serveur des informations
saisies dans le formulaire.
Get : les données du formulaire sont transmises dans l’URL.
Post : les données du formulaire sont transmises dans le corps de la
requête.
73
Formulaires
3 Les méthodes Get et Post
La transmission d’un formulaire s’effectue selon l’une des deux méthodes d’envoi :
GET ou POST.
Si l’option register_globals est activée, lors de la soumission du formulaire à une
page de traitement, chaque élément de saisie est assimilé à une variable PHP dont
le nom est constitué par la valeur de l’attribut name et son contenu par la valeur
de l’attribut value.
Si, au contraire, l’option register_globals est invalidée, chaque élément de
saisie est assimilé à une variable PHP au sein du tableau associatif dépendant de
la méthode d’envoi employée.
- Si la méthode GET a été choisie, on retrouve les variables au
sein de la superglobale $_GET.
- Si la méthode POST a été choisie, les variables sont contenues
au sein de la superglobale $_POST.
Pour obtenir les valeurs des variables en utilisant les superglobale, procédez comme
suit :
Syntaxe
$valarg =$_GET[‘nomarg’]; //GET
$valarg =$_POST[‘nomarg’]; //POST 74
Formulaires
La méthode Get
La méthode GET envoie les données sous forme d’une suite de couples
nom/valeur ajoutés à l’URL de la page appelée.
La partie d’une URL précédée par le caractère point d’interrogation (?) est
appelée chaîne de requête. Si la chaîne de requête contient plusieurs
éléments, alors chaque élément/valeur doit être séparé par le caractère
&. Par ailleurs, elle ne peut pas dépasser 255 caractères. Les données
transmises au serveur par la méthode GET sont visibles par les utilisateurs
directement dans la barre d’adresse du navigateur.
Exemple:
http://www.monsite.com/infos.php?jour=27&mois=07&annee=20
03&titre=Informations
4 variables seront créées :
$_GET['jour'] = 27;
$_GET['mois'] = 07;
$_GET['annee'] = 2003;
$_GET['titre'] = "Informations"; 75
Formulaires
Exemple :
infos.php
<html><body>
<p>Lien vers la page appel.php, avec des variables aux valeurs
différentes:</p>
<p><a href="appel.php?nom=Yossef&prenom=Amine">Lien vers
cible.php?nom=YossefDupont&prenom=Amine</a></p>
</body></html>
appel.php
<p>Bonjour !</p>
<p>Votre nom est <?php echo $_GET['nom']; ?> , et votre prénom est <?php
echo $_GET['prenom']; ?>.</p>
<p>Faites un autre essai, <a href="infos.php">cliquez ici</a> pour revenir à
infos.php</p>
76
Formulaires
PHP : Les bases
La méthode Post
La méthode POST place les informations directement à la suite de
l’adresse URL de la page appelée.
La partie d’une URL regroupe les informations dans l’en-tête d’une
requête HTTP. Ainsi, les données transmises par un formulaire restent
confidentielles et n’apparaissent pas dans l’URL. La fonction isset() est
très pratique lorsqu’on écrit des traitements de formulaires. Elle permet
de déterminer si une variable est affectée (0 compris mais ni NULL ni
FALSE). En utilisant cette fonction, il est possible de déterminer les
champs d’un formulaire n’ayant pas été renseignés par l’utilisateur. Mais
isset() présente une difficulté : le test d’une chaîne de caractères vide
renvoie TRUE.
77
Formulaires
Exemple : Transmettre en utilisant un formulaire
form.php
<form action="cible.php" method="post">
<label>Entrer votre nom:
<input type="text" name="prenom" /> <input type="submit" value="Valider"
/>
</label></form>
cible.php
<p>Bonjour !</p>
<p>Je sais comment tu t'appelles. Tu t'appelles <?php echo
$_POST['prenom']; ?> !</p>
<p>Si tu veux changer de prénom, <a href="form.php">clique ici</a> pour
revenir à form.php</p>
78
Formulaires
4 LE FORMULAIRE ET LE SCRIPT PHP
79
Formulaires
Exemple :
<?php
echo ("<html>");
echo ("<head>");
echo ("<title> calcul du factoriel </title>");
echo ("</head>");
echo ("<body>");
echo ("<head>");
echo ("<form method=\"post\" action=\"traitement.php\">");
echo("<label> Entrer entier:
<input type=\"text\" name=\"nombre\" size=\"30\"/>
</label>");
echo("<input type=\"submit\" /> <input type=\"reset\" />");
echo("</form>");
echo("</html>");
?> 80
Formulaires
traitement.php
<?php
function factoriel($n){
if($n==0) return 1 ;
else return $n*(factoriel($n-1));
}
$var=$_POST['nombre'];
print("factoriel($var)=");
print(factoriel($var));
?>
81
Formulaires
Exemple: Variables de formulaires complexes
<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
echo '<pre>';
print_r($_POST);
echo '<a href="'. $_SERVER['PHP_SELF'] .'">Essayez à nouveau</a>';
echo '</pre>';
} else {
?>
82
Formulaires
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Nom : <input type="text" name="personal[name]" /><br />
Email : <input type="text" name="personal[email]" /><br />
ville : <br />
<select multiple name="ville[]">
<option value="casa">casa</option>
<option value="fes">fes</option>
<option value="meknes">meknes</option>
</select><br />
<input type="hidden" name="action" value="submitted" />
<input type="submit" name="submit" value="submit me!" />
</form>
<?php
}
?>
83
POO en PHP
La notion d'objet dans le langage du PHP à un aspect très limité
contrairement au langages de référence tel que le C++.
Le concept objet doit être pris dans le sens de "module", sous ce nom, se
cache un ensemble de commandes visant à exécuter des actions, un objet
est une entité, un peu comme si l'on voulait diviser notre programme en
sous-tâches.
Vocabulaire du concept objet en PHP
• Objet :Représentant de la classe dans l'application, il se nomme instance de
classe.
• Classe : Entité contenant toutes les méthodes et attributs.
• Méthode : Nom donné aux fonctions contenu dans la classe.
• Attribut : Nom donné aux variables globales de la classe, définis aux début.
• constructeur: Nom donné à la méthode lancé lors de l'instanciation de la classe,
elle porte le même nom que la classe.
• destructeur:Nom donné à la méthode lancé lors de la destruction de la classe,
cet notion, n'existe pas vraiment dans l'implémentation du concept objet en
PHP.
84
POO en PHP
Déclaration d’une classe en PHP
class nom_classe
{
var $variable1; // Variable sans valeur
On utilise le mot clé var pour introduire un attribut, vous pouvez laissez
cette variable indéfini, ou lui donner une valeur.
85
POO en PHP
Introduction des méthodes
class nom_class {
var $variable1;
var $variable2 = "Variable 2";
var $tableau = array()
function nom_classe ($var, $autre_var) // Le constructeur de la classe
{
...
}
function Fonction1 () // Fonction1
{
...
}
}
La définition de méthodes dans une classe se fait de la même manière que les
fonctions dans le code source PHP,
86
POO en PHP
Mise en œuvre de la classe
<?php
$objet = new nom_classe ("valeur, valeur2");
$objet->variable1 = "Variable 1";
$objet->fonction2("valeur");
?>
• La création d’une instance de la classe nom_classe utilise le mot-clé new.
• Pour initialiser l’attribut $variable1, on utilise l'objet suivi d'un tiret - puis
d'un signe supérieur > et on ajoute le nom de la variable (qui est à
l'intérieur de la classe) sans le signe dollar $.
87
POO en PHP
Exemple :
88
POO en PHP
Le système de classes de PHP est très succinct, il ne gère que l’héritage simple.
Exemple :
class Voituredeluxe extends Voiture { // déclaration de la sous classe
var $couleur;
function voituredeluxe() { // constructeur
$this->Voiture();
}
function Set_Couleur($couleur) {
$this->couleur = $couleur;
}
function Get_Couleur() {
return $this->couleur;
}
}
La nouvelle classe Voituredeluxe hérite de tous les attributs et méthodes de la
classe parente Voiture dont elle est une extension (extends). Il est possible de
surcharger les méthodes, d’en déclarer de nouvelles, etc. 89
POO en PHP
Quelques fonctions :
get_declared_classes() : retourne un tableau listant toutes les classes définies
class_exists($str) : vérifie qu'une classe dont le nom est passé en argument a été
définie
get_class($obj): retournent le nom de la classe de l’objet $obj
get_class_methods($str) : retourne les noms des méthodes de la classe $str dans un
tableau
get_class_vars($str) : retourne les valeurs par défaut des attributs de la classe $str
dans un tableau associatif
get_object_vars($obj) : retourne un tableau associatif des attributs de l’objet $obj
les clés sont les noms des attributs et les valeurs sont celles des attributs si elles
Existent.
is_subclass_of($obj,$str) : détermine si l’objet $obj est une instanciation d’une
sous-classe de $str, retourne VRAI ou FAUX
method_exists($obj,$str) : vérifie que la méthode $str existe pour une classe dont
$obj est une instance, retourne VRAI ou FAUX 90
POO en PHP
• Tout objet instancié est une variable et peut à se titre être passé en
argument à une fonction ou bien être un retour de fonction ou encore
être sauvegardée en donnée de session.
91
Fichiers
Nom Rôle
fopen Ouvrir un fichier
fclose Fermer un ficheir
fread Lire le contenu d’un fichier (dans une
chaîne)
file Lire le contenu d’un fichier (dans un
tableau)
fwrite Ecrire dans un fichier
file_get_contents Ouvrir, lire et fermer un fichier
file_put_contents Ouvrir, ecrire et fermer un fichier
copy Copier un fichier
unlink Supprimer un fichier
rename Renommer un fichier
file_exists Tester l’existence d’un fichier
filesize Lire la taille d’un fichier
92
Fichiers
Exemple typique d’affichage du contenu d’un fichier :
<?php
$file = "c:\data\info.txt" ;
$str="";
if( $fd = fopen($file, "r")) { // ouverture du fichier en lecture
while ( ! feof($fd) ) { // teste la fin de fichier
$str .= fgets($fd, 1024);
/* lecture jusqu’à fin de ligne où des 1024 premiers caractères */
}
fclose ($fd); // fermeture du fichier
echo $str; // affichage
} else {
die("Ouverture du fichier <b>$file</b> impossible.");
}
?> 93
Fichiers
La fonction fopen permet d’ouvrir des fichiers dont le chemin est relatif
ou absolu. Elle permet aussi d’ouvrir des ressources avec les protocoles
HTTP ou FTP. Elle renvoie FALSE si l’ouverture échoue.
Exemples :
$fp = fopen(‘’../docs/faq.txt’’, ‘’r’’);
$fp = fopen(‘’http://www.php.net/’’, ’’r’’);
$fp = fopen(’’ftp://user:password@cia.gov/’’, ‘’w’’);
Les modes d’ouverture
• 'r' Ouvre en lecture seule, 'r+' Ouvre en lecture et écriture
(pointeur est placé au début)
• 'w' Ouvre en écriture seule, 'w+' Ouvre en lecture et écriture;
(pointeur est placé au début avec création du fichier si il n’existe pas)
• 'a' Ouvre en écriture seule; place le pointeur de fichier à la fin du fichier
file. Si le fichier n'existe pas, on tente de le créer.
• 'a+' Ouvre en lecture et écriture; place le pointeur de fichier à la fin du
fichier. Si le fichier n'existe pas, on tente de le créer.
94
Fichiers
<?php
$filename = 'c:\data\info.txt';
$somecontent = "ceci a été ajoutée dans le fichier\n";
96
Fichiers
<?php
// Lit un fichier, et le place dans une chaîne
$filename = 'c:\data\info.txt';
$handle = fopen ($filename, "r");
$contents = fread ($handle, filesize($filename));
echo $contents;
fclose($handle);
?>
Description
fread() lit jusqu'à length octets dans le fichier référencé par handle . La
lecture s'arrête lorsque length octets ont été lus, ou que l'on a atteint la fin
du fichier.
97
Fichiers
<?php
$filename = 'c:\data\info.txt';
$file = 'c:\data\info1.txt';
if (!copy($filename, $file)) {
echo "La copie du fichier $file n'a pas réussi...\n";
}
?>
Description
copy() fait une copie du fichier source vers le fichier dest . Cette fonction
retourne TRUE en cas de succès, FALSE en cas d'échec.
98
Accès aux dossiers (I)
Il est possible de parcourir les répertoires grâce à ces quelques fonctions :
99
Accès aux dossiers (I)
<?php
// dossier courant
echo getcwd() . "<br/>";
chdir('home');
// dossier courant
echo getcwd() . "<br/>";
?>
Description
100
Accès aux dossiers (I)
Exemple :
<?php
function list_dir($name) {
if($dir = opendir($name)) {
while($file = readdir($dir)) {
echo "$file<br>\n";
if(is_dir($file) && !in_array($file, array(".",".."))) {
list_dir($file);
}
}
closedir($dir);
}
}
list_dir(".");
?>
101
Accès aux dossiers (I)
La classe dir
La classe dir contient les propriétés et méthodes permettant de parcourir un
dossier pour en lister les fichiers.
Propriété Description
Handle Valeur du pointeur vers le dossier
Path Chemin du dossier ouvert (chaîne de caractères)
Méthode Description
dir($str) Constructeur de la classe, ouvre le dossier défini par le
chemin $str (chaîne de caractères) et retourne une instance de
la classe dir.
read() Lecture d'une entrée du dossier ouvert
close() Fermeture du dossier
102
Accès aux dossiers (II)
Exemple 1:
<?php
if ($dir = opendir(".")) {
echo "Pointeur: ".$dir."<br>\n";
echo "Chemin: ".getcwd()."<br>\n";
while($file = readdir($dir)) {
echo "$file<br>\n";
}
closedir($dir);
}
?>
103
Accès aux dossiers (IV)
Exemple 2 :
<?php
$d = dir('.'); // ouverture du dossier courant
echo ‘’Pointeur: ‘’.$d->handle.’’<br />’’;
echo ‘’Chemin: ‘’.$d->path.’’<br />’’;
while($entry = $d->read()) { // lecture d’une entrée
echo $entry.’’<br />’’;
}
$d->close(); // fermeture du dossier
?>
Cet exemple est équivalent au précédent. Ils listent tous les deux les
fichiers et sous répertoires du dossier courant.
104
Dates et heures (I)
Les fonctions de dates et heures sont incontournables sur Internet et
sont indispensables pour la conversion en français des dates fournies
par la base de données MySQL qui les code au format anglophone
(YYYY-DD-MM hh:mm:ss).
Quelques fonctions :
date("$format") : retourne une chaîne de caractères contenant la date
et/ou l’heure locale au format spécifié
getdate() : retourne un tableau associatif contenant la date et l’heure
checkdate($month, $day, $year) : vérifie la validité d’une date
mktime($hour, $minute, $second, $month, $day, $year) : retourne le
timestamp UNIX correspondant aux arguments fournis c’est-à-dire le
nombre de secondes entre le début de l'époque UNIX (1er Janvier
1970) et le temps spécifié
time() : retourne le timestamp UNIX de l’heure locale
105
Dates et heures (II)
Exemple 1 :
echo date(''Y-m-d H:i:s'');
/* affiche la date au format MySQL : ‘2002-03-31 22:30:29’ */
Exemple 2 :
if(checkdate(12, 31,2001))
echo"La St Sylvestre existe même chez les anglais !!!";
Exemple 3 :
$aujourdhui = getdate();
$mois = $aujourdhui['mon'];
$jour = $aujourdhui['mday'];
$annee = $aujourdhui['year'];
echo ''$jour/$mois/$annee''; // affiche ‘31/3/2002’
106
Dates et heures (III)
Les formats pour date : • h Heure au format 12h [01..12]
• d Jour du mois sur deux chiffres • g Heure au format 12h sans les zéros initiaux
[01..31] • H Heure au format 24h [00..23]
• j Jour du mois sans les zéros • G Heure au format 24h sans les zéros initiaux
initiaux
• i Minutes [00..59]
• l Jour de la semaine textuel en
• s Secondes [00.59]
version longue et en anglais
• a am ou pm
• D Jour de la semaine textuel en
trois lettres et en anglais • A AM ou PM
• w Jour de la semaine numérique • L Booléen pour savoir si l'année est bisextile (1)
[0..6] (0: dimanche) ou pas (0)
• z Jour de l'année [0..365] • S Suffixe ordinal anglais d'un nombre (ex: nd
pour 2)
• m Mois de l'année sur deux
chiffres [01..12] • t Nombre de jour dans le mois donné [28..31]
• n Mois sans les zéros initiaux • U Secondes depuis une époque
• F Mois textuel en version longue et • Z Décalage horaire en secondes [-
en anglais 43200..43200]
• M Mois textuel en trois lettres
• Y Année sur 4 chiffres 107
Dates et heures (IV)
Les clés du tableau associatif retourné par getdate :
seconds secondes
minutes minutes
hours heures
mday jour du mois
wday jour de la semaine, numérique
mon mois de l'année, numérique
year année, numérique
yday jour de l'année, numérique
weekday jour de la semaine, textuel complet en anglais
month mois, textuel complet en anglais
108
Entêtes HTTP (I)
Le rôle des entêtes est d’échanger des méta informations entre serveur et
client à Propos du document, de la connexion, etc. Il est possible d’envoyer
des entêtes particuliers du protocole HTTP grâce à la commande header.
Description
header() permet de spécifier l'en-tête HTTP string lors de l'envoi des fichiers
HTML. Reportez-vous à « HTTP/1.1 Specification » pour plus d'informations
sur les en-têtes HTTP.
• headers_sent() : Retourne TRUE si les entêtes ont déjà été envoyées, FALSE
sinon.
109
Entêtes HTTP (III)
Exemple pratique 1 :
<?php
header(‘’Location: home2.php’’);
exit();
?>
Ce script effectue une redirection vers une autre page. C’est-à-dire que le
navigateur du client en voyant cet entête Location va charger
directement la page indiquée sans regarder la suite du script. La fonction
exit est là pour parer au cas impossible où le script continuerait son
exécution.
110
Entêtes HTTP
Exemple pratique 2 :
<?php
if(!isset($_SERVER["PHP_AUTH_USER"])) {
header(‘’WWW-Authenticate: Basic realm=\’’Mon domaine\’’’’);
echo ‘’Echec de l’identification.’’;
exit();
} else {
echo "Bonjour".$_SERVER["PHP_AUTH_USER"]."<br />";
echo "Votre mot de passe :".$_SERVER["PHP_AUTH_PW"];}
?>
Quelques fonctions :
session_start() : démarre une session
session_destroy() : détruit les données de session et ferme la session
session_register("var") : enregistre la variable $var dans la session en
cours, attention!!!, ne pas mettre le signe $ (dollars) devant le nom de
variable
session_unregister("var") : détruit la variable $var de la session en cours
112
Sessions
Le mécanisme des sessions est vraiment extrêmement simple. Prenons un
premier exemple pour voir comment s'enregistre une variable dans une
session avec un formulaire simple pour sauvegarder le nom du client qui
s'est connecté.
<html>
<body>
<form method="POST" action="page2.php">
Entrez votre nom : <input type="TEXT" name="nom">
<input type="SUBMIT" value="OK">
</form>
</body>
</html>
113
Sessions
page2.php
<?php
session_start();
$nom = $_POST['nom'];
$_SESSION['nom'] = $nom;
?>
<html>
<body>
Bienvenue sur ce site <?php echo $nom; ?>.<br />Regardons ce qui se passe
sur la <a href="page3.php">page</a> suivante.<br />
</body>
</html>
Dans ce script nous avons toujours le démarrage de session avec cette fois, la
récupération de la variable nom depuis le tableau superglobal de session.
115
Sessions (Effacement)
Nous avons vu que l'enregistrement de variables était vraiment très
facile. Pour effacer une variable de session, c'est tout aussi simple.
Page3.php
<?php
session_start();
if ( isset ($_SESSION['nom']) ) {$nom = $_SESSION['nom'];}
else {$nom = "mais votre nom a été effacé"; }
?>
<html>
<body>
Vous êtes toujours parmi nous
<?php echo $nom; ?>.<br /> Effacement de votre nom en cliquant
<a href="page4.php">ici</a>.<br />
</body>
</html>
Page4.php
<?php
session_start();
?>
<html><body>
<?php
unset ($_SESSION['nom']);
if (isset ($_SESSION['nom'])) {$resultat = "La suppression a échouée ."; }
else {$resultat = "Votre nom a été effacé."; }
echo $resultat;
?>
<br />Repartons en <a href="page3.php">arrière</a>.<br
/></body></html>
117
Sessions (Effacement Total)
Dans notre exemple, nous n'avons qu'une seule valeur stockée dans notre
session.
Cependant, il peut arriver de vouloir réinitialiser toutes les variables sans
pour autant vouloir changer de session.
Pour effacer l'ensemble des valeurs d'une session, vous avez deux
possibilités :
Utiliser la commande session_unset() qui ne prend aucun paramètre et
ne retourne aucune valeur.
session_unset();
Remarque :
Il est recommandé par la Communauté PHP d'utiliser la seconde possibilité
avec l'effacement du tableau superglobal.
118
Sessions (Destruction)
Nous avons vu que l'enregistrement de variables était vraiment très
facile. Pour effacer une variable de session, c'est tout aussi simple.
Page3.php
<?php
session_start();
if( isset($_SESSION['nom']) ) {$nom = $_SESSION['nom'];}
else{$nom = "mais votre nom a été effacé"; }
?>
<html>
<body>
Vous êtes toujours parmi nous<?php echo $nom; ?>.<br />
Effacement de votre nom en cliquant<a href="page4.php">ici</a>.<br />
Effacement de votre session en cliquant<a href="page5.php">ici</a>.
</body>
</html>
– Continuons en créant notre 5 script. . . 119
Sessions (Destruction)
Page5.php
<?php
session_start();
session_destroy();
?>
<html>
<body>
votre session a été détruite
</body>
</html>
Session détruite. . .
120
Expressions régulières
Les expressions régulières sont un outil puissant pour la recherche de motifs
dans une chaîne de caractères.
Fonctions :
eregi($motif, $str) : teste l’existence du motif $motif dans la chaîne $str
eregi_replace($motif, $newstr, $str) : remplace les occurrences de $motif
dans $str par la chaîne $newstr
split($motif, $str) : retourne un tableau des sous-chaînes de $str délimitées
par les occurrences de $motif
121
Expressions régulières
<?php
if(eregi(‘’Paris’’, $adresse))
echo ‘’Vous habitez Paris.’’;
$string = 'XYZ';
if(eregi('z', $string)) {
echo "'$string' contient un 'z' ou un 'Z'!";
}
?>
Description
eregi() est identique à ereg(), hormis le fait qu'elle ignore la casse des
caractères lors de la recherche sur les caractères alphabétiques.
122
Expressions régulières
Les motifs peuvent être très complexes et contenir des caractères spéciaux:
[abcdef] : intervalle de caractères, teste si l’un d’eux est présent
[a-f] : plage des caractères, teste la présence de tous les caractères minuscules entre
‘a’ et ‘f’
[^0-9] : exclusion des caractères de ‘0’ à ‘9’
\^ : recherche du caractère ’^’ que l’on déspécialise par l’antislash \
. : remplace un caractère
? : rend facultatif le caractère qu’il précède
+ : indique que le caractère précédent peut apparaître une ou plusieurs fois
* : pareil que + Mais le caractère précédent peut ne pas apparaître du tout
{i,j} : retrouve une chaîne contenant entre au minimum i et au maximum j fois le
motif qu’il précède
{i,} : idem mais pas de limite maximum
{i} : retrouve une séquence d’exactement i fois le motif qu’il précède
^ : le motif suivant doit apparaître en début de chaîne
$ : le motif suivant doit apparaître en fin de chaîne
123
Expressions régulières
Exemples de motifs :
‘’[A-Z]’’ : recherche toutes les majuscules
‘’[a-zA-Z]’’ : recherche toutes les lettres de l’alphabet minuscules ou
majuscules
‘’[^aeyuio]’’ : exclu les voyelles
‘’^Le ’’ : toute chaîne commençant par le mot ‘’Le‘‘ suivi d’un espace
‘’$\.com’’ : toute chaîne se terminant par ’’.com’’ (déspécialise le point)
Exemples :
if( ereg("^.*@wanadoo\.fr", $email) ) {
echo"Vous êtes chez Wanadoo de France Télécom.";
}
$email = eregi_replace("@", "-nospam@", $email);
124
Mail (I)
La fonction mail envoie un message électronique.
Syntaxe :
• mail($recipient, $subject, $message[, $headers, $params]);
Exemple :
• $message = "salam tout le monde.";
• mail("vous@labas.fr", "Aide sur PHP", $message);
125
Mail (II)
Exemple plus complet :
<?php
$recipient = ‘’Toy <toy@labas.com>, ‘’;
$recipient .= ‘’Pais <pais@pwet.net>’’;
$subject = ‘’Notre rendez-vous’’;
$message = ‘’Je vous propose le samedi 15 juin \n’’;
$message .= ’’--\r\n’’; // Délimiteur de signature
$message .= ‘’salam terre’’;
$headers = ‘’From: Huto Etiopant <site@network.com>\n’’;
$headers .= ‘’Content-Type: text/html; charset=iso-8859-1\n’’ ;
$headers .= ‘’Cc: bruno@ici.fr\n’’;
mail($recipient, $subject, $message, $headers);
?>
126
Mail (III)
Quelques entêtes :
• From: Hugo Etiévant <theboss@php-help.com>\n
• X-Mailer: PHP\n // maileur
• X-Priority: 1\n // Message urgent!
• X-Files: Truth is out there\n // entête fantaisiste !
• Return-Path: <deamon@php-help.com>\n// @ retour pour erreurs
• Content-Type: text/html; charset=iso-8859-1\n // Type MIME
• Cc: archives@php-help.com\n // Champs CC
• Bcc: bill@php.net, tony@phpinfo.net\n // Champs BCC
• Reply-To: <hugo@php-help.com> // @ de retour
127
Évaluation d’une portion de code PHP
Grâce à cette fonction, on peut conserver dans une base de données, des
portions de code utilisables ultérieurement.
Le code de la chaîne $str doit respecter les mêmes contraintes que le code
normal. Notamment :
• - point virgule après chaque instruction
• - respect des séquences d’échappement
• - etc…
• Exemple :
• $foobar = ‘’Hello Word’’;
• eval(‘echo $foobar;’); // affiche ’Hello Word’
128
Colorisation syntaxique (I)
• PHP dispose de fonctions qui permettent d’afficher le code source de
scripts php et d’en coloriser la syntaxe.
• Il n’est pas recommandé d’utiliser les fonctions suivantes afin que vos
visiteurs ne connaissent pas votre code source et ne puissent ainsi pas
exploiter des vulnérabilité de votre application web.
129
Colorisation syntaxique (II)
• Exemple :
• <?php highlight_file(‘’sondage.php’’); ?>
• Résultat affiché :
<?php
$out = "<html><body>";
ConnexionSQL();
echo date("D, d M Y H:i:s");
if($action == "add") {
AddNew();
} elseif($action == "stats") {
ShowStats();
}
/* ShowSubmitForm(); */
ShowStats();
$out .= "</body></html>";
echo $out;
130
?>
Colorisation syntaxique (III)
• La configuration de la colorisation se trouve dans le fichier php.ini :
Couleur de fond
Couleur des commentaires
Couleur par défaut
Couleur des balises HTML
Couleur des mots réservés
Couleur des chaînes
131
URL (I)
• Les URL (Uniform Ressource Location) sont les chemins de ressources sur
internet.
• Exemples d’URL:
• http://www.google.fr/?q=cours+php
• http://cyberzoide.developpez.com/php/php4_mysql.ppt
• ftp://foo:0478@ftp.download.net
132
URL (II)
• Le passage de valeur d’un script à l’autre se fait soit par les sessions, soit par
les formulaires ou encore par l’URL.
• Le caractère ? Indique que la suite de l’URL sont des paramètres et ne font pas
partie du nom de fichier. Le caractère = sépare un nom de paramètre et sa
valeur transmise. Le caractère & séparer deux paramètres.
• Pour faire face au cas général d’un paramètre dont la valeur contient des
caractères interdits, on utilise les fonction de codage.
133
URL (III)
• Quelques fonctions de codage sur l’URL :
• Codage de base :
• urlencode : Encode une chaîne en URL.
• urldecode : Décode une chaîne encodée URL.
• Codage complet :
• rawurlencode : Encode une chaîne en URL, selon la RFC1738.
• rawurldecode : Décode une chaîne URL, selon la RFC1738.
134
URL (IV)
• urlencode($str) : code la chaîne $str. Les espaces sont remplacés par des signes
plus (+). Ce codage est celui qui est utilisé pour poster des informations dans les
formulaires HTML. Le type MIME utilisé est application/x-www-form-
urlencoded.
• Exemple 1 :
• echo <a href=\‘’$PHP_SELF?foo=‘’.urlencode($foo).’’\’’>Foo</a>’’;
• Pour être accessible, la valeur du paramètre devra par la suite être décodée
dans le script d’arrivé par la fonction réciproque adéquate.
135
URL (V)
• base64_encode($str) : code la chaîne $str en base 64. Cet encodage permet à
des informations binaires d'être manipulées par les systèmes qui ne gèrent pas
correctement les codes 8 bits (code ASCII 7 bit étendu aux accents européens),
comme par exemple, les corps de mail qui en général sont américains et ne
gère que les 7 bits. Une chaîne encodée en base 64 a une taille d’environ 33%
supérieure à celle des données initiales.
• Exemple 3 :
• echo <a href=\‘’$PHP_SELF?foo=‘’.base64_encode($foo).’’\’’>Foo</a>’’;
136
URL (VI)
• parse_url($str) : retourne un tableau associatif contenant les différents
éléments de l’URL passée en paramètre. Les champs sont les suivants :
‘’scheme’’ (protocol), ‘’host’’ (domaine), ‘’port’’ (n° de port), ‘’user’’
(nom d’utilisateur ftp), ‘’pass’’ (mot de passe ftp), ‘’path’’ (chemin de la
ressource), ‘’query’’ (paramètres et valeurs), et ‘’fragment’’.
• Exemple :
• $tab = parse_url(’’http://www.cia.gov:8080/form.php?var=val’’);
• Exemple :
• $str =
‘’nom=jean+pierre&email[]=moi@ici.fr&email[]=moi@labas.com’’;
• parse_str($str);
• echo $nom, $email[0], $email[1];
138
Cryptage et autres réjouissances
142
Fonctions de hachage (IV)
• Pour connaître les algorithmes disponibles sur votre système, vous
pouvez procéder ainsi :
• $nbr = mhash_count();
• echo ‘’<table>’’;
• for($i = 0; $i <= $nbr; $i++) {
• if(mhash_get_hash_name($i))
• echo
‘’<tr><td>$i</td><td>’’.mhash_get_hash_name($i).’’</td><td>’’.
• mhash_get_block_size($i).’’</td></tr>’’;
• }
• echo ‘’</table>’’;
143
Divers
• defined($str) : Vérifie qu'une constante existe. Renvoie VRAI si la
constante dont le nom est passé en paramètre existe ou FAUX sinon.
• sleep($nbr) : Retarde l'exécution du script durant $nbr secondes.
Attention, Apache peut être configurer pour limiter la durée d’exécution
des scripts.
• usleep($nbr) : Retarde l'exécution du script durant $nbr microsecondes.
144
Requêtes Apache (I)
• getallheaders() : renvoie un tableau associatif contant tous les entêtes de la
requête en cours.
• Exemple :
• $headers = getallheaders() ;
• foreach($headers as $key => $elem) // affichage des entêtes recueillies
• echo ‘’$key : $elem<br />\n’’ ;
• Les fonctions décrites ici de fonctionnent que si PHP est installé en tant que
module du serveur HTTP Apache.
145
Requêtes Apache (II)
• apache_lookup_uri($str) : effectue une requête partielle sur l'URI
spécifiée en paramètre et retourne un objet contenant toutes les
informations importantes la concernant.
• Les propriétés de l’objet retourné sont : status (n° erreur HTTP),
the_request (requête HTTP complète), status_line, method (méthode
HTTP utilisée), content_type (type MIME de la ressource), handler, uri,
filename (nom et chemin de la ressource en local sur le serveur),
path_info (chemin du répertoire distant), args, boundary, no_cache (vaut
‘1’ si mise en cache interdite), no_local_copy (vaut ‘1’ si copie locale
interdite), allowed, send_bodyct, bytes_sent, byterange, clength,
unparsed_uri, mtime, request_time (date de la requête au format
timestamp UNIX).
146
Requêtes Apache (III)
• Exemple :
• $obj = apache_lookup_uri('http://127.0.0.1/cyberzoide/essai.php') ;
• $tab = get_object_vars($obj) ;
• foreach($tab as $key => $elem)
• echo ‘’$key : $elem <br />\n’’ ;
149
Exercice 1 : conversion de date (II)
150
Exercice 1 : conversion de date (III)
Etape 3 : extraction des jour, mois, année
On procède selon le même schéma que précédemment sauf qu’ici c’est le
tiret qui est séparateur dans la date.
list($year, $day, $month) = explode(‘’-’’, $date);
151
Exercice 1 : conversion de date
(IV)
• Etape 6 : affichage en toutes lettres du mois
• On crée d’abord le tableau des mois de l’année.
• $months = array("janvier", "février", "mars", "avril", "mai", "juin",
"juillet", "août", "septembre", "octobre", "novembre", "décembre");
• Ensuite, on affiche l’élément du tableau des mois de l’année dont l’indice
est égale au numéro du mois. Comme l’indice du tableau commence à
zéro, il faut soustraire 1 à $month, cela aura aussi pour effet de caster
cette chaîne en entier (et de supprimer le zéro éventuel en première
position).
• echo $lastmodified = ‘’le $day ‘’.$months[$month-1].’’ $year à
${hour}h${min}m${sec}s’’;
• Affiche ‘’le 20 avril 2002 à 15h08m20s’’.
• Et voilà !
152
Exercice 2 : compteur de visites (I)
• On souhaite comptabilisé le nombre de chargement d’une page (la page
d’accueil par exemple). On va procéder de la façon suivante : le compteur
numérique sera stocké dans un fichier, à la première ligne. Ce fichier
contiendra seulement un nombre, celui des visites.
153
Exercice 2 : compteur de visites (II)
Algorithme :
$fichier = "compteur.cpt"; // affectation du nom de fichier
if( ! file_exists($fichier)) { // test d’existence
// initialisation du fichier si n’existe pas encore
$fp = fopen($fichier,"w"); // ouverture en écriture
fputs($fp,"0"); // écriture
fclose($fp); // fermeture
}
$fp = fopen($fichier,"r+"); // ouverture
$hits = fgets($fp,10); // lecture
$hits++; // incrémentation
fseek($fp,0); // positionnement
fputs($fp,$hits); // écriture
fclose($fp); // lecture
154
Exercice 2 : compteur de visites (III)
Phase 2 : généralisation aux autres <?
pages function Mon_Compteur($page) {
• Comme les internautes peuvent $fichier = $page.".cpt";
atterrir sur des pages internes à if(!file_exists($fichier)) {
votre site sans passer par l’accueil, $fp = fopen($fichier,"w");
il peut être intéressant de pouvoir
comptabilité des visites des autres fputs($fp,"0");
pages. Cela permettra aussi de fclose($fp);
comparer la popularité relative de }
vos différentes rubriques. $fp = fopen($fichier,"r+");
• Créons donc une fonction que l’on $hits = fgets($fp,10);
placera dans un fichier à part par
$hits++;
exemple compteur.php et que l’on
appellera par inclusion comme ceci fseek($fp,0);
: fputs($fp,$hits);
<?php include("compteur.php"); fclose($fp);
Mon_Compteur("ma_page") ?> }
• Remplacez "ma_page" par un ?>
identifiant unique pour chaque
page.
155
Exercice 2 : compteur de visites (IV)
• Phase 3 : protection contre la redondance
• Comme un visiteur peut charger plusieurs fois la même page au cours
d’une même visite, ce mode de décompte n’est pas assez précis et va
surestimé le nombre réel de visiteurs. Il faut donc garder en mémoire le
fait qu’un visiteur est déjà passé par la page et incrémenter le compteur
seulement si ce n’est pas le cas. On va donc créer une variable de session
: un tableau contenant la liste des pages visitées.
• Principe du nouvel algorithme : on teste l’existence de la variable de
session $PAGES_LIST, si elle n’existe pas on la crée, on y ajoute la page
en cours et on appelle la fonction Mon_Compteur. Si elle existe, on teste
la présence de la page en cours dans ce tableau, si elle n’y est pas alors
on l’y met et on appelle Mon_Compteur.
• L’appel est légèrement différent :
• <?php
• $page = "ma_page"; // définition du nom de la page
• include("compteur.php"); // chargement de l’algorithme
• ?>
156
Exercice 2 : compteur de visites
(V)
• Voici le code à rajouter dans le fichier
compteur.php :
• session_start(); // démarrage de
la session
• if( ! isset($PAGES_LIST)) { // test de
l’existence de la variable de session
• $PAGES_LIST = array($page); //
création de la variable
• session_register($PAGES_LIST); // 157
ajout de la page en cours
Le phénomène PHP
• Sa gratuité et le libre accès à ses sources en fait un langage très populaire
surtout auprès de la communauté GNU Linux.
• Sa syntaxe C universellement connue, et sa programmation intuitive en
font le langage qui a fait la plus grande percée auprès des webdesigners
en 2001.
• De nombreux sites lui sont consacrés, on y trouve des scripts, des astuces
et même des concours de logos…
158
PHP et les bases de données
159
Présentation
PHP offre un interfaçage très simple entre plusieurs base de données :
– Oracle, MySQL, SQLServer
– Sybase, Empress, FilePro
– Interbase, mSQL, PostgreSQL
– ODBC(Acess, MS-SQL, …)
160
MySQL
• MySQL est une base de données implémentant le langage de requête SQL un
langage relationnel très connu. Cette partie suppose connue les principes des
bases de données relationnelles.
• Avec MySQL vous pouvez créer plusieurs bases de données sur un serveur. Une
base est composée de tables contenant des enregistrements.
161
Gestion du BD avec MySQL
Pour traiter une base de données, MySQL offre trois manières :
Utilisation des lignes de commandes
Utilisation de l’interface phpMyAdmin
Utilisation du langage php
162
A l’aide des commandes en ligne
163
164
165
166
167
En utilisant des scripts PHP
<?
$c = mysql_connect("localhost", "root", "");
$db = mysql_select_db("stock", $c);
$req = "create table stock.Prod_Alimentaire(
id_PA int unsigned not null auto_increment primary key,
nom varchar(32) not null,
date_limite date,
commentaire text,
prix float not null)";
mysql_query($req, $c);
?>
168
169
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.
170
Connexion (II)
Exemple 1 :
<?
if( $id = mysql_connect("localhost", "root"," ") ) {
if( $id_db = mysql_select_db("gigabase") ) {
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.");
}
?>
171
Connexion (III)
Exemple 2 :
• @mysql_connect(‘’localhost’’,’’foobar’’,’’0478’’) or die(‘’Echec de connexion
au serveur.’’);
• @mysql_select_db(‘’gigabase’’) or die(‘’Echec de sélection de la base.’’);
• Cet exemple est équivalent au précédent mais plus court à écrire. Le symbole
@ (arobase) permet d’éviter le renvoie de valeur par la fonction qu’il précède.
• Une connexion persistante évite d’avoir à rouvrir une connexion dans chaque
script. Les connexions sont automatiquement fermées au bout d’un certain
temps en cas d’absence de toute activité…
172
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 :
$res = mysql_query("SELECT * FROM Table");
173
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.
Sous MySQL, l’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.
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.
174
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.
175
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($res = mysql_query($requet)) {
while($ligne = mysql_fetch_array($res)) {
$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.
176
Extraction des données (IV)
mysql_fetch_object($result) : retourne un objet. Les attributs de l’objet
correspondent à ceux de la ligne de résultat. Et les valeurs des attributs de
l’objet correspondent à ceux de la ligne de résultat. Retourne FALSE s’il n’y a
plus aucune ligne.
Exemple 3 :
$requet = "SELECT * FROM users";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_object($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 par leur attribut dans l’objet.
177
Application : Création de classe SGBD
178
Classe de base : SGBD
<?php
/* Fichier : SGBD.class.php */
class SGBD // Création de la classe mère
{
var $SGBD_login; // Attribut du login du SGBD
var $SGBD_password; // Attribut du password du SGBD
179
Classe de base : SGBD
// Définition du constructeur
function SGBD ($login, $password, $host, $base)
{
// Vérification des variables
if (empty ($login) || empty ($host) || empty ($base))
{
// Affichage du message d'erreur
echo"<b>Erreur :</b> Variable(s) non renseignées!!!";
exit;
}
else {
// Initialisation des attributs
$this->SGBD_login = $login;
$this->SGBD_password = $password;
$this->SGBD_host = $host;
$this->SGBD_base = $base;
}
}
}
?>
180
Classe MySQL expansion de la classe SGBD
<?php
/* Fichier : MySQL.SGBD.class.php */
class MySQL extends SGBD // Création de la classe fille
{
function connect (){
$connect = mysql_pconnect ($this->SGBD_host, $this->SGBD_login,
$this->SGBD_password);
if (!$connect)
{
echo "<b>Erreur :</b> Connection à MySQL impossible.";
exit;
}
if (!mysql_select_db ($this->SGBD_base, $connect))
{
echo "<b>Erreur :</b> Connection à la base de données impossible.";
exit;
}
$this->connect = $connect;
}
}//Fin de la fonction connect()
181
Classe MySQL expansion de la classe SGBD
function deconnect ()
{
mysql_close ($this->connect); // Déconnection de la base de données
183
Classe MySQL expansion de la classe SGBD
184