Vous êtes sur la page 1sur 24

Cration et gestion de site dynamique (PHP / MySQL)

Partie 1 : PHP (Suite)


Dernire mise jours par M. FAGROUD : Dccembre 2007

Le contenu de ce document est soumis la Licence de Documentation Libre GNU Free Documentation License

Inclusions
Il arrive souvent quun ensemble de pages web en PHP, que nous appellerons une application, fasse souvent appel au mme code. Au lieu de copier ce code et de le coller sur toutes les pages, on peut inclure "virtuellement" ce code dans une page avec la commande include : include value et insert chaque appel (mme dans une boucle) le contenu du fichier pass en argument. Exemple :
include("fichier.php);

De cette faon on peut crer de petites pages en php, qui ne contiendront peut-tre aucun code html, avec les fonctions les plus utilises : gestion des erreurs, contrle des sessions utilisateurs, initialisation dune connexion une base de donne
Une utilisation trs courante de cette commande est galement de crer un fichier pour le dbut de la page web et un autre pour la fin. En faisant appel ces deux fichiers sur chaque page de lapplication, on garde une parfaite unit graphique sans avoir besoin de redfinir la forme de la page
2/38

Variables denvironnement
Le langage php est dot dune multitude de variables denvironnement que la fonction phpinfo() permet dafficher (ainsi que bien dautres informations sur la configuration du serveur Apache). Ces variables permettent au script daccder des informations trs utiles voire quelques fois indispensables.

Quelques variables : $PHP_SELF : nom du script en cours $HTTP_USER_AGENT : signature du navigateur du client $DOCUMENT_ROOT : localiser le fichier actuellement consult. $REMOTE_ADDR : adresse IP du client $QUERY_STRING : chane au format URL contenant les paramtres passs la page en cours $HTTP_REFERER : URL de la source ayant renvoye le client sur la page en cours (en lanalysant, on peut connatre le moteur de recherche utilis ainsi que les mots cls entrs par linternaute, sil vient effectivement dun moteur de recherche; permet dvaluer la qualit du rfrencement dun site web)

3/38

Constantes du PHP (I)


Le langage php met disposition du programmeur des constantes propres au script qui ne peuvent pas tre redfinies et qui sont bien utiles pour la gestion des erreurs internes au script. Les constantes prdfinies du PHP : __FILE__ : nom du fichier en cours __LINE__ : numro de ligne en cours PHP_VERSION : version de PHP PHP_OS : nom du systme d'exploitation qui est utilis par la machine qui fait tourner le PHP TRUE : la valeur vraie boolenne FALSE : la valeur faux boolenne Exemples : $test = true; echo __file__, __line__;

4/38

Constantes du PHP (II)


Les constantes suivantes, lorsquelles sont dclares par le programmeur (en gnral avant toute les autres instructions du script), permettent de spcifier linterprteur php du serveur quel niveau de rigueur appliquer face aux erreurs lors du droulement du script.

E_ERROR : dnote une erreur autre qu'une erreur d'analyse (''parse error'') qu'il n'est pas possible de corriger. E_WARNING : dnote un contexte dans lequel le PHP trouve que quelque chose ne va pas. Mais l'excution se poursuit tout de mme. Ces alertes-l peuvent tre rcupres par le script lui-mme. E_PARSE : l'analyseur a rencontr une forme syntaxique invalide dans le script, correction de l'erreur impossible. E_NOTICE : quelque chose s'est produit, qui peut tre ou non une erreur. L'excution continue. Par exemple, la tentative d'accder une variable qui n'est pas encore affecte. E_ALL : toutes les constantes E_* rassembles en une seule. Si vous l'utilisez avec error_reporting(), toutes les erreurs et les problmes que PHP rencontrera seront notifis.
5/38

Passage de paramtres un script (I)


Mthode des formulaires. La mthode POST permet de passer des variables saisies par lutilisateur dun script php lautre. Exemple :
echo <form method=\post\ action=\check.php\> Login : <input type=\text\ name =\login\ value=\$login\ /><br /> Password : <input type=\password\ name =\pass\ value=\$pass\ /><br /> <input type=\submit\ value=\Identifier\ /> </form>;

Cet exemple affiche un formulaire simple dans le navigateur : un champs de saisie de texte et un champ de saisie de mot de passe. Lorsque lutilisateur valide et envoie les donnes au serveur, les variables du formulaire seront connues comme variables globales du script php destination (dsign par la valeur de lattribut action de la balise FORM). Les variables porteront le nom des balises (dsign par lattribut name ou id des balises de saisie).
6/38

Passage de paramtres un script (II)


Toutes les variables passes en paramtres par cette mthode seront considres comme des chanes des caractres. Mais les casts implicites permettront de les rcuprer directement dans des variables dautre type (entier, rel). Exemple :
if($pass==etude2005) echo Ok, valid user.; /* + donnes importantes */ else echo Acces Interdit.;

Dans cet exemple, on contrle la validit du mot de passe du formulaire prcdent qui a t pass en paramtre au script check.php par la mthode POST. Par exemple, on affiche des donnes confidentielles seulement si le mot de passe est le bon. Les donnes saisies napparatront pas dans lURL et ne seront donc pas stockes dans les fichiers de log du serveur, contrairement la mthode GET (attention, HTTP1.1 implique que les appels de GET doivent tre idempotents cest--dire doivent toujours retourner la mme valeur).
7/38

Passage de paramtres un script (III)


Mthode des ancres. Les variables peuvent directement tre passes par lintermdiaire des URL. Exemple : $id = 20; echo <a href=\fichier.php?action=buy&id=$id\>Acheter</a>; Cet exemple va crer dans le script destination les variables globales $action et $id avec les valeurs respectives buy et 20. La barre dadresse affichera lURL suivante :

Ainsi une application web crite en php peut interagir avec lutilisateur de faon dynamique.

8/38

Sessions (I)
Les sessions sont un moyen de sauvegarder et de modifier des variables tout au cours de la visite dun internaute sans quelles ne soient visibles dans lURL et quelque soient leurs types (tableau, objet). Un visiteur se connecte. On demande crer une session pour lui : PHP gnre un numro. Pour cela, on utilise la fonction session_start(). Ce numro sert d'identifiant et est appel "ID de session" (ou PHPSESSID). PHP transmet automatiquement cet ID de page en page en utilisant un cookie ou via l'url
(ex : mapage.php?PHPSESSID=a02bbffc6198e6e0cc2715047bc3766f).

A partir de l, on peut crer une infinit de variables de session. Par exemple : $_SESSION['login'] contient le login du visiteur, $_SESSION['password'] contient le mot de passe etc... L'avantage, c'est que vous pourrez rcuprer par exemple le login et le mot de passe du visiteur, quelle que soit la page de votre site.

9/38

Sessions (II)
La seule chose qu'il ne faut pas oublier de faire, c'est d'appeler session_start() sur chacune de vos pages AVANT d'crire le moindre code HTML. Les variables sessions peuvent tre dclares n'importe o dans le code.
Quelques fonctions :

session_start() : dmarre une session


session_destroy() : met fin la session et efface les donnes session_name() : retourne le nom de la session en cours session_is_registred("var") : vrifie si une variable est enregistre dans la session session_register("var") : enregistre la variable $var dans la session courante. Ne pas mettre le signe $ (dollars) devant le nom de variable. session_unregister("var") : supprime la variable $var de la session courante

10/38

Sessions (III)
<? session_start(); // On dmarre la session AVANT toute chose $_SESSION['prenom'] = "Jamal"; $_SESSION['age'] = 24; ?> <html > <body> <p> Salut <? echo $_SESSION['prenom']; ?> !<br /> Tu es l'accueil de mon site (index.php). Tu veux aller sur une autre page ? </p> <p> <a href="mapage.php">Lien vers mapage.php</a><br /> <a href="monscript.php">Lien vers monscript.php</a><br /> <a href="informations.php">Lien vers informations.php</a> </p> </body> </html>
11/38

Sessions (IV)
Notez quelque chose de trs important : les liens sont tous simples. On ne s'occupe de rien : ni de transmettre le prnom, ge du visiteur, ni de transmettre l'ID de session. PHP s'occupe automatiquement du transfert des variables entre les pages. En effet, sur chacune des pages "mapage.php", "monscript.php", "informations.php" (et n'importe quelle autre page de votre site), vous retrouverez les variables $_SESSION['prenom'], et $_SESSION['age'], les rcuprer et manipuler leur contenu.
<? session_start(); // On dmarre la session AVANT toute chose ?> <html > <p>Re-bonjour !</p> <p> Tu t'appelles <? echo $_SESSION['prenom'] ;?> !<br /> Et ... Tu as <? echo $_SESSION['age']; ?> ans, c'est a ? </p> </html>
12/38

Expressions rgulires (I)


A quoi a sert ? En fait, c'est un systme trs puissant et trs rapide pour faire des recherches dans des chanes de caractres (des phrases par exemple). C'est une sorte de fonctionnalit Rechercher / Remplacer trs pousse.

Des exemples ? Vrifier automatiquement si l'adresse e-mail entre par le visiteur a une forme valide (comme "dupont@free.fr") Modifier une date que vous avez au format amricain (08-05-1985) pour la mettre dans le bon ordre en franais (05/08/1985) Remplacer automatiquement toutes les adresses "http://" par des liens cliquables, comme a se fait sur certains forums.

13/38

Expressions rgulires (I)


Les expressions rgulires sont un outil puissant pour la recherche de motifs dans une chane de caractres. Fonctions : ereg($motif, $str) : teste lexistence du motif $motif dans la chane $str ereg_replace($motif, $newstr, $str) : remplace les occurrences de $motif dans $str par la chane $newstr split($motif, $str) : retourne un tableau des sous-chanes de $str dlimites par les occurrences de $motif Les fonctions eregi, eregi_replace et spliti sont insensibles la casse (cest-dire ne diffrencient pas les majuscules et minuscules). Exemple : if (eregi(Paris, $adresse)) echo Vous habitez Paris.;

14/38

Expressions rgulires (II)


Les motifs peuvent tre trs complexes et contenir des caractres spciaux. Les caractres spciaux : ^ : le motif suivant doit apparatre en dbut de chane $ : le motif suivant doit apparatre en fin de chane [abcdef] : intervalle de caractres, teste si lun deux est prsent [a-f] : plage de caractres : teste la prsence de tous les caractres minscules entre a et f [^0-9] : exclusion des caractres de 0 9 ? : rend facultatif le caractre quil prcde (0 ou une fois) + : indique que le caractre prcdent est obligatoire et peut apparatre une ou plusieurs fois * : pareil que + Mais le caractre prcdent peut apparatre 0 ou +ieurs fois {i,j} : retrouve une chane contenant entre au minimum i et au maximum j fois le motif quil prcde {i,} : idem mais pas de limite maximum {i} : retrouve une squence dexactement i fois le motif quil prcde ( ) : les oprateurs de quantification concernent tous les lmenst entre ( ). Il est possible de le combiner avec "|" pour le ou.
15/38

Expressions rgulires (III)


Exemples de motifs : [A-Z] : recherche toutes les majuscules [a-zA-Z] : recherche toutes les lettres de lalphabet minuscules ou majuscules [^aeyuio] : exclu les voyelles ^Le : toute chane commenant par le mot Le suivi dun espace $\.com : toute chane se terminant par .com (dspcialise le point) ^abk+ : commence par ab et suivi de un ou plusieurs k ^yahoo+$ : commence et se termine par yaho (avec le o qui peut se rpter) abd? : contient ab suivi de un ou aucun d abc{2,4} : contient ab suivi de 2, 3 ou 4 c abc{2,} : contient ab suivi de 2ou plus c

Exemples : if ( ereg(^.*@wanadoo\.fr, $email) ) { echo Vous tes chez Wanadoo de France Tlcom.; } $email = eregi_replace(@, -nospam@, $email); Ce dernier exemple remplace moi@ici.fr en moi-nospam@ici.fr.
16/38

Expressions rgulires (IV)


Il existe des squences types : [[:alnum:]] : [A-Za-z0-9] caractres alphanumriques [[:alpha:]] : [A-Za-z] caractres alphabtiques [[:digit:]] : [0-9] caractres numriques [[:blank:]] : espaces ou tabulation [[:xdigit:]] : [0-9a-fA-F] caractres hexadcimaux [[:graph:]] : caractres affichables et imprimables [[:lower:]] : [a-z] caractres minuscules [[:upper:]] : [A-Z] caractres majuscules [[:punct:]] : caractres de ponctuation [[:space:]] : tout type despace [[:cntrl:]] : caractres dchappement [[:print:]] : caractres imprimables sauf ceux de contrle

17/38

Mail (I)
La fonction mail envoie un message lectronique. Syntaxe : mail($recipient, $subject, $message[, $headers, $params]); Exemple : $message = Allez sur le site du <b>CyberZode Qui Frtille</b>, vous y trouverez un tutoriel complet sur le PHP4 et MySQL.; mail(mfagroud@yahoo.com, Aide sur PHP, $message); Les arguments obligatoires sont le destinataire, le sujet du message ainsi que le message proprement dit. Les enttes et paramtres additionnels sont facultatifs.

18/38

Mail (II)
Exemple plus complet : <?php $recipient = Tony <tony@labas.com>, ; $recipient .= Peter <peter@pwet.net>; $subject = Notre rendez-vous; $message = Je vous propose le samedi 15 juin \n; $message .= --\r\n; // Dlimiteur de signature $message .= Le CyberZode Qui Frtille; $headers = From: Hugo Etivant <cyberzoide@multimania.com>\n; $headers .= Cc: bruno@ici.fr\n; mail($recipient, $subject, $message, $headers); ?>

FIN
19/38

URL (I)
Les URL (Uniform Ressource Location) sont les chemins de ressources sur internet. Exemples dURL: http://www.google.fr/?q=cours+php http://cyberzoide.multimania.com/php/php4_mysql.ppt ftp://foo:0478@ftp.download.net Leur format spcifique leur interdit de comporter nimporte quel caractre (comme lespace par exemple). Une URL est une chane de caractres compose uniquemment de caractres alphanumriques incluant des lettres, des chiffres et les caractres : - (tirt), _ (soulign), . (point). Tous les autres caractres doivent tres cods. On utilise le code suivant : %xx. O % introduit le code qui le suit et xx est le numro hexadcimal du caractre cod.

20/38

URL (II)
Le passage de valeur dun script lautre se fait soit par les sessions, soit par les formulaires ou encore par lURL. Exemple par lURL : <a href=index.php?imprim=yes&user_id=75>Version imprimable</a> Dans cet exemple on transmet deux variables au script index.php : $imprim de valeur yes et $user_id de valeur 75. Les valeurs sont des chanes de caractres qui pouront tre castes implicitement en entier. Le caractre ? Indique que la suite de lURL sont des paramtres et ne font pas partie du nom de fichier. Le caractre = spare un nom de paramtre et sa valeur transmise. Le caractre & sparer deux paramtres.

Pour faire face au cas gnral dun paramtre dont la valeur contient des caractres interdits, on utilise les fonction de codage.

21/38

URL (III)
Quelques fonctions de codage sur lURL : Codage de base : urlencode : Encode une chane en URL. urldecode : Dcode une chane encode URL. Codage complet : rawurlencode : Encode une chane en URL, selon la RFC1738. rawurldecode : Dcode une chane URL, selon la RFC1738. Codage plus volu : base64_encode : Encode une chane en MIME base64. base64_decode : Dcode une chane en MIME base64

22/38

URL (IV)
urlencode($str) : code la chane $str. Les espaces sont remplacs 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-formurlencoded.

Exemple 1 : echo <a href=\$PHP_SELF?foo=.urlencode($foo).\>Foo</a>;


rawurlencode($str) : code la chane $str. Remplace tous les caractres interdits par leur codage quivalent hexadcimal. Exemple 2 : echo <a href=\$PHP_SELF?foo=.rawurlencode($foo).\>Foo</a>;

Pour tre accessible, la valeur du paramtre devra par la suite tre dcode dans le script darriv par la fonction rciproque adquate.

23/38

URL (V)
base64_encode($str) : code la chane $str en base 64. Cet encodage permet des informations binaires d'tre manipules par les systmes qui ne grent pas correctement les codes 8 bits (code ASCII 7 bit tendu aux accents europens), comme par exemple, les corps de mail qui en gnral sont amricains et ne gre que les 7 bits. Une chane encode en base 64 a une taille denviron 33% suprieure celle des donnes initiales. Exemple 3 : echo <a href=\$PHP_SELF?foo=.base64_encode($foo).\>Foo</a>;

Comparatif des trois encodages : Sans codage : Ren & Cie : 30%-5*20 urlencode : Ren%E9+%26+Cie+%3A+30%25-5%2A20 rawurlencode : Ren%E9%20%26%20Cie%20%3A%2030%25-5%2A20 base64_encode : UmVu6SAmIENpZSA6IDMwJS01KjIw

24/38

Vous aimerez peut-être aussi