PHP - Index of

Transcription

PHP - Index of
SysCom
SysCom
CGI
PHP
PHP
Contenu
Miguel Tomasena
SysCom
Quelques références :
•http://fr.php.net/tut.php3
•http://php.developpez.com/sources/
•http://www.wampserver.com/
•http://www.toutestfacile.com
•http://www.w3schools.com/
1
Introduction PHP
CGI
Programme côté "serveur"
Insertion du code
Variables
Types
Tableaux
Chaînes
Portée des variables
Variables des formulaires
Exemple factoriel
Instructions
Quelques fonctions
Exemples :
compteur
liste nom-adresse
en-têtes et cookies
sessions
bases de données
2
SysCom
SysCom
Introduction à PHP - CGI
Programme côté "serveur"
•Dans le langage que vous souhaitez :
• CGI « Common Gateway Interface ».
Est une spécification qui permet au client d ’envoyer des donnés
et au serveur de retourner des données vers le client.
• Perl : adapté à la manipulation de chaînes de
caractères
• C, Pascal, Java
• PHP : adapté pour produire de pages HTML
• Le programme doit :
•obtenir les informations envoyés par la requête
name1=value1&name2=value2&name3=value3…
•faire un traitement et construire la page de réponse
3
4
SysCom
SysCom
Introduction PHP
Introduction PHP
Origines de PHP
• PHP est un langage fortement associé à HTML.
• 1995 Rasmus Lerdorf. Première version de Personal Home Page.
• Il s'exécute sur le serveur.
• Interprétation des formulaires (FI, Form Interpreter) : version 2
(1995). Nb sites : 15000 fin 1996, puis 50000 en milieu d'année
1997.
• Sa syntaxe est proche de celle de C, Java, JavaScript, ou Perl.
• Le but du langage est de faciliter la génération dynamique de
pages.
• 1998 : PHP 3.
• Une des applications courantes de PHP est l ’interface vers de
Bases de Données.
• 1999 : PHP 4.
• 2009 : PHP 5.3
5
6
SysCom
SysCom
Introduction PHP
Introduction PHP
L'interprétation du code par le serveur
•
•
L'interprétation du code par le serveur
Un script ou programme PHP est un fichier texte contenant des
instructions incluses dans un code HTML.
Extension ".php" permet d'identifier le type au serveur.
mon_fichier.php
......
7
Code html tel quel
......
Lorsqu'un navigateur (le client) désire accéder à une page dynamique
réalisé en php :
1. le serveur reconnaît qu'il s'agit d'un fichier php
2. l'interpréteur php analyse les lignes du fichier :
• le code html est envoyé au serveur inchangé
• code php est exécuté, les sorties éventuelles sont envoyés au
serveur
3. à la fin du script, le serveur transmet le résultat au client.
PHP est interprété par le serveur, les utilisateurs ne peuvent pas voir le
source!
vers le client
document produit
......
......
.CODE
. . . . . PHP
......
exécution
de php
.. .. .. .. .. ..
.. .. .. .. .. ..
......
print
ou
echo
.. .. .. .. .. ..
......
......
......
......
......
......
......
......
......
......
8
SysCom
SysCom
Introduction PHP
Introduction PHP
Remarques sur Wamp
• Première page PHP. Insertion du PHP (fichier .php) :
Environnement de travail PHP et bases de données.
Serveur local Apache et base de données MySQL.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Premier exemple PHP</title>
<body>
<h1>
<?php
print("Salut <em>tous</em>");
?>
</h1>
</body>
</html>
Utile pour la mise au point de vos pages.
Exécution d'un programme à travers Wamp :
1. Lancer Wamp . Une icone se place dans la barre des tâches à coté
de l'horloge. Vérifier que le serveur Wamp est démarré.
2. Pour que vos pages PHP soient interprétées, il est impératif de
placer vos fichiers dans le répertoire www ou bien dans un dossier
pointé par un alias.
9
interpréteur php
3. L'URL du WebLocal est : "http://127.0.0.1/" ou "http://localhost/"
Exemple 1 Hello
10
SysCom
SysCom
Variables
•Variables :
<body>
<p>
Ecriture d ’une variable :
<?php
$nom
$ma_variable = "Salut tous";
print ($ma_variable);
Attention : majuscules
?>
et minuscules
</p>
</body>
• Si on affiche la source chargée par notre navigateur on obtient :
...
<body>
Exemple 2 Salut
<p>
Salut tous
</p>
11
</body>
Types
• Quatre types scalaires :
integer double string bool
Deux types structurés :
array object
Le type est déterminé lors de l'exécution (pas besoin de déclaration).
Constantes :
Exemple 3 Source ppt
Exemple 3 types
define("Nom_de_la_constante", Valeur);
Le nom d'une constante ne
doit pas commencer par $
Exemple :
<?php
define("CONSTANTE", "Salut tous");
print (CONSTANTE); // produit "Salut tous"
?>
12
SysCom
SysCom
Tableaux
Tableaux
• Différents types dans un même tableau :
$tab[] = 12;
// Les indices de tableau commencent à zéro
$tab[] = "hello"; // tous les types peuvent être contenus
•Remarques :
•Les indices de tableau commencent à zéro
•Tous les types de variables peuvent être contenus dans un tableau
• Deux dimensions :
$tab[0][0] = 12;
$tab[0][1] = "hello";
$tab[1][0] = 1245.652;
$tab[1][1] = "Au revoir";
• Initialisation
• par simple affectation
• en tenant compte de la séquence pour les tableaux.
Exemple
Très utilisés !!
• Tableaux associatifs :
$Toto["Age"] = 12;
$Toto["Adresse"] = "22 rue des bois fleuris";
$noms[ ] = "Jacques"; // $noms[0] = "Jacques"
$noms[ ] = "Pascal"; // $noms[1] = "Pascal"
Exemple tableaux Associatif
13
14
SysCom
SysCom
Tableaux
Tableaux
• Remplir un tableau
<?php
$a1 = array("un","deux","trois","nous irons au bois");
$a2 = array(1 => "un","deux","trois","nous irons au bois");
// pour commencer à 1
?>
Fonctions pour trier le contenu d ’un tableau :
• arsort -- Sort an array in reverse order and maintain index
association
• asort -- Sort an array and maintain index association
• krsort -- Sort an array by key in reverse order
• ksort -- Sort an array by key
• rsort -- Sort an array in reverse order
• sort -- Sort an array
• uasort -- Sort an array with a user-defined comparison
function and maintain index association
• uksort -- Sort an array by keys using a user-defined
comparison function
• usort -- Sort an array by values using a user-defined
comparison function
Exemple ppt
• Quelques fonctions pour gérer des tableaux :
• count($tab) ou sizeof($tab) retourne le nombre d ’éléments.
• next($tab), prev($tab) avance ou recule le pointeur interne et
retourne l'élément. Chaque variable tableau possède un pointeur
interne repérant l'élément courant.
• each($tab) pour « parcourir » un tableau
• reset($tab) place le pointeur interne sur le premier élément.
• end($tab) place le pointeur interne sur le dernier élément.
15
Exemple 4 tableaux
16
SysCom
SysCom
Chaînes
Chaînes
• suite exemples avec des chaînes
• Exemples des chaînes
/* avec apostrophe : '<p>Numero : $num</p>' */
$str = '<p>Salut tous</p>';
<?php
/* Affectation avec guillemets */
$str = "Voici une chaîne";
$s = "Voici un apostrophe ' à l'intérieur de double guillemets";
$s = 'Et voici guillemets " à l\'intérieur ';
/* Concatenation */
$str = $str . " avec qq chose";
print ("c:\windows\system.ini"); // produit c:windowssystem.ini
print ("c:\\windows\\system.ini"); // produit c:\windows\system.ini
/* escaped newline. */
$str = $str . " et une nouvelle ligne\n";
$str = 'Test.';
// premier caractère de la chaîne
$first = $str[0];
/* "<p>Numero : 9</p>" */
$num = 9;
$str = "<p>Numero : $num</p>";
17
Exemple 5 tri
18
// dernier
$last = $str[strlen($str)-1];
?>
SysCom
SysCom
Chaînes
Portée des variables
• Portée des Variables : déterminée par le contexte. Exemple :
$a = 1;
/* globale */
function test () {
print ($a); /* référence à une variable locale */
}
Les variables globales
test ();
ne sont pas accessibles
• Le traitement des guillemets doubles est différent de celui des
apostrophes (guillemets simples) : Les doubles guillemets sont
interprétés.
!!!
Exemples :
$foo = 2;
print ("foo est $foo");
print ('foo est $foo');
print ("foo est $foo\n");
print ('foo est $foo\n');
// écrits : foo est 2
// écrits : foo est $foo
// écrits : foo est 2 (avec retour à la ligne)
// écrits : foo est $foo\n
print ("value = $a[$i][$j]");
print ('value = ' . $a[$i][$j]);
// attention ca ne fonctionne pas !!
// il faut utiliser la concaténation
19
20
SysCom
• Avec la déclaration global :
$a = 1;
$b = 2;
function sum () {
global $a, $b;
$b = $a + $b;
}
sum ();
print ($b);
La sortie produit : 3
SysCom
Portée des variables
• Variables « statiques »
function test () {
static $a = 0; /* lors du premier appel $a prend 0 */
print ($a);
Chaque fois que test() est
$a++;
appelée on écrit la valeur
}
de $a et on l’incrément.
test(); // écrits 0
test(); // écrits 1
Variables des formulaires
Exemple
• Variable dont sa valeur est le nom d ’une variable
$a = "hello";
/* hello peut être utilisé comme variable */
$$a = "world";
print ("$a $hello"); /* équivalent à : print("$a ${$a}"); */
La sortie produit :
hello world
21
SysCom
• Source HTML
22
<form action="exemple_6formulaire.php" method="post">
<p>Exemple : Que pensez vous de ce site ? <br />
Votre nom : <br />
<input type="text" name="nom" size="40" /> <br />
Commentaire : <br />
<textarea name="texte" cols="40" rows="3"> </textarea> <br />
<input type="submit" value="Envoyer" />
</p> </form>
SysCom
Variables des formulaires
Récupérer les variables transmises
Deux tableaux sont utilisés pour récupérer les données d'un
formulaire :
$_POST['donnée']
donnée
:- Nomdans
du champ
Nom
du champ
dans
le formulaire
le formulaire
S'utilise lorsque l'attribut
$_GET['donnée']
23
par défaut dans les fonctions.
La sortie ne produit aucun
résultat dans l’exemple
method du formulaire est
post.
S'emploie lorsque l'attribut method du
formulaire est get ou bien lorsque celui-ci n'est
pas spécifié.
Variables des formulaires
Suite de l'exemple
Le code du fichier "exemple_6formulaire.php" est :
<body>
method="post"
name="nom"
<h1> Réponse formulaire</h1>
<p>
<?php
$nom = $_POST['nom'];
$texte = $_POST['texte'];
print ("Merci $nom <br /><br />");
print ("Votre commentaire : <em>$texte</em>");
?>
</p>
</body>
Exemple 6 formulaire
24</html>
SysCom
SysCom
Variables des formulaires
Variables des formulaires
Les boutons radio. Code de "exemple_7formulaire.php" :
Les cases à cocher. Code de "exemple_8formulaire.php" :
<form action="exemple_7formulaire.php" method="post">
<p> Quel est votre niveau en programmation ?
<input type="radio" name="niveau" value="débutant" />
débutant <br />
<input type="radio" name="niveau" value="moyen"
checked="checked" /> moyen <br />
<input type="radio" name="niveau" value="expert" />expert
<br /> <input type="submit" value="Valider" /></p>
</form>
tester l'existence
<?php if (isset($_POST['niveau'])) {
d'un élément
$niveau = $_POST['niveau'];
print ("Etes vous sûr(e) d'avoir le niveau $niveau ?");
}
Exemple 7 formulaire
25
?>
<form action="exemple_8formulaire.php" method="post">
Indiquez toutes vos couleurs préférées<br />
<table><tr> <td bgcolor="red" width="50"> </td>
<td> <input type="checkbox" name="choix[]" value="rouge" />
Rouge </td> </tr>
<tr> <td bgcolor="blue" width="50"> </td>
<td><input type="checkbox" name="choix[]" value="bleu" />
Bleu</td></tr>
<tr> <td bgcolor="green" width="50"> </td>
<td> <input type="checkbox" name="choix[]" value="vert" />
Vert </td></tr>
</table>
<input type="submit" value="Valider" />
</form>
26
SysCom
SysCom
Variables des formulaires
(Suite) Les cases à cocher.
Exemple factoriel
L'exemple a seulement un intérêt pédagogique
<?php
if (isset($_POST["choix"])) {
$choix=$_POST["choix"];
echo "<h1>Vos couleurs préférées sont </h1>";
for ($i=0 ; $i< count($choix) ; $i++)
if (isset($choix[$i]) )
print("$choix[$i] - ");
}
else {
print ("<h1>vous n'avez pas de préférence</h1>");
}
?>
Exemple
fact
Exemple 8 formulaire
27
28
SysCom
SysCom
Exemple factoriel
fact.html :
Exemple factoriel
fact.php :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>factoriel</title>
</head>
<body >
<h1>Calcul du factoriel d'un nombre</h1>
<form action="fact.php" method="post"> <p>
Valeur de n : <br />
<input type="text" name="n" size="4" /> <br />
<input type="submit" value="Envoyer" /> </p>
</form>
</body>
</html>
29
30
Définition d'une fonction
<!DOCTYPE html>
<html><head><meta charset="utf-8" /> <title> Calcul du factoriel </title>
<?php function fact($n) {
$f = 1;
for ($i=1; $i<=$n; $i++) {
$f = $f * $i;
}
return $f;
}
?>
</head>
<body>
<h4> Voici le résultat </h4> <p>
<?php $n = $_POST['n'];
print("Le factoriel de $n est : " . fact($n) );
?>
</p> </body> </html>
SysCom
SysCom
Instructions
Instructions
• Expressions et affectation :
• Expressions de comparaison :
> , >= , ==, != , <, <=
• Opérateurs logiques : &&, ||, !
function double($i) { // definition d'une fonction
return $i*2;
}
$b = $a = 5;
$c = $a++;
/* post-increment */
$e = $d = ++$b; /* pre-increment */
trace
trace de
de ces
ces affectation
affectation ::
=5
$a
$a =6
=6
$b =
= 6565
$b
$c =
= 55
$c
$d
$d =
= 76
$e
$e =
= 76
$f = 12
$g = 24
14
$h = 24
$f = double($d++);
$g = double(++$e);
$h = $g += 10;
31
32
SysCom
• Conditionnel
if ($a > $b) { /* instruction composée */
print ("a est plus grand que b");
$b = $a;
}
/* autre exemple avec else */
if ($a > $b) {
print ("a est plus grand que b");
} else {
print ("b est plus grand que a");
}
SysCom
Instructions
Instructions
• Syntaxe alternative pour le conditionnel: if(): . . .
Exemple:
endif;
• Exemples de while :
/* exemple 1 */
$i = 1;
while ($i <= 10) {
print ($i++);
}
HTML ou PHP
<?php if ($a==5): ?>
A=5
<?php endif; ?>
Le texte "A = 5"
sera inséré dans le
document HTML (si la
condition est satisfaite)
PHP
/* exemple 2 (identique) */
• while
Syntaxes :
• while(expr) {instructions ..}
• while(expr): instructions ... endwhile;
33
$i = 1;
while ($i <= 10):
print ($i++);
endwhile;
34
SysCom
SysCom
Instructions
Instructions
• do .. while :
/* On exécute la boucle au moins une seule fois */
$i = 0;
do {
print ($i);
} while ($i>0);
35
/* utilisation de break
do {
if ($i < 5) {
print "i trop petit";
break;
}
print ("i est ok");
…traitement i...
} while(true);
• for :
for ($i = 1; $i <= 10; $i++) {
print ($i);
}
• continue
permet de revenir à la boucle. Exemple
On quitte la boucle
quand $i < 5
36
while ($i !=0) {
if (($i % 2) != 0) { // ignorer les impairs
continue;
}
traitement_pair ($i);
$i = suivant($i);
}
SysCom
SysCom
Instructions
Gestion des fichiers
• Déclaration d'une fonction
function fun ($arg_1, $arg_2, ..., $arg_n) {
print ("Exemple de fonction.\n");
return $retval;
}
• Remarques :
• Une fonction peut contenir d ’autres fonctions.
• Une fonction peut être récursive
• Return
function factoriel($n) { // fonction récursive
if ($n == 0) { return 1; }
else { return $n * factoriel($n-1); }
}
37
Fonctions spécialisées dans la création et l'accès aux fichiers
de données :
• Ouverture
$f=fopen($nomFichier, $mode)
$mode est une chaîne qui fixe la façon d'utiliser le fichier.
La fonction renvoie un identificateur $f de type entier qui vaut 0 (ie
FALSE) en cas d'échec de l'accès.
Valeurs de $mode :
•"r" Ouverture en lecture seule, accès au début du fichier
•"w" Ouverture en écriture seule; son contenu est perdu.
•"a" Ouverture en ajout; si le fichier existe, le contenu est conservé.
•"w+", "r+", "a+" possibilité de lecture et écriture.
38
SysCom
SysCom
Gestion des fichiers
Remarque : il est possible d'ouvrir un fichier WEB
($nomFichier="http://www.univ-savoie.fr"), en lecture seule.
Gestion des fichiers
• Lecture
Voici quelques fonctions de lecture :
Exemples :
if (! $f = fopen("essai.txt", "r") )
echo ("ouverture du fichier impossible");
$f = fopen("/home/jean/essai.txt", "a");
$f = fopen("http://www.php.net/", "r");
•fread($f, $lon) : lit une chaîne de caractère de longueur $lon.
•fgets($f, $lon) : lit une chaîne de caractère de longueur $lon, mais
s'arrête à la lecture d'un caractère de fin de ligne.
•file($nom) : retourne le fichier dans un tableau.
• Fermeture
fclose($f)
$f étant l'identifiant du fichier. Exemple :
$f = fopen("/home/jean/essai.txt", "r");
$texte = fread($f,40);
fclose($f);
•fpassthru($f) : pour une lecture complète du fichier
•fgetss($f, $lon) : fonctionnement identique, mais les balises
HTML et PHP sont filtrées.
Exemple 9 fichier
39
40
SysCom
SysCom
Gestion des fichiers
• Exemple de lecture ligne par ligne :
Gestion des fichiers
• Résultat :
<h2> Voici le contenu de 'http://localhost/ppt/fact.html' </h2>
<p>
<?php
// Lire une page web dans un tableau, et l'afficher
$t = file( 'http://localhost/ppt/fact.html' );
while ( list( $num_ligne, $ligne ) = each( $t ) ) {
print("Ligne $num_ligne: ".htmlspecialchars($ligne) . "<br />\n");
}
?>
</p>
41
Les Balises HTML
ne sont pas
interprétés
Exemple 10 lecture
42
SysCom
SysCom
Gestion des fichiers
• Ecriture
On peut utiliser 2 syntaxes identiques fwrite ou fputs
fwrite($f, $chaine [, $lon] ); écrit la chaîne dans le fichier identifié par
$f sur une longueur $lon caractères.
<?php /* exemple : ajouter une chaine */
$msg = "hello tous";
if ( $f = fopen("exemple10.txt", "a") ) {
fputs( $f, "$msg\n");
}
fclose($f); // il faut penser à fermer le fichier
?>
Quelques fonctions
• Système de fichiers
chgrp
chmod
chown
delete
fclose
feof
fgetc
fgets
file
file_exists
fopen
change le groupe propriétaire du fichier
change le mode du fichier
change le possesseur du fichier
efface un fichier
ferme un fichier
test pour savoir si le pointeur est à la fin du fichier
renvoie le carac sur lequel se trouve le pointeur du fichier
renvoie la ligne sur laquelle se trouve le pointeur
lit le fichier et renvoie le résultat dans un tableau
vérifie si un fichier existe
ouverture d'un fichier ou d'une URL
Exemple 11 Ecriture
43
44
SysCom
SysCom
Quelques fonctions
Quelques fonctions
• Système de fichiers
• Fonctions de dates et heures
fputs
fread
fseek
fwrite
is_file
rmdir
stat
checkdate
date
getdate
gettimeofday
time
écrit dans le fichier vers lequel le pointeur est dirigé
lecture du fichier en mode binaire.
modifie le pointeur de fichier
écriture du fichier, identique à fputs
vérifie si un fichier existe
efface un dossier
renvoie les informations à propos d'un fichier
• Mathématiques
abs
asin
ceil
cos
exp
floor
46
45
SysCom
valeur absolue
arc sinus
arrondi à l'entier supérieur
cosinus
e à la puissance de (exponentielle de)
arrondi à l'entier inférieur
SysCom
Quelques fonctions
• Mathématiques
log
pi
pow
rand
round
sqrt
logarithme naturel
retourne la valeur de pi
calcul de puissance
génère une valeur aléatoire
arrondi
racine carrée
• Chaînes de caractères.
chr
echo
explode
flush
47
Valide une date/heure
Formate une date/heure locale
Retourne la date/heure
Retourne l'heure actuelle
Retourne le timestamp UNIX actuel
Retourne un caractère
Affiche une ou plusieurs chaînes
Scinde une chaîne en morceau, grâce à un délimiteur
Vide les buffers de sorties
Quelques fonctions
implode
Regroupe tous les éléments d’un tableau dans une chaîne,
avec une chaîne de jointure .
ord
Retourne la valeur ASCII du caractère
print
Affiche une chaîne
printf
Affiche une chaîne formatée
similar_text Calcule la similarité de deux chaînes
strchr
Recherche la première occurrence d’un caractère
strip_tags Enlève les balises HTML et PHP
strlen
Retourne la longueur de la chaîne
strpos
Recherche la première occurrence d’une chaîne dans une
chaîne
strrev
Inverse une chaîne
strstr
Recherche la première occurrence d’une chaîne dans une
chaîne.
48
SysCom
SysCom
Exemple compteur
Exemple compteur
49
50
SysCom
Fichier :
<!DOCTYPE html>
<html>
exemple_12compteur.php
<head> <meta charset="utf-8" /><title> php</title></head>
<body >
<h1> Bienvenue à la page personnelle de Tintin </h1>
Vérification de
<hr width="95%" align="center" />
<?php
l’existence d ’un
$fichier = "no_visites.txt" ;
fichier
if (is_file($fichier)) // existe ?
{
On ouvre en
$fp = fopen("$fichier", "r");
$numero = (int) fgets($fp,20);
lecture
$numero++;
fclose($fp);
}
else
$numero = 1;
echo("<br /> <h2>vous êtes le visiteur No $numero </h2>");
$fp = fopen("$fichier", "w");
On ouvre en
fwrite($fp,$numero);
écriture
fclose($fp);
Exemple 12 compteur
?> </body> </html>
SysCom
Exemple liste nom-adresse
•Formulaire de saisie :
Exemple liste nom-adresse
• Fichier HTML du formulaire :
...
Exemple 13 CarnetAdresses
51
52
SysCom
SysCom
Exemple liste nom-adresse
• Fichier php rajout_liste.php :
Exemple liste nom-adresse
• Formulaire consultation :
<!DOCTYPE html>
Nom du fichier
<html>
<head>
<meta charset="utf-8" /><title> rajout php </title>
ouverture d'un fichier ou d'une URL.
</head>
int fopen(string filename, string mode);
<body>
Bienvenue à la construction <br />
<?php
Concaténation de chaînes
$fichier = "liste_couples.txt" ;
$fp = fopen("$fichier", "a");
$item = $_POST['nom'] . " " . $_POST['adresse'] . "\n";
fwrite($fp,$item);
print("<br /> c'est fait pour : $item");
fclose($fp);
?>
int fwrite(int fp, string string);
</body>
fwrite() écrit le contenu de la chaîne
</html>
string dans le fichier pointé par fp.
53
<h1>Manipulation d'une liste de couples <br />Nom - Adresse mail</h1>
<h2>Choisisez le formulaire de l'action à réaliser :<br />
Nom du
rajout / suppression / consultation <br /> </h2>
fichier php
<hr />
<h1> Rajout </h1> <br />
<form method="POST" action="rajout_liste.php" >
<p>
Nom de la personne :
<input type="text" name="nom" size="40" maxlength="80" />
<br />
Les noms des champs
Adresse mail :
sont: nom et adresse
<input type="text" name="adresse" size="40"
maxlength="80" />
<input type="submit" value="oui" />
<input type="reset" value="annuler" />
</p>
</form>
<hr />
...
Ferme le fichier fp
Exemple 13 CarnetAdresses
54
SysCom
SysCom
Exemple liste nom-adresse
Exemple liste nom-adresse
• Fichier de consultation « lecture_liste.php » :
• Formulaire de la consultation :
...
<html>
<head><title>php</title>
</head>
lit le fichier et renvoie
<body>
le résultat dans un tableau
Bienvenue à la consultation <br />
<?php
$fichier = "liste_couples.txt" ;
Nb d ’éléments
$tab = file($fichier);
d ’un tableau
$nom = $_POST['nom'];
$i = 0;
$trouve = FALSE;
while ($i < count($tab) && !$trouve) // on cherche l'element $nom
if (strstr($tab[$i], $nom)) $trouve=TRUE;
Vérifie si le
else $i++;
nom se trouve
if ($trouve) print ("<br /> voici : $tab[$i] ");
dans $tab[$i]
else print ("<br /> $nom n'est pas dans la liste");
?>
</body>
</html>
Nom du
<h1>
fichier php
Consultation
</h1> <br />
<form method="POST" action="lecture_liste.php" >
<p> Nom de la personne :
<input type="text" name="nom" size="40"
maxlength="80" />
Le nom du
<br />
<input type="submit" value="oui" />
champs : nom
<input type="Reset" value="annuler" />
</p>
</form>
...
55
56
SysCom
SysCom
Exemple liste nom-adresse
Exemple liste nom-adresse
• Suppression d ’un nom de la liste :
• Formulaire HTLM de suppression :
...
<h1>
Suppression
</h1>
<form method="POST" action="suppression_liste.php" >
<p>
Nom de la personne :
<input type="text" name="nom" size="40"
maxlength="80" value="Tintin" />
<br />
<input type="submit" value="oui" />
<input type="Reset" value="annuler" />
</p>
</form>
Exemple 13 CarnetAdresses
57
58
SysCom
SysCom
Exemple liste nom-adresse
• Fichier « suppression_liste.php » :
...
Exemple liste nom-adresse
...
if ($trouve)
{
/* 'w' Ouvre en écriture seule; place le pointeur de fichier au
début du fichier et réduit la taille du fichier à 0.
Si le fichier n'existe pas, on tente de le créer.*/
$fp = fopen($fichier, "w");
for ($j=0; $j<$i; $j++) {
fwrite($fp,$tab[$j] );
}
for ($j=$i+1; $j < count($tab); $j++) {
fwrite($fp,$tab[$j] );
}
fclose($fp);
print ("<br /> <h1>$nom est supprimé</h1>");
}
else
print ("<br /> <h1>$nom n'est pas dans la liste</h1>");
}
Retourne true si
filename existe et
est un fichier
Bienvenue à la suppression <br />
<?php
$nom = $_POST['nom'];
$fichier = "liste_couples.txt" ;
if (is_file($fichier)) // liste_couples existe ?
{
$tab = file($fichier);
$i = 0;
$trouve = FALSE;
while ($i < count($tab) && !$trouve) // on cherche l'element $nom
if (strstr($tab[$i], $nom))
$trouve=TRUE;
else
$i++;
if ($trouve)
{
....
59
else
60
print ("<br /> <h1>fichier noms-adresses inexistant</h1>");
?> </body>
SysCom
SysCom
Exemple "demande inscription"
Variables d'environnement
• Exercice manipulation de fichier
• Informations sur son environnement :
•Le serveur
« demande de dossiers d’inscriptions »
•Le client
Exemple 14 Inscription
• Accessible depuis le tableau $_SERVER[]
Exemple 14 Consultation et
Suppression Inscription
•Elles permettent notamment d'avoir des informations
sur le type de serveur, son administrateur, la date à
laquelle le script a été appelé, l'adresse IP et le type de
navigateur du client,...
61
62
SysCom
SysCom
Variable d'environnement
Variable d'environnement
• Elles sont pour la plupart accessible depuis le tableau
$_SERVER[] (depuis PHP 4.1).
• Affichage des variables d'environnement : phpinfo() affiche
un tableau récapitulatif de l'environnement.
Exemple 15 Environnement
Proposées par Apache (serveur)
$_SERVER["DOCUMENT_ROOT"]
L'espace où sont stockées les pages webs
$_SERVER["PHP_SELF"]
Le chemin du script par rapport à DOCUMENT_ROOT
<?
echo "Votre adresse IP est : ";
echo $_SERVER["REMOTE_ADDR"];
echo "<br />Votre navigateur est : ";
echo $_SERVER["HTTP_USER_AGENT"];
?>
Déterminées par le navigateur (client)
$_SERVER["REMOTE_ADDR"]
L'IP du visiteur
$_SERVER["HTTP_USER_AGENT"]
L'identifiant du navigateur
$_SERVER["HTTP_REFERER"]
L'url du site d'où vient le visiteur de la page (pas toujours
renseigné ou exact)
Les langues préférées du visiteur
$_SERVER["HTTP_ACCEPT_LANGUAGE"]
63
Résultat
64
SysCom
SysCom
Classes
Php intègre un soupçon de caractéristiques des Langages
Orientés Objet
Classes
Instanciation de la classe :
$Nom_de_l_objet = new Nom_de_la_classe;
•Une classe est composée de deux parties:
•Les attributs
•Les méthodes
Accéder aux propriétés d'un objet :
$objet -> propriete = Valeur;
•Déclaration d'une classe :
65
class Nom_de_la_classe {
// Déclarations des données membres
var $Donnee_Membre_1;
var $Donnee_Membre_2;
var $...
// Déclarations des méthodes
function Nom_de_la_fonction(parametres) {
instructions;
}
}
Accéder aux méthodes d'un objet :
$objet -> methode(parametre1,parametre2,...);
66
SysCom
SysCom
Classes
Dates
"$this" fait référence à l'objet courant. Exemple :
La fonction time() retourne le nombre de secondes écoulées
depuis le 1er Janvier 1970.
class Personne{
var $age;
var $sexe;
var $adresse;
<?php
echo "Il s'est écoulé ". time() . " secondes depuis le 1er Janvier 1970";
?>
function definePersonneAge($age){
$this->age = $age;
}
La fonction mktime() converti une date quelconque en
nombre de secondes depuis le 1er Janvier 1970.
Ordre des paramètres : heure, minute, seconde, mois, jour et
année.
}
$toto = new Personne;
$toto -> definePersonneAge(10);
echo "L'age de TOTO : " . $toto -> age;
67
68
SysCom
<?php
echo "Noël 2000 c'était il y a ".
(time()-mktime(0,0,0,12,25,2000)) . " secondes "; ?>
SysCom
Dates
Dates
Pour contrôler la validité d'une date vous pouvez avoir
recours à la fonction checkdate().
<?php
$mois = 12;
$jour = 35;
$annee = 2001;
if (checkdate($mois, $jour, $annee)) {
echo "La date $jour/$mois/$annee existe bien";
}
else { echo "La date $jour/$mois/$annee n'est pas valide"; }
?>
strftime() converti une date en chaîne.
<?php
echo "Affichage au format jour/mois/annee heure:minute:seconde " .
strftime("%d / %m / %y %H : %M : %S") . "<br />" ;
?>
Par défaut la fonction strftime() formate la date et heure
courante mais on peut spécifier un second paramètre pour
afficher une autre date.
<?php
echo "Dans 15 jours nous serons le " .
strftime("%d/%m/%y",time()+15*24*3600) . "<br />";
?>
69
70
SysCom
SysCom
A condition que la bibliothèque
appelée GD soit installée
Images
Il est possible de créer des images dynamiquement.
Exemple fichier exemple_17image.php :
Images
Le fichier exemple_17image.html :
Hello, voici un carré rouge : <br /> <br />
<img src="exemple_17image.php" />
Content-type: indique au navigateur que
ce qui suit est une image au format PNG
(Portable Network Graphic)
<?php
header("Content-type: image/png"); // Ce qui suit est le code d'une image PNG
$largeur = 200; // L'image fait 200x100
$hauteur = 100;
$img = imageCreate($largeur, $hauteur);
Exemple 16Date
produit :
création du "contexte"
// couleur de fond : rouge
$rouge = imageColorAllocate($img, 255, 0, 0);
imagePNG($img);
71
// Envoie l'image
imageDestroy($img); // Libere les ressources
?>
Exemple 17Image
72
SysCom
SysCom
Images : Exemple Histogramme
Texte dans l'image (fichier exemple_17image.php) :
<?php
header("Content-type: image/png");
$largeur = 250; $hauteur = 200;
$img = imageCreate($largeur, $hauteur);
$rouge = imageColorAllocate($img, 200, 0, 0);
$noir = imageColorAllocate($img, 0, 0, 0);
Par défaut, la
première couleur est
la couleur de fond
$titre
= "Histogramme";
$titre_police = 5; // type police par défaut
Images : Exemple "histogramme"
Pour dessiner des rectangles (pleins), il suffit de faire appel à
la fonction imageFilledRectangle :
<?php
// On pourra supposer que les données sont lues
// dans une base de données mais dans l'immédiat
// a titre d'exemple elles sont simplement codées "en dur"
$valeurs = array(12,23,9,58,23,26,57,48,12);
header("Content-type: image/png");
Produit
imageString($img, $titre_police,
($largeur-imageFontWidth($titre_police)*strlen("$titre"))/2,
0, $titre, $noir);
$largeur = 250;
$hauteur = 200;
$img = imageCreate($largeur, $hauteur);
$rouge
= imageColorAllocate($img, 200, 100, 100); //c. de fond
$noir
= imageColorAllocate($img, 0, 0, 0);
$fond
= imageColorAllocate($img, 240, 240, 240);
$barreCouleur
= imageColorAllocate($img, 0, 255, 0);
imagePNG($img);
imageDestroy($img);
?>
73
74
SysCom
SysCom
Images : Exemple "histogramme"
abscisse et ordonnée du
coté gauche supérieur
Suite :
Images : Exemple "histogramme"
Suite :
$titre
= "Histogramme";
abscisse et ordonnée du
$titrePolice = 5;
coté droit inférieur
imageString($img, $titrePolice,
($largeur-ImageFontWidth($titrePolice)*strlen($titre))/2,
0, $titre, $noir);
// Tracé du fond de l'histogramme
imageFilledRectangle($img, 10, 20, $largeur-25, $hauteur-10, $fond);
75
produit
imageFilledRectangle($img, $x,
$hauteur-15-$barreHauteur,
$x+$barreLargeur,
$hauteur-15,
$barreCouleur);
// Connaissant le nombre de barres = sizeOf($valeurs)
// et la largeur de l'image (en tenant compte des bords)
// il est possible de déterminer la largeur d'une barre
$barreLargeur = (int)(($largeur-35)/(1.5*sizeOf($valeurs)+0.5));
// Pour ajuster l'échelle (en hauteur) il faut déterminer la plus grande valeur
$max = 0;
for ($i=0; $i<sizeOf($valeurs); $i++) {
if ($valeurs[$i]>$max) $max = $valeurs[$i];
}
Exemple 18 histogramme
// Nous avons toutes les informations nécessaire
// il est alors possible de tracer toutes les barres
for ($i=0; $i<sizeOf($valeurs); $i++) {
$x = 10+(int)($barreLargeur*(0.5+$i*1.5));
$barreHauteur = (int)(($valeurs[$i]*($hauteur-40))/$max);
}
imagePNG($img);
imageDestroy($img);
?>
76
SysCom
SysCom
Les en-têtes et cookies
Les en-têtes et cookies
Fonction PHP permettant d'envoyer des en-têtes :
• En-têtes. Echanges entre :
navigateur
header(chaîne en-tête HTTP)
serveur
Remarque : la fonction header() doit être utilisée avant tout envoi de
données HTML au navigateur.
•Les en-têtes HTTP permettent d'effectuer des actions sur le
navigateur comme le transfert de cookies ou bien une
redirection vers une autre page.
Exemple : rediriger le navigateur
• Forme (http) :
en-tête: valeur
Exemple : envoyer une image créé à la volée
<?php
header("location: http://www.commentcamarche.net/");
<?php
header("Content-Type: image/gif");
// code générant l'image
imagegif($image); ?> // envoi de l'image au navigateur
Remarque : La syntaxe doit être rigoureusement respectée!
77
78
?>
SysCom
SysCom
Les en-têtes et cookies
• Récupérer les en-têtes de la requête :
getallheaders();
Les en-têtes et cookies
• Résultat :
permets de récupérer dans un tableau l'ensemble des en-têtes HTTP
envoyées par le navigateur.
Exemple : récupération de tous les en-têtes
$headers = getallheaders();
while (list ($header, $value) = each ($headers)) {
echo "$header: $value <br />\n";
}
Remarque : On se déplace dans le tableau ligne par ligne. Pour chaque ligne,
l'indice est affectée à la variable $header, et la valeur à la variable $value.
79
80
SysCom
SysCom
Les en-têtes et cookies
• Cookies : petits fichiers texte chez le client permettant de mémoriser
des données individuelles.
Les en-têtes et cookies
• Envoi des cookies au serveur. L'en-tête se présente alors sous la forme :
Cookie : NOM1=VALEUR1; NOM2=VALEUR2; ...
•Les requêtes et réponses HTTP contiennent des en-têtes permettant
d'envoyer des informations particulières de façon bilatérale. Un de ces
en-têtes est réservé à l'écriture de fichiers : les cookies.
En PHP, la fonction SetCookie() permet d'envoyer les informations
relatives aux cookies dans les en-têtes HTTP. Voici la syntaxe :
boolean setCookie(chaîne NomDuCookie,
chaîne Valeur,
• Envoi des cookies au client.
L'en-tête HTTP réservé à l'utilisation des cookies s'appelle Set-Cookie, il
s'agit d'une simple ligne de texte de la forme :
entier expiration,
chaîne chemin,
chaîne domaine,
Set-Cookie : NOM=VALEUR; domain=NOM_DE_DOMAINE; ...
entier securisé);
81
domaine du serveur, celui-ci
doit obligatoirement contenir 2
points (par exemple
www.commentcamarche.net).
82
SysCom
SysCom
Les en-têtes et cookies
• Exemple. Combien de fois un visiteur est venu sur le site pendant le
mois. Envoi du cookie :
<?php
setCookie("Visites",
"1",
time()+15*24*60*60
);
?>
// nom du cookie
// valeur
// date d'expiration en seg
Attention : le « setCookie » doit apparaître avant
tout autre ligne ou caractère à destination du client !!
83
chemin désigne le répertoire
pour lequel votre cookie est
valide
Les en-têtes et cookies
• Récupération du cookie en PHP. La valeur est accessible à travers le
tableau associatif : $_COOKIE['Nom_du cookie']
• Dans l'exemple :
<?php
if (isset($_COOKIE['Visi']))
$Visi = $_COOKIE['Visi'] +1; // on recupere le cookie.
else $Visi = 0;
// zéro s'il n'existe pas
SetCookie(
// on place un cookie
"Visi",
$Visi,
time()+ 15 * 24 * 60 * 60);
?>
84
Exemple 19 cookieVisites
SysCom
SysCom
Les en-têtes et cookies
Exemples
Gestionnaire de cookies Firefox :
Exemple 20 cookiePannier
• Cookies. Exemple le « Caddie ».
Le premier fichier que l'on appelera marche0.php servira à
mettre à 0 les cookies.
<?php
SetCookie("panier[pomme]",0);
SetCookie("panier[poire]",0);
SetCookie("panier[peche]",0);
SetCookie("panier[banane]",0);
Header("location: marche1.php");
?>
Exemple
Cookie
85
Remarques:
On met à 0 tous les éléments du panier.
On fait ensuite une redirection vers marche1.php.
SetCookie et Header requièrent qu'il n'y ait pas de données émises
avant dans le script.
86
SysCom
SysCom
Exemples
Exemples
marche1.php
Résultat de la redirection vers marche1.php.
<?php
if (isset($_COOKIE['panier']))
$panier = $_COOKIE["panier"]; // on recupere le cookie.
else { // panier vide, première visite
$panier["pomme"]=0;SetCookie("panier[pomme]",$panier["pomme"]);
$panier["poire"]=0;SetCookie("panier[poire]",$panier["poire"]);
$panier["peche"]=0;SetCookie("panier[peche]",$panier["peche"]);
$panier["banane"]=0;SetCookie("panier[banane]",$panier["banane"]);
}
if (isset($_GET["ajout"]))
$ajout = $_GET["ajout"];
else
$ajout = null; // attention a l'initialisation
87
88
SysCom
SysCom
Exemples
Exemples
marche1.php
switch ($ajout) {
case "pomme":
$panier["pomme"]++;
SetCookie("panier[pomme]",$panier["pomme"]);
break;
case "poire"
...
...
}
?>
<html>
<head>
<title>Le marché</title>
</head>
<body>
<center>
89
marche1.php
<table border="1" style="text-align:center; font-size:120%">
<tr><td>Ajouter</td><td>Votre commande</td></tr>
<tr align="center">
<td><a href="marche1.php?ajout=pomme">Une pomme</a> (0.50 euros)</td>
<td><?php echo $panier["pomme"]?> pomme(s)</td>
</tr>
<tr align="center">
<td><a href="marche1.php?ajout=poire">Une poire</a> (0.80 euros)</td>
<td><?php echo $panier["poire"]?> poire(s)</td>
</tr>
...
</table>
<a href="marche0.php">vider mon panier</a><br />
<a href="marche2.php">calculer le total</a>
</center>
</body>
</html>
90
SysCom
SysCom
Exemples
• marche2.php calcule et affiche le prix total du panier.
91
<?php
$panier = $_COOKIE["panier"];
$total=0;
$total+=$panier[pomme]*1;
$total+=$panier[poire]*1.5;
$total+=$panier[peche]*2;
$total+=$panier[banane]*1;
?>
<html>
<head> <title>Le total du panier</title>
</head>
<body>
<p align="center">Le total de votre panier: <?php echo $total?> F.</p>
<p align="center"><a href="marche1.php">Modifier mon panier</a></p>
<p align="center"><a href="marche0.php">Vider mon panier</a></p>
</body>
</html>
Chaînes de caractères
Quelques fonctions :
$chaine = "bonjour, ceci est un test de recherche";
echo strpos($chaine, "t"); // affiche 16
echo strrpos($chaine, "t"); // affiche 24
echo strstr($chaine, "t"); // affiche "t un test de recherche"
echo strrchr($chaine, "t"); // affiche "test de recherche"
echo substr($chaine, 14, 3); // affiche "est"
str_replace remplace toutes les occurrences d'une chaîne par
une autre :
$chaine = "Le mot remplacé est : le_mot";
$modif = str_replace("le_mot", "test", $chaine);
echo $modif; // affiche "Le mot remplacé est : test"
Exemple compteur d'un caractère
92
SysCom
SysCom
Expressions régulières
Introduction aux expressions régulières
Expressions régulières
Expression régulière :
"Modèles" permettant de définir de sous chaînes de caractères.
Ce sont des modèles ou motifs (patterns) dont on recherche la
présence dans les chaînes de caractères.
Cette recherche s'effectue pour tester et filtrer des données, et aussi
effectuer des remplacements.
L'expression régulière en elle-même est une chaîne contenant des
caractères spéciaux et des caractères standards
Les symboles ^ et $ indiquent le début ou la fin d'une chaîne
Les modèles les plus simples à rechercher sont les suites de
caractères usuels, jouant leur propre rôle. Il s'agit alors du cas
trivial de la recherche de sous-chaînes dans une chaîne.
Exemples :
"^debut"
"fin$"
"^chaine$"
"abc"
L'intérêt des expression régulières réside dans la généralisation de
cette recherche. La description du modèle nécessite alors
l'apprentissage d'un mini-langage utilisant des méta-caractères.
93
94
SysCom
"abc+"
"abc*"
"abc?"
"^abc+"
SysCom
Expressions régulières
Les symboles *, + et ? indiquent, respectivement, "zéro ou
plusieurs", "un ou plusieurs", "un ou aucun". Exemples :
95
: chaine qui commence par "debut"
: chaine qui se termine par "fin"
: chaine qui commence et se termine par "chaine"
: chaine contenant la chaine "abc"
: "ab" suivie de un ou plusieurs "c"
("abc", "abcc" etc..)
: "ab" suivie de zero ou plusieurs "c"
("ab", "abc" etc..)
: "ab" suivie de zero ou un "c"
("ab" ou "abc")
: "ab" suivie de un ou plusieurs "c"
("abc", "abcc" etc..)
Expressions régulières
Tableau des caractères des expressions régulières
Car Utilité
[]
liste de caractères autorisés
()
élément composé de l'expression régulière
{}
exemple p{2,5} correspond à ppp, pppp ou ppppp
-
entre deux caractères dans une liste représente un intervalle (par
exemple [a-d] représente [abcd])
.
un caractère unique quelconque
*
répétition indéterminée de l'élément la précédant
96
SysCom
SysCom
Expressions régulières
Tableau des caractères des expressions régulières
Expressions régulières
Fonctions de manipulation d'expressions régulières : ereg() et
eregi()
Car Utilité
Booleen ereg(chaine modele,chaine texte[,tableau occurrences])
?
indique la présence éventuelle de l'élément la précédant
|
^
$
Renvoie true lorsque la fonction trouve des occurrences du modèle
dans le texte. La fonction stocke éventuellement toutes les
occurrences dans un tableau passé optionnellement en paramètre.
Occurrence de l'élément situé à gauche de cet opérateur ou de
celui situé à droite (a|e)
•Placé en début d'expression il signifie "chaîne commençant
par .. "
•Utilisé à l'intérieur d'une liste il signifie "ne contenant pas les
caractères suivants...
Placé en fin d'expression il signifie "chaîne finissant par .. "
97
Booleen eregi(chaine modele,chaine texte[,tableau occurrences])
Effectue le même travail que ereg(), à la différence près qu'elle
n'est pas sensible à la casse (pas de différenciation
minuscules/majuscules)
98
SysCom
SysCom
Expressions régulières
Exemple :
Expressions régulières
Fonctions de manipulation d'expressions régulières :
ereg_replace() et eregi_replace()
<?
$fp = fopen("http://www.liberation.fr/","r"); //lecture du fichier
while (!feof($fp)) { //on parcoure toutes les lignes
$page .= fgets($fp, 4096); // lecture du contenu de la ligne
}
$titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre
/* Le titre commence par <title>, puis contient n'importe quelle chaine,
et se termine par </title> */
echo $regs[1]; // retourne la premiere parenthèse capturante
// Les occurrences se trouvent entre parenthèses
// $regs[0] renvoie toute la chaine, par exemple : "<title>Libération.fr</title>"
fclose($fp);
?>
chaine ereg_replace(chaine modele,chaine remplacement,chaine
texte)
Exemple :
<?php
$chaine="J'ai mangé trois pommes.";
$chaine=ereg_replace("trois","3",$chaine);
echo $chaine;
// affichera : J'ai mangé 3 pommes.
?>
produit
Exemple 23 Exp Regulière
99
Exemple 24 Exp Regulière
100
SysCom
SysCom
Exemples
•
Exemples
Exemple « Parsing à distance »
• Source html
<html> <head> <title>Résultats du Loto</title>
<meta http-equiv="Pragma" content="no-cache">
<!-- FICHIER DE RESULTATS DU LOTO POUR LES UTILISATEURS -->
</head>
<body bgcolor="#FFFFFF" text="#000000">
<a name="#SOMMAIRE"></a>
<br />
<center>
<img src="../../img/general/logo_loto_p.gif" border=0 alt=loto>
<br><br><b>Intro FR</b> :
<br>
Pour jouer au jeu téléphonique du Loto, inscrivez-vous au n° <b>0892 704
105</b> (0,34 €/mn)<br>
<br><br> <P>
<font face="arial" size=4 color="#003D65">
<b>Tirages N°24<br> du <br>Samedi 23 Mars 2002</b>
</font>
</center>
<br>
101
102
SysCom
SysCom
Exemples
Exemples
• Résultat du parsing
• Source html
<center><a href="#joker"><img src="../../img/general/joker.gif" width=80
border=0></a></center><br>
<p>&nbsp;
<p>&nbsp;
<center>
<font face="arial" size=3 color="#003D65">
<b>COMBINAISON GAGNANTE DU
PREMIER TIRAGE :</b></font>
<p>
<TABLE border=0>
<th colspan=8 ><br><font face="arial" size=2 color="#003D65">Boules
dans l'ordre du tirage</font><br></th>
<TR>
<td align=left>
<img src="../../img/boules/2.gif" border=0 alt=2>
</td>
<td align=left>
<img src="../../img/boules/47.gif" border=0 alt=47>
</td>
103 . . . .
104
SysCom
SysCom
Exemples
105
Exemples
• fichier parser.php
• fichier parser.php (suite)
<?php
class parser {
var $filename;
function parser($filename) { // constructeur
$this->filename=$filename;
}
function get_1er_tirage() {
$file=fopen($this->filename,"r");
if (!$file) { echo "<p>Impossible d'ouvrir le fichier</p>.\n"; exit; }
while(!strstr($line,"PREMIER")) {
$line=fgets($file,1024);
}
while (count($result)!=7) {
if (ereg("/([0-9]*).gif",$line,$no))
$result[ ]=$no[1];
$line=fgets($file,1024);
}
fclose($file);
return $result;
}
function get_date() {
$file=fopen($this->filename,"r");
if (!$file) { echo "<p>Impossible d'ouvrir le fichier</p>.\n"; exit; }
$line=fgets($file,1024);
Remarque : Une fois obtenue la ligne avec le mot
while(!strstr($line,"Tirages")) {
« tirage », il faut utiliser une expression régulière
$line=fgets($file,1024);
pour trouver la date.
La date était juste entre <br> et </b>. On utilise
}
l'expression régulière suivante:<br>([^<]*)</b>
fclose($file);
ereg("<br>([^<]*)</b>",$line,$no); entre parenthèse, on met le "motif" que l'on veut
récupérer. Ici n'importe quels caractères sauf <.
return $no[1];
Le résultat est stocké dans $no[1]
}
function get_2eme_tirage() {….. }
}
106 ?>
SysCom
SysCom
Exemples
Exemples
• fichier loto.php
<?php
require "parser.php"; // similaire à "#include" de C
$parser= new
// instantiation de l'objet $parser
parser("http://resultats2.francaise-des-jeux.fr/validee/loto/resultat.html");
?>
<html>
<head>
<title>Mes résultats du Loto</title>
</head>
<body>
<center>
<h1>Mes résultats du Loto</h1>
<h2><font color="blue">
<?php
echo $parser->get_date(); // appel de la methode "get_date()
?>
</font>
107 </h2>
• fichier loto.php (suite)
<h2>1er tirage</h2>
<?php
$nums=$parser->get_1er_tirage(); // appel de la methode
?>
<h2>
<font color="red">
<?php
for ($i=0; $i<count($nums)-1; $i++)
echo $nums[$i] . "-";
echo $nums[count($nums)] . $nums[$i] . "-";
?>
</font>
</h2>
<h2>2ème tirage</h2>
…. <!------- suite similaire -----</body>
</html>
108
SysCom
SysCom
Exemple include
Exemple include
• Lorsqu'un script inclus par include() ou include_once() lève une
erreur, le script principal poursuit son exécution comme si de rien
n'était. Aussi, si vous préférez que le script principal s'arrête en cas
d'échec utilisez require() ou require_once().
• include() suivi d'un nom de fichier a pour effet
d'inclure son contenu à l'endroit de l'appel.
<?php
// Exemple de fichier faisant appel à include
include("include_inc.php");
?>
Remarque :
include_once() est identique si ce n'est qu'un script déjà inclus ne sera pas
inclus une seconde fois
109
include() diffère aussi de require() car le fichier inclus est réévaluée à chaque fois que la commande est exécutée, tandis que
require() est remplacée par le fichier cible lors de la première
exécution. De plus, cela se fait même s'il est placé dans une
structure conditionnelle, comme dans un if.
110
SysCom
SysCom
Exemple include
Exemple include
• Exemple "mise en page"
• Pseudo-frames avec include :
Une page d'un site classique ressemble fortement à un tableau dont
le code HTML serait
Résultat de l'appel à index.php après avoir cliqué sur
"Page 1" :
Exemple 25 include
<html> <body>
<table width="100%">
<tr bgcolor="lightblue">
<td colspan="2" align="center"> Placez ici, l'entête de votre site </td>
</tr>
<tr> <td bgcolor="yellow"> Placez ici, votre menu gauche <br /> </td>
<td width="100%" align="center"> Placez ici votre page principale </td>
</tr>
</table>
</body> </html>
111
112
SysCom
SysCom
Exemple include
• index.php :
113
Exemple include
• suite
Include(fichier en-tête)
<html> <body>
<table width="100%">
<tr bgcolor="lightblue">
<td colspan="2" align="center">
<? include("en_tete.html"); ?> </td> </tr>
<tr> <td bgcolor="yellow">Menu<br>
<a href="?page=0">Accueil</a><br>
<a href="?page=1">Page 1</a><br>
<a href="?page=2">Page 2</a><br> </td>
<td width="100%" align="center">
<?php
// Ici, c'est la zone centrale
// Contenu dépendant de la valeur du paramètre
if (isset($_GET["page"]))
$page = $_GET["page"];
else $page = null;
switch ($page) {
case 1 : include("page1.html"); break;
case 2 : include("page2.html"); break;
default : include("accueil.html"); break;
}
?>
</td>
</tr>
</table>
</body>
</html>
114
SysCom
SysCom
Sessions
Sessions
• Notion introduite dans la version 4 de PHP. Elles
permettent un suivi fiable du visiteur dans un site.
• Exemple
Exemple sessions
• Les sessions permettent d'enregistrer des variables
propres à un utilisateur. Par exemple dans le cas d'un
caddie virtuel, on souhaite garder en mémoire ce que le
client a mis dans son caddie.
• Fonctions :
•session_start() permet de spécifier que la page fait
appel aux sessions.
•session_destroy() permet de supprimer la session
(nettoyage des fichiers sur le serveur).
•Pour utiliser une variable de session, il suffit d'accéder
au tableau $_SESSION[] ayant pour clé, le nom de la
115
variable.
SysCom
SysCom
créer ou reprendre une
session
Sessions
• Exemple
116
Exemple sessions
Sessions
• Exemple (suite)
if (isset($_GET["raz"])) {
// On a demandé à reinitialiser une valeur
switch ($_GET["raz"]) {
case "pomme":
$_SESSION["pommes"]=0;
break;
case "poire":
$_SESSION["poires"] =0;
break;
case "banane":
$_SESSION["bananes"] =0;
break;
}
header("Location: $url");
die();
}
<?php
// Dans ce script nous utilisons les sessions
session_start();
$url = $_SERVER["PHP_SELF"];
// lui même
if (!isset($_SESSION["pommes"])) $_SESSION["pommes"]=0;
if (!isset($_SESSION["poires"])) $_SESSION["poires"]=0;
if (!isset($_SESSION["bananes"])) $_SESSION["bananes"]=0;
if (isset($_GET["action"]) && $_GET["action"]=="destroy") {
// on a demander à tout supprimer
session_destroy();
header("Location: $url");
die();
}
117
118
SysCom
SysCom
Sessions
Sessions
• Exemple (suite)
if (isset($_GET["achat"])) {
// On a demandé à incrémenter une valeur
switch ($_GET["achat"]) {
case "pomme":
$_SESSION["pommes"]++;
break;
case "poire":
$_SESSION["poires"]++;
break;
case "banane":
$_SESSION["bananes"]++;
break;
}
header("Location: $url");
die();
}
?>
119
Exemple sessions
• Exemple (suite)
Exemple sessions
<table border="1">
<tr><td>
Nb Pommes : <?php echo $_SESSION["pommes"];?> </td><td>
<a href="<?php echo $url;?>?achat=pomme">Acheter une pomme</a></td><td>
<a href="<?php echo $url;?>?raz=pomme">vider</a></td>
</tr><tr><td>
Nb Poires : <?php echo $_SESSION["poires"];?></td><td>
<a href="<?php echo $url;?>?achat=poire">Acheter une poire</a></td><td>
<a href="<?php echo $url;?>?raz=poire">vider</a></td>
</tr><tr><td>
Nb Bananes : <?php echo $_SESSION["bananes"];?></td><td>
<a href="<?php echo $url;?>?achat=banane">Acheter une banane</a></td><td>
<a href="<?php echo $url;?>?raz=banane">vider</a></td>
</tr>
</table>
Exemple sessions
120
SysCom
SysCom
Sessions
• Exemple (suite)
Exemple Téléchargement
Exemple sessions
<a href="<?php echo $url?>?action=destroy">Détruire la session</a>
<?
$total = $_SESSION["bananes"] + $_SESSION["poires"] +
$_SESSION["pommes"];
echo "<h3> Nombre d'articles : $total</h3>";
?>
121
Voir EXEMPLE
122
SysCom
SysCom
Identification en PHP
Vérification d'une identité :
header("WWW-Authenticate: Basic realm='private'");
Identification en PHP
Exemple 27 identification
Exemple :
<?php
if (!isset($_SERVER['PHP_AUTH_USER']) ||
!isset($_SERVER['PHP_AUTH_PW'])) {
header("WWW-Authenticate: Basic realm='private'");
a pour effet de faire demander (et retenir) un nom et
un mot de passe par le navigateur.
else
}
{
$user = $_SERVER['PHP_AUTH_USER'];
$pw = $_SERVER['PHP_AUTH_PW'];
Le nom et le mot de passe retenus peut être obtenus
avec :
echo "<html><body> <h1>";
$_SERVER['PHP_AUTH_USER']
echo "les données connues sont : <br />".
"<i>$user</i> et <i>$pw</i>\n";
$_SERVER['PHP_AUTH_PW']
echo "</h1></body></html>";
}
123
124
SysCom
SysCom
Identification en PHP
Exemple naïf de contrôle des mots de passe :
<?php
$user = $_SERVER['PHP_AUTH_USER'];
$pw = $_SERVER['PHP_AUTH_PW'];
if (($user=="tintin") &&
($pw=="bidule")) {
echo "<html><body><h1>";
echo "Bravo, identification réussie.<br />\n";
echo "Vous êtes $user<br />\n";
echo "</h1></body></html>";
} else {
header("WWW-Authenticate: Basic realm='private'");
}
?>
Exemple 27 identification2
125
?>
Identification en PHP
Exemple 27 identification3
Plusieurs mots de passe :
<?php
//la liste des informations
$liste=file("mots.txt");
//création des tableaux
for ($i=0;$i<count($liste);$i++) {
$l=explode("/", trim($liste[$i]));
$nom[$i]=$l[0]; //identité réelle de l'utilisateur n°i
$login[$i]=$l[1]; //identifiant de l'utilisateur n°i
$pass[$i]=$l[2]; //mot de passe de l'utilisateur n°i
} //contrôle de l'identité
$nbusers=count($liste);
$user = $_SERVER['PHP_AUTH_USER'];
$pw = $_SERVER['PHP_AUTH_PW'];
$ok=-1; //on démarre sans connaître l'utilisateur
126
SysCom
SysCom
Identification en PHP
Plusieurs mots de passe (suite):
$ok=-1; //on démarre sans connaître l'utilisateur
for ($i=0;$i<$nbusers;$i++) {
if (($user==$login[$i]) && ($pw==$pass[$i])) {
//reconnu l'utilisateur -> on garde son numéro
$ok=$i;
}
}
//si l'identification a raté, $ok contient toujours -1
//on demande le nom et le mot de passe
if ($ok==-1) {
header("WWW-Authenticate: Basic realm='private'");
return; //rmq l'utilisation de return
//pour sortir du programme.
}
Identification en PHP
Plusieurs mots de passe (suite):
//si on arrive ici, c'est que l'identification a réussi
//et que $ok contient le numéro de l'utilisateur
echo "<html><body><h2>";
echo "Bravo, identification réussie.<br />\n";
echo "Vous êtes <em>$nom[$ok]</em>,\n";
echo "votre identifiant est <em>$login[$ok]</em>,\n";
echo "votre mot de passe est" .
"<em>$pass[$ok]</em>.<br />\n";
//À vous d'ajouter ici tout ce qui concerne l'utilisateur
//...
//...
echo "</h2></body></html>";
?>
Exemple 27 identification3
127
128
SysCom
SysCom
Bases de données
Bases de données
• Un très grand avantage de PHP, c'est l'accès facile
à différentes bases de données.
•Les fonctions de base:
•La fonction de connexion au serveur
•La fonction de choix de la base de données
•connexion à la base de données
<?php
$idConnexion = mysql_connect("Nom_Hote", "Nom_Utilisateur", "Password");
// retourne un identifiant de connexion ou FALSE en cas d'échec.
$connexionReussie = mysql_select_db("Ma_bd"); //nom de la BD
// Et pour mettre fin à la connexion
mysql_close();
?>
•La fonction de requête
•La fonction de déconnexion
mysql_connect
mysql_select_db
mysql_query
mysql_close
129
Remarques :
•Nom_Hote est le nom de l'hôte où se trouve MySQL ("sql", localhost")
•Nom_Utilisateur est le login de celui qui peut se connecter à la BD
130
SysCom
SysCom
Bases de données
Bases de données
• exemple concret en local
•Exemple : "sondage"
sondage.html affiche la page suivante
<?php
$idConnexion = mysql_connect("localhost", "root", "");
if ($idConnexion) echo "Connexion au serveur réussie";
else echo "Connexion au serveur ratée";
$connexionReussie = mysql_select_db("mabase");
if ($connexionReussie) echo "Connexion à la base réussie";
else echo "Connexion à la base ratée";
// Et pour mettre fin à la connexion
mysql_close(); ?>
Autre manière :
131
<?php
mysql_connect("localhost", "root", "")
or die("Impossible de se connecter au serveur de bases de données.");
mysql_select_db("mabase")
or die("Cette base de données n'existe pas");
// Et pour mettre fin à la connexion
mysql_close(); ?>
132
SysCom
SysCom
Bases de données
Bases de données
sondage.html
Avant d'utiliser le fichier sondage.php on doit créer la
base de données avec MyAdmin:
<html>
<body> <h2>Comment avez-vous découvert PHP Facile ?</h2>
<form method="post" action="sondage.php">
<input type="radio" name="choix" value="presse" />Par la presse spécialisée<br />
<input type="radio" name="choix" value="annuaire" />Par un annuaire<br />
<input type="radio" name="choix" value="moteur" />Par un moteur de recherche<br/>
<input type="radio" name="choix" value="forum" />Par un forum<br />
<input type="radio" name="choix" value="news" />Par les news<br />
<input type="radio" name="choix" value="ami" />Par un ami<br />
<input type="radio" name="choix" value="autre" />Autre<br />
Merci de laisser votre pseudo:
<input type="text" name="pseudo" /><br />
<input type="submit" />
</form>
</body>
</html>
133
134
SysCom
SysCom
Bases de données
Bases de données
Puis on doit créer la table qui va accueillir les
résultats. La requête SQL est la suivante:
Exécution de la requête SQL :
CREATE TABLE sondage (nom varchar(20), resultat varchar(20), date timestamp(14))
Remarques :
•sondage sera le nom de la table, nom, resultat et date ses champs. Le type
de nom et de resultat est une chaîne de caractères de taille variable mais de
maximum 20. Le type de date est un timestamp sur 14 caractères les 4
premiers correspondront à l'année puis 2 pour le mois 2 pour le jour et 6
pour les heures, minutes et secondes.
135
136
SysCom
SysCom
Bases de données
Bases de données
sondage.php
Visualiser les résultats du sondage avec
sondage_reponses.php:
<?php
$serveur
= "localhost";
$utilisateur
= "root";
$motDePasse = "";
$base
= "mabase";
$pseudo = $_POST["pseudo"]; $choix = $_POST["choix"];
mysql_pconnect($serveur, $utilisateur , $motDePasse)
or die("Impossible de se connecter au serveur de basesinsert
de données.");
dans sondage, $pseudo et
$choix aux champs respectifs nom et
resultat. date prend automatiquement
mysql_select_db($base)
la valeur de la date courante.
or die("Base de données non trouvée.");
mysql_query("INSERT INTO sondage (nom, resultat)".
" VALUES ('$pseudo', '$choix') ")
or die("Impossible d'insérer le résultat du sondage");
mysql_close();
echo "Merci"; ?>
137
138
SysCom
SysCom
Bases de données
Bases de données
Fichier sondage_reponses.php:
139
<html> <head> <title>Résultat du sondage PHP Facile !</title> </head>
<body>
<center>A la question:<h2>Comment avez vous découvert PHP Facile!</h2>
il a été repondu:<br><br>
<table border="1">
<tr> <td><b>Pseudo</b></td>
<td><b>Réponse</b></td>
</tr>
<?php
function reponse($texte) {
switch ($texte) {
case "presse" : return "Par la presse spécialisée"; break;
case "annuaire": return "Par un annuaire"; break;
case "moteur" : return "Par un moteur de recherche"; break;
case "forum" : return "Par un forum"; break;
case "news" : return "Par les news"; break;
case "ami" : return "Par un ami"; break;
case "autre" : return "Par un autre moyen"; break;
} } // fin reponse
suite:
$serveur
= "localhost";
$utilisateur
= "root";
$motDePasse = "";
$base
= "mabase";
La requête sélectionne tous
les éléments de la table.
mysql_pconnect($serveur, $utilisateur, $motDePasse);
mysql_select_db($base) or die("Connexion ratée");
140
$requete = mysql_query("SELECT * FROM sondage");
while ($ligne = mysql_fetch_array($requete)) {
print "<tr>
<td>".$ligne["nom"]."</td>
<td>".reponse($ligne["resultat"])."</td>
</tr>";
}
mysql_close();
?>
</table>
</body>
</html>
$ligne, correspond à une
ligne de la table
on récupère le champ nom
puis le champ resultat

Documents pareils