You are on page 1of 153

Mon site web tape par tape

Mon code PHP et ma base de donnes MySql Dans ces pages vous apprendrez manier le code PHP et la base de donnes MySql, des outils gratuits pour parfaire votre site web Si des erreurs se sont glisses dans le te!te n"#sitez pas me contacter $es liens ci%dessous vous renverront au c#apitre correspondant

TAPE 10 : Dynamiser mon site a ec PHP

10!1 "n ser e#r web s#r otre mac$ine personnelle

10!1!1 Tlc$ar%ement de &amp ser er

10!1!' Dtails de otre installation

10!' Po#r commencer

10!'!1 ( q#oi sert le PHP

10!'!' )alises d*o# ert#re + ,ermet#re

10!'!- .ommentaires

10!'!/ 0e point ir%#le

10!'!1 Apostrop$es et %#illemets

10!- 2ariables et constantes

10!-!1 0es 3 ariables

10!-!' 0es .45STA5TES

10!/ 6#elq#es 7ad%ets po#r se ,amiliariser

10!/!1 A,,ic$er la date d# 8o#r

10!/!' 2alidit d9#ne date saisie

10!/!- Temps d9e:c#tion d9#n script p$p

10!/!/ ;c#prer mon adresse <P

10!1 0es oprate#rs

10!1!1 0es oprations

10!1!' 0e Mod#lo *3a = ' >*

10!1!- 4prate#rs d*incrmentation

10!1!/ 4prate#rs de concatnation

10!1!1 4prate#rs de comparaison

10!1!? 4prate#rs lo%iq#es

10!? 0es tablea#:

10!?!1 0es tablea#: inde:s

10!?!' 0es tablea#: associati,s

10!?!- Tablea# de tablea#@ panier d9articles

10!?!/ Matrices

10!A Tests de base

10!A!1 09instr#ction i, else elsei,

10!A!' 09instr#ction switc$

10!B 0es bo#cles

10!B!1 0a bo#cle &H<0E

10!B!' 0a bo#cle D4 &H<0E

10!B!- 0a bo#cle C4;

10!B!/ 0a bo#cle C4;EA.H

10!B!1 0es instr#ctions breaD et contin#e

10!E 0es ,onctions #tilisate#rs

10!E!1 Dclaration d9#ne ,onction #tilisate#r

10!E!' 0e mot+cl ret#rn

10!E!- Dclaration et appel d9#ne ,onction

10!E!/ .on ertisse#r en E#ros

10!E!1 Passa%e des ar%#ments F isibilit et porte des ariablesG

10!E!? Passa%e des ar%#ments par copie

10!E!A Passa%e des ar%#ments par r,rence

10!10 Sc#rit des ,orm#laires

10!10!1 .aractHres spcia#: : #rlencode@ #rldecode

10!10!' Sc#rit des c$amps te:te : $tmlentities

10!10!- Sc#rit des c$amps te:te : ,ailles d*in8ection de $eaders de mail

10!11 0es ,orm#laires

10!11!1 .ration d9#n ,orm#laire en HTM0 : I,ormJKIL,ormJ

10!11!' 4M ont les donnes : action

10!11!- Transmission des donnes : met$ode 7ET

10!11!/ Transmission des donnes : met$ode P4ST

10!11!1 .omment entrer les donnes dans le ,orm#laire : balise Iinp#tJ

10!11!? 0es bo#tons : inp#t typeNOb#ttonO

10!11!A Des bo#tons %rap$iq#es

10!11!B Pone de saisie de te:te : inp#t typeNOte:tO

10!11!E .$amps po#r mots de passe : inp#t typeNOpasswordO

10!11!10 .$amps cac$s : inp#t typeNO$iddenO

10!11!11 Taille de la saisie et d# te:te : siQe@ ma:len%t$@ Ite:tareaJKILte:tareaJ

10!11!1' .ases R coc$er : inp#t typeNOc$ecDbo:O

10!11!1- )o#tons radio : inp#t typeNOradioO

10!11!1/ 0iste de slection dro#lante : IselectJKILselectJ

10!11!11 En oi de ,ic$iers et d9ima%es : inp#t typeNO,ileO

10!11!1? "ne calc#latrice

10!1' Corm#laires d9en oi de mails

10!1'!1 "n en oi de mail to#t simple

10!1'!' "n en oi de mail q#i rc#pHre les donnes d9#n ,orm#laire

10!1'!- "n en oi de mail complet q#i teste la alidit des c$amps

10!1- 0es ,ic$iers

10!1-!1 <ncl#re les donnes d9#n ,ic$ier te:te : incl#deFG o# incl#deSonceFG

10!1-!' 0ect#re d9#n ,ic$ier te:te : ,ileS%etScontentsFG o# ,ileFG

10!1-!- 0ect#re d9#n ,ic$ier de con,i%#ration : parseSiniS,ileFG

10!1-!/ 0ect#re d9#n ,ic$ier .S2 iss# d9#n table#r : ,%etcs FG

10!1-!1 Ecrit#re dans #n ,ic$ier : ,ileSp#tScontentsFG

10!1-!? 4# ert#re d9#n ,ic$ier : ,openFG

10!1-!A 2erro#illa%e d9#n ,ic$ier : ,locDFG

10!1-!B Tronq#er #n ,ic$ier : ,tr#ncateFG

10!1-!E Cermer #n ,ic$ier : ,closeFG

10!1-!10 0ire #n ,ic$ier : ,readFG

10!1-!11 Ecrire dans #n ,ic$ier : ,writeFG

10!1-!1' Taille d9#n ,ic$ier : ,ilesiQeFG

10!1/ Cic$iers et %estion doc#mentaire

10!1/!1 0e ,orm#laire

10!1/!' 0a pa%e de rc#pration des donnes

10!11 0es cooDies

10!11!1 Ecrit#re et lect#re d9#n cooDie : setcooDieFG@ 3S.44T<EUV

10!11!' S#ppression d9#n cooDie : setcooDieFG@ sans ale#r

10!11!- Enre%istrer dans #n cooDie les donnes d9#n ,orm#laire

10!11!/ Enre%istrer dans #n cooDie le nombre de isites d9#n isite#r

10!11!1 Personnaliser l9inter,ace %rap$iq#e de la pa%e R l9aide d9#n cooDie

10!1? 0es sessions

10!1?!1 .omment marc$e #ne session

10!1?!' 0ect#re et crit#re de sessions

10!1?!- S#ppression d9#ne session : session destroyFG>

10!1?!/ A#tres instr#ctions F,ac#ltati esG

10!1?!1 6#elq#es rH%les de sc#rit

10!1A "tiliser #ne base de donnes MyS60

10!1A!1 0a str#ct#re d*#ne base de donnes

10!1A!' 0es ,ormats des donnes en MyS60

10!1A!- 0es oprate#rs de MyS60

10!1A!/ P$pMyAdmin

10!1A!1 .rer #ne base de donnes MyS60 a ec P$pMyAdmin

10!1A!? .rer des tables dans #ne base de donnes MyS60 a ec P$pMyAdmin

10!1A!A 0es types de c$amps MyS60 FP$pMyAdminG

10!1A!B <nsrer #n enre%istrement de donnes a ec P$pMyAdmin

10!1A!E A8o#ter #n c$amp R #ne table a ec P$pMyAdmin

10!1B "tiliser MySql dep#is PHP

10!1B!1 .rer #n #tilisate#r administrate#r

10!1B!' Se connecter R la base de donnes MySql dep#is PHP

10!1B!' + 1G .onne:ion MyS60 + mt$ode oriente ob8et FPD4G

10!1B!' + 'G .onne:ion MyS60 + mt$ode procd#rale FmysqliG

10!1B!- A,,ic$er le conten# d*#ne table dep#is PHP

10!1B!- + 1G 0ire le conten# d9#ne table MyS60 + mt$ode oriente ob8et FPD4G

10!1B!- + 'G 0ire le conten# d9#ne table MyS60 + mt$ode procd#rale FmysqliG

10!1B!/ <nsrer des donnes R partir d*#n ,orm#laire dep#is PHP

10!1B!/ + 1G <nsrer des donnes dans #ne table MyS60 + mt$ode oriente ob8et FPD4G

10!1B!/ + 'G <nsrer des donnes dans #ne table MyS60 + mt$ode procd#rale FmysqliG

10!1B!1 Modi,ier #n enre%istrement dep#is PHP

10!1B!1 + 1G Modi,ier des donnes dans #ne table MyS60 + mt$ode oriente ob8et FPD4G

10!1B!1 + 'G Modi,ier des donnes dans #ne table MyS60 + mt$ode procd#rale FmysqliG

10!1B!? S#pprimer #n enre%istrement dep#is PHP

10!1B!? + 1G S#pprimer #n enre%istrement d9#ne table MyS60 + mt$ode oriente ob8et FPD4G

10!1B!? + 'G S#pprimer #n enre%istrement d9#ne table MyS60 + mt$ode procd#rale FmysqliG

10!1B!A Trier #ne table dep#is PHP

10!1B!A + 1G Trier par noms #ne table MyS60 + mt$ode oriente ob8et FPD4G

10!1B!B "n script d9administration po#r %rer la table

10!1E .rer #n systHme d9a#t$enti,ication sc#ris W mt$ode oriente ob8et FPD4G

10!1E!1 le ,orm#laire po#r s9identi,ier : a#t$!p$p + mt$ode oriente ob8et FPD4G

10!1E!' le ,orm#laire po#r s9inscrire : 1-Sa#t$Sinscript!p$p + mt$ode oriente ob8et FPD4G

10!1E!- la alidation d# nom et d# mot de passe : eri,!p$p + mt$ode oriente ob8et FPD4G

10!1E!/ le script de protection de la pa%e : sec#re!p$p + mt$ode oriente ob8et FPD4G

10!'0 .rer #n site marc$and sc#ris W mt$ode procd#rale FmysqliG

10!'0!A .onne:ion et men# W mt$ode procd#rale FmysqliG

10!'0!A1 le script de conne:ion + mt$ode procd#rale FmysqliG

10!'0!A' le script d9a#t$enti,ication + mt$ode procd#rale FmysqliG

10!'0!A- Modi,ier le mot de passe + mt$ode procd#rale FmysqliG

10!'0!A/ la pa%e d9administration + mt$ode procd#rale FmysqliG

10!'0!A1 la Dconne:ion + mt$ode procd#rale FmysqliG

10!'0!A? la pa%e d# site web F#ltra+simpli,ieG + mt$ode procd#rale FmysqliG

10!'0!) 7rer l9#tilisate#r W mt$ode procd#rale FmysqliG

10!'0!)1 A,,ic$a%e des #tilisate#rs + mt$ode procd#rale FmysqliG

10!'0!)' Dtail d9#n #tilisate#r + mt$ode procd#rale FmysqliG

10!'0!)- A8o#ter #n #tilisate#r + mt$ode procd#rale FmysqliG

10!'0!)/ Modi,ier #n #tilisate#r + mt$ode procd#rale FmysqliG

10!'0!)1 E,,acer #n #tilisate#r + mt$ode procd#rale FmysqliG

10!'0!. 7rer les articles d# site W mt$ode procd#rale FmysqliG

10!'0!.1 A,,ic$a%e des articles + mt$ode procd#rale FmysqliG

10!'0!.' Dtail d9#n article + mt$ode procd#rale FmysqliG

10!'0!.- A8o#ter #n article + mt$ode procd#rale FmysqliG

10!'0!./ Modi,ier #n article + mt$ode procd#rale FmysqliG

10!'0!.1 S#pprimer #n article + mt$ode procd#rale FmysqliG

10!'0!.?a Statistiq#es s#r les articles + mt$ode procd#rale FmysqliG

10!'0!.?b Statistiq#es s#r les articles a ec la bibliot$Hq#e Artic$ow

10!'1 .oncl#sion

TAPE 10 : Dynamiser mon site a ec PHP

&e mmento sur PHP et MyS'$ est un simple aide%mmoire Pour rester pratique, ce mmento est agrment de mod(les de code que )*ai tous tests, ceci afin d*viter d*entrer dans la catgorie des scripts truffs d*erreurs que l*on trouve #abituellement sur internet Pour plus de dtails, )e vous renvoie cependant au! tutoriels que vous trouverez sur internet + http://php.net/manual/fr/index.php % http://www.phpfrance.com/ % http://www.siteduzero.com/ ainsi qu* l"e!cellent livre ,PHP - .vanc % /e dition, de 0ric Daspet et &yril Pierre de 1eyer, c#ez 2yrolles

10!1 "n ser e#r web s#r otre mac$ine personnelle 3l est e!tr4mement utile, pour ne pas dire absolument indispensable, de commencer par installer un serveur web sur votre mac#ine personnelle &eci vous permettra de reproduire le comportement de vos scripts pour les tester sur votre propre mac#ine, ce qui est bien plus pratique et plus rapide que de les tlc#arger c#aque fois sur le serveur de votre #bergeur $e but est de transformer votre mac#ine en serveur web fictif pour simuler le comportement de vos scripts sur le vrai serveur web de votre #bergeur avant de les tlc#arger

X 10!1!1 Tlc$ar%ement de &amp ser er

5ec#erc#er 6amp server dans 1oogle +

&#oisissez l*option 7 ,8lc#argez la derni(re version de 6ampserver 9,

3nutile de remplir le formulaire, allez directement dans ,82$2&H.5125 6ampServer 9 :c,

Si un fic#ier p#p ini e!iste d), l*installeur vous proposera de le renommer

;tilisez de prfrence <irefo! comme navigateur par dfaut =avec <ire>ug + il sera utile pour ventuellement dbugger vos programmes PHP?

&onservez local#ost comme nom de serveur SM8P mais c#angez votre adresse e%mail

2t cliquez sur <inis# pour terminer l*installation

;ne petite ic@ne de lancement rapide apparaAt en bas droite de votre cran +

&liquez sur l"icone 6 puis dmarrez tous les services

Bous pourrez ainsi e!plorez votre rpertoire www, ou bien ouvrir les pages de local#ost dans votre navigateur, ou encore lancer p#pMy.dmin C et bien d*autres options D

X 10!1!' Dtails de otre installation : p$pin,oFG

. ce stade nous supposons que vous avez termin avec succ(s l*installation du serveur web 6amp sur votre mac#ine personnelle $orsqu*il est install, dmarrez le serveur 6amp, puis ouvrez votre navigateur =<irefo! de prfrence? 2t dans la barre d"adresses, entrez + http://localhost/01_phpinfo.php pour obtenir tous les dtails de votre installation PHP et pour vous assurer qu*elle fonctionne bien &ode du fic#ier 01Sp$pin,o!p$p + EFp#p p#pinfo=?G FH

10!' Po#r commencer

X 10!'!1 ( q#oi sert le PHP

$e PHP sert dynamiser vos pages, il permet d*interagir avec vos visiteurs l*aide de formulaires, il peut gnrer dynamiquement du code #tml au milieu d*une page $e code PHP est souvent inclus au milieu du code #tml + Dans ce cas le fic#ier qui contient du PHP doit avoir l"e!tension I p#p

X 10!'!' )alises d*o# ert#re + ,ermet#re

$e code PHP s*ouvre et se ferme comme ceci + EFp#p JJJ FH

X 10!'!- .ommentaires

/* Commentaires sur plusieurs lignes (Recommand) bla bla bla */ ou bien // Sur une seule ligne

X 10!'!/ 0e point ir%#le

&#aque instruction se termine par un ,>,

X 10!'!1 Apostrop$es et %#illemets

2ntre apostrop$es on a des c#aines de caract(res =non interprtables? 2ntre %#illemets on a des c#aines et ventuellement des variables interprtables
<?php $toto = 'une oiture'! echo "la ariable aut $toto"! // a##iche la " ariable aut une oiture" (la ariable $toto est interprte) echo 'la ariable aut $toto'! // a##iche "la ariable aut $toto" ($toto est conser e sous #orme de chaine) ?$

ec$o sert affic#er dans la page #tml les c#aines entre apostrop#es ou guillemets, les variables ou les constantes

10!- 2ariables et constantes

X 10!-!1 0es 3 ariables

$es variables commencent par un K =:-Jvariables p#p?


<?php $toto = 'une oiture'! $te%te = 'Ceci est du te%te <br /$ & ec du html''! echo "$toto"! echo "$te%te"! ?$

2isibilit des ariables : ;ne variable est visible =accessible? l oL elle a t dclare Par e!emple si on la dclare dans une fonction, elle ne sera pas accessible dans le script principal, et vice versa
X 10!-!' 0es .45STA5TES

$es constantes sont dclares par la fonction de,ine =en M.M;S&;$2S mais pas de K devant?
<?php de#ine ('(&)C*+S,&+,-'. /0)! $resultat = /0 * (&)C*+S,&+,-! echo (&)C*+S,&+,-! ?$

10!/ 6#elq#es 7ad%ets po#r se ,amiliariser

X 10!/!1 A,,ic$er la date d# 8o#r

$a fonction dateF,ormat@ timestampG + Pour affic#er la date on utilise la fonction date=? $a fonction strtotime FG + convertit une c#aine date en temps $a fonction mDtimeFG + donne un timestamp partir d"une date =:9 7Jdate)our p#p?
<html$ <bod1$ <center$2on3our nous sommes le 4 <?php $date = date("d5m56")! echo "$date"! // &##iche la date sous la #orme 07508590// $#ormat = 'd5m51. :4i4s'! // : ma3uscule eut dire heures de 0 ; 9<h // 6 ma3uscule eut dire anne sur < caract=res. etc' $date = date($#ormat)! // &##iche la date sous la #orme 075085//. 0>4<049? (l'heure est en temps uni ersel) echo "<br$$date"! // strtotime con ertit une chaine date en temps $date = strtotime ('/@ +o ember /?>@')! echo "<br$$date"! $#ormat = 'd5m51'! $date = date($#ormat. $date)! echo "<br$$date"! // mAtime (heure. minute. seconde. mois. 3our. annee) donne un timestamp ; partir d'une date echo "<br$"'date("d/(/6". mAtime (0.0.0./9.B9.90//))'"<br$"! echo date("d/m/6". mAtime (0.0.0./B./.90/9))'"<br$"! echo date("(5d56". mAtime (0.0.0././.90//))'"<br$"! ?$ </center$ </bod1$ </html$

X 10!/!' 2alidit d9#ne date saisie

$a fonction c$ecDdateF mois@ 8o#r@ annee G + envoie true si la date en param(tres est valide
<?php /* *n rcup=re la date de naissance saisie dans un #ormulaire sous la #orme CC/((/&&& */ $naissance = $)R-DE-S,F'naissance'G ! $tab = e%plode("/". $naissance) ! /* Hri#ions la alidit de cette date */ i# (checAdate($tabF/G. $tabF0G. $tabF9G)) I /* noteJ Kue dans $tab les arguments sont dans lLordre anglosa%on et non dans lLordre #ranMais */ echo 'Na date est alide' '!

OelseI echo 'Na date est in alide' '! O ?$

X 10!/!- Temps d9e:c#tion d9#n script p$p

$a fonction timeF G + retourne le timestamp actuel que l*on peut ensuite comparer diffrents moments du script $a fonction microtimeFG + renvoie en plus les millioni(mes de secondes =:9 9Jtempspasse p#p?
<?php $temps/ = microtime() ! /* microtime ren oie la partie dcimale de l'heure */ echo "<br$Pbut du script ; $temps/<br$" ! /* placeJ os traitements ici */ $i=/! Qhile ($i<=/0000) I echo "$i 5 " ! $iRR ! O /* #in des traitements */ /* Nes traitements doi ent bien sSr Ttre asseJ longs a ec la #onction time() */ $temps9 = microtime() ! echo "<br$Uin du script ; $temps9" ! $tempspasse = $temps9 5 $temps/ ! echo "<br$Ce traitement a dur $tempspasse" ! ?$

"n script pl#s l%ant po#r calc#ler les temps d9e:c#tion!!! =:9 NJtempspasse p#p?
<?php #unction tempspasse($temps) I /* ,emps pass en secondes */ $ecart = time()5$temps ! $ecart)3our = #loor($ecart/@0/@0/9<) ! $ecart 5= $ecart)3our*@0*@0*9< ! $ecart)heure = #loor($ecart/@0/@0) ! $ecart 5= $ecart)heure*@0*@0 ! $ecart)minute = #loor($ecart/@0) ! $ecart 5= $ecart)minute*@0 ! $ecart)seconde = $ecart ! return (',emps pass =''$ecart)3our''3 ''$ecart)heure''h '

'$ecart)minute''mn ''$ecart)seconde''s')! O /* Var e%emple. a##ichons le temps pass depuis Ku'on a cr le #ichier phpin#o'php */ echo "<br$temps pass depuis Ku'on a cr le #ichier 0/)phpin#o'php<br$" ! echo tempspasse(#ilectime('0/)phpin#o'php')) ! /* #ilectime() = #ile creation time */ ?$

X 10!/!/ ;c#prer mon adresse <P

=:/Jmon.dresse3P p#p?
<html$ <bod1$ <center$Rcuprer mon adresse WV 4 <?php echo 'Hotre adresse WV est 4 ' ' $)S-RH-RF'R-(*,-)&PPR'G! ?$ </center$ </bod1$ </html$

10!1 0es oprate#rs

X 10!1!1 0es oprations

$es oprateurs servent faire des oprations, affecter des valeurs, ou les comparer O .ffectation + Ka O /G PPaffecte la valeur / la variable Ka Q .ddition % Soustraction I Multiplication P Division R Modulo + ec#o Ka R KbG PPdonne le reste de la division de Ka par Kb

X 10!1!' 0e Mod#lo *3a = ' >*

$e Mod#lo Ka R 9G PPsert savoir si un nombre est pair o# impair 3l nous permet d"affic#er une liste avec 7 ligne sur 9 d"une couleur diffrente pour faciliter la lecture =7/J;ne$igneSurDeu!&olor p#p?
<?php $i = 0! echo '<table Xidth="/00"$'! Xhile ($i < /0) I i# (($i Y 9)==0) I //cas d'une ligne paire echo "<tr$<td bgcolor=ZUUUUUU align=center$$i</td$</tr$"! O else I //cas d'une ligne impaire echo "<tr$<td bgcolor=ZCCCCCC align=center$$i</td$</tr$"! O $iRR! O echo '</table$'! ?$

X 10!1!- 4prate#rs d*incrmentation

<?php $i = /! $iRR! /* est Kui alent ; */ $i = $i R /! $i55! /* est Kui alent ; */ $i = $i 5 /! RR$i! /* Si l'oprateur est de ant. la ariable est d'abord incrmente puis alue */ ?$

X 10!1!/ 4prate#rs de concatnation

<?php $a='hello '! $b='Xorld'! echo $a'$b! /* concatnation de $a et $b =$ rsultat 'hello Xorld' */ echo $a'='1ou'! /* a3oute '1ou' ; 'hello ' =$ rsultat 'hello 1ou' */ ?$

X 10!1!1 4prate#rs de comparaison

Ka OO KbG Ka OOO KbG Ka DO KbG Ka DOO KbG Ka H KbG Ka E KbG Ka HO KbG Ka EO KbG

PPest vrai si Ka gal Kb PPest vrai si Ka gal Kb et ont toutes deu! le m4me type PPest vrai si Ka diffrent de Kb PPest vrai si Ka diffrent de Kb en valeur S; en type PPest vrai si Ka plus grand que Kb PPest vrai si Ka plus petit que Kb PPest vrai si Ka plus grand ou gal Kb PPest vrai si Ka plus petit ou gal Kb

X 10!1!? 4prate#rs lo%iq#es

D KbG Ka TT KbG Ka .UD KbG Ka VV KbG Ka S5 KbG Ka WS5 KbG

PPest vrai si Kb est fau! PPest vrai si Ka et Kb sont tous deu! vrais PPest vrai si Ka et Kb sont tous deu! vrais PPest vrai si au moins Ka ou Kb est vrai PPest vrai si au moins Ka ou Kb est vrai PPest vrai si uniquement un des deu! est vrai

10!? 0es tablea#:

X 10!?!1 0es tablea#: inde:s

$es tableau! inde!s ont des inde! commenXant : =et non 7?, on peut les remplir de diffrentes faXons + =:YJtesttab p#p?
<?php $tab=arra1('a'.'b'.'c'.'d')! /* Si l'on ne prcise pas les inde% ils seront 0. /. 9. B automatiKuement */ echo '<pre$'! print)r($tab)! echo '</pre$'! echo'<br/$'! ?$

&e qui donne + .rray = Z:[ OH a Z7[ OH b Z9[ OH c ZN[ OH d ? =7:Jtesttab7 p#p?
<?php /* *n peut aussi remplir le tableau de la #aMon sui ante */ $tabF0G = /9980! $tabF/G = /8888! $tabFBG = /9000! $tabF<G = 9/B00! echo '<pre$'! print)r($tab)! echo '</pre$'! echo'<br/$'! ?$

&e qui donne + .rray = Z:[ OH 799-: Z7[ OH 7---ZN[ OH 79:::

Z/[ OH 97N:: ?

X 10!?!' 0es tablea#: associati,s

$es tableau! associatifs ont pour cls des noms et non plus des inde! +
<?php /* Pans les tableau% associati#s. les inde% sont remplacs par des noms */ $tab=arra1( 'prem elem'=$'a'. '9e elem'=$'b'. 'Be elem'=$'c'. '<e elem'=$'d' )! echo '<pre$'! print)r($tab)! echo '</pre$'! echo'<br/$'! ?$

&e qui donne + .rray = Zprem elem[ OH a Z9e elem[ OH b ZNe elem[ OH c Z/e elem[ OH d ? E:emple de tablea# associati, + =7:Jtesttabassociatif p#p?
<?php $tab=arra1( 'email'=$'mon'adresse[monhebergeur'#r'. 'nom'=$'Vernot'. 'prenom'=$'\ilbert'. 'se%e'=$'('. ' ille'=$'*rsa1'. 'codpost'=$'?/<00'. 'pa1s'=$'Urance'. 'telport'=$'0@//>08/<@' )! echo "Hotre contact ; I$tabF' ille'GO (I$tabF'pa1s'GO5I$tabF'codpost'GO) sera (onsieur "! echo $tabF'prenom'G'" "'$tabF'nom'G!

echo "<br$Son tlphone est le "! echo $tabF'telport'G! ?$

&e qui donne + Botre contact Srsay =<rance%Y7/::? sera Monsieur 1ilbert Pernot Son tlp#one est le :\77]:-7/\

X 10!?!- Tablea# de tablea#@ panier d9articles

Sb)ectif + 8ransformer un tableau Karticles en tableau de tableau dans une variable Kpanier $es valeurs de Kpanier sont des tableau! associatifs =pri!, description? et les cls de Kpanier sont numriques .ffic#er le panier =7NJ! tableauJpanier p#p?
<?php $articles=arra1( 'oranges'=$/'89. 'pommes'=$<'B8. 'tomates'=$8'>0. 'celeri'=$B'70. 'poi re'=$9'>> )! echo '<pre$'! print)r($articles)! echo '</pre$'! echo'<br/$'! echo'<hr/$'! //555 cration du panier 555 #oreach ($articles as $Ae1 =$ $ alue) I $panierFG=arra1($Ae1.$ alue)! O echo '<pre$'! print)r($panier)! echo '</pre$'! echo'<hr/$'! /* e%emple #oreach < 4 tableau% multi5dimensionnels */ // 555 a##ichage du panier 4 meilleure mthode 555 echo "&rticle4 Vri%4"! #oreach ($panier as $ /) I echo'<br/$'! #oreach ($ / as $ 9) I echo "$ 9]n"! O O echo'<hr/$'!

// 555 a##ichage du panier la totale 555 echo "&rticle4 Vri%4"! #oreach ($panier as $tcle =$ $t al) I echo'<br/$'! #oreach ($t al as $cle =$ $ al) I echo "Re#' $tcle) $ al"'" "! O O echo'<hr/$'! ?$

X 10!?!/ Matrices

;n tableau peut avoir plusieurs dimensions =matrice? +


<?php /* Ene matrice pourrait s'crire comme ceci */ $matrice = arra1( arra1(8.<). arra1(9.B). arra1(7.9). arra1(>.?). arra1(/.@)' )! /* ou comme cela */ $matriceF0GF0G = 8! $matriceF0GF/G = <! $matriceF/GF0G = 9! $matriceF/GF/G = B! $matriceF9GF0G = 7! $matriceF9GF/G = 9! $matriceFBGF0G = >! $matriceFBGF/G = ?! $matriceF<GF0G = /! $matriceF<GF/G = @! ?$

$es inde! peuvent aussi 4tre remplacs par des noms =matrices associatives?

10!A Tests de base

X 10!A!1 09instr#ction i, else elsei,

&#angez la valeur de Kage et testezD =:\JbJif else elseif p#p?


<?php $age = 98! W# ($age < /7) /* Si rai on e%cute ce Kui se trou e entre les premiers crochets */ I echo 'Hous Ttes trop 3eune pour entrer ici' ! e%it(0) ! /* Na #onction e%it() arrTte lLe%cution du script */ O /* Sinon on e%cute ce Kui se trou e ensuite */ elsei# ($age $ /7) I echo "Hous a eJ $age ans. soit plus de /7 ans"! O else I echo "Hous a eJ $age ans tout 3uste"! O ?$

A#tre e:emple + $a fonction mtJrand=7,\:::? donne une valeur alatoire entre 7 et \::: testez le code ci% dessousD =:\Jtestiftrous p#p?
<?php $salaire=mt)rand(/.@000)! i#($salaire</000) I echo 'Hous gagneJ ''$salaire'' O elsei#($salaire<B000) /* +otons KuLil est inutile de ; /000 */ I echo 'Hous gagneJ ''$salaire'' O else I echo 'Hous gagneJ ''$salaire'' 3ob_'! O ?$

^ par mois' Hous Ttes pa1 en5dessous du S(WC'! rpter ici Kue le salaire doit Ttre suprieur ^ par mois' Hous a eJ une bonne pa1e'!

^ par mois' ContacteJ5moi.

ous a eJ un bon

$es accolades sont inutiles si une seule instruction suit la condition +

<?php W# ($temps == 'ensoleill') echo 'Wl #ait beau ' ! ?$

X 10!A!' 09instr#ction switc$

2lle permet de faire plusieurs tests sur la valeur d*une variable Kvar =entre les parent#(ses du "switc#"? en la comparant successivement c#acun des "case" + =7-Jswitc# p#p?
<?php $ ar=mt)rand(0.8)! echo "Hariable tire au haJard 4 $ ar<br$<br$" ! /* 'sXitch' compare la aleur dLune ariable $ ar successi ement ; chacun des 'case' */ sXitch ($ ar) I case / 4 /* ChaKue 'case' se termine par deu% points */ case 9 4 /* NLordre des 'case' est tr=s important */ echo "la ariable aut / ou 9. en #ait elle aut $ ar<br$" ! breaA ! /* & ec un breaA 3e sors du bloc. sinon 3e continue ; e%cuter ce Kui suit */ case B 4 echo "la ariable aut $ ar<br$" ! breaA ! case < 4 echo "la ariable aut $ ar<br$" ! breaA ! case 8 4 echo "la ariable aut $ ar<br$" ! breaA ! de#ault 4 echo "la ariable n'est pas comprise entre / et 8<br$" ! O ! ?$

10!B 0es bo#cles

X 10!B!1 0a bo#cle &H<0E

;n type de boucle tr(s utile si on ne sait pas combien de ,ois itrer + "w#ile" veut dire "tant que" la condition est vraie, les instructions sont e!cutes, puis s*arr4tent d(s que la condition est fausse =7\Jw#ile p#p?
<?php $i=/! Xhile ($i<=/0) I echo "$i 5 " ! $iRR ! O /* a##iche / 5 9 5 B 5 < 5 8 5 @ 5 > 5 7 5 ? 5 /0 5 ?$

*/

X 10!B!' 0a bo#cle D4 &H<0E

2ncore un type de boucle tr(s utile si on ne sait pas combien de ,ois itrer + "6#ile" veut dire "tant que" la condition est vraie, les instructions sont e!cutes, puis s*arr4tent d(s que la condition est fausse =7]JdoJw#ile p#p?
<?php $i=/! do I echo "$i 5 " ! $iRR ! O Qhile ($i<=/0) /* on e%cute la boucle. on #ait le test ensuite */ /* a##iche / 5 9 5 B 5 < 5 8 5 @ 5 > 5 7 5 ? 5 /0 5 ?$

*/

X 10!B!- 0a bo#cle C4;

;n type de boucle adapt lorsqu*on sait combien de ,ois itrer + cette boucle int(gre la valeur de dpart, la condition d*arr4t et l*incrmentation =7^Jfor p#p?
<?php #or ( $i=0 ! $i<=? ! $iRR ) I echo "$i 5 " ! O

/* a##iche 0 5 / 5 9 5 B 5 < 5 8 5 @ 5 > 5 7 5 ? 5 ?$

*/

X 10!B!/ 0a bo#cle C4;EA.H

;n moyen simple de passer en revue tous les lments d*un tableau =7^Jforeac# p#p? Synta!e + po#r to#tes les cases d# tablea# ayant #ne ale#r!!!
<?php $tab = arra1( 'nom' =$ 'Vernot'. 'prenom' =$ '\ilbert'. 'email' =$ 'mon'adresse[monhebergeur'#r'. 'codpost' =$ '?/<00'. ' ille' =$ '*rsa1' )! #oreach ($tab as $ alue) I echo "Haleur 4 $ alue <br$]n"! O /* cLest la aleur de la case du tableau Kui est a##ecte ; la ariable $ alue */ /* a##iche Haleur 4 Vernot Haleur 4 \ilbert Haleur 4 mon'adresse[monhebergeur'#r Haleur 4 ?/<00 Haleur 4 *rsa1 */ #oreach ($tab as $Ae1 =$ $ alue) I echo " Cl 4 $Ae1! Haleur 4 $ alue <br$]n"! O /* cLest la cl de la case du tableau Kui est a##ecte ; la ariable $Ae1 */ /* a##iche Cl 4 nom! Haleur 4 Vernot Cl 4 prenom! Haleur 4 \ilbert Cl 4 email! Haleur 4 mon'adresse[monhebergeur'#r Cl 4 codpost! Haleur 4 ?/<00 Cl 4 ille! Haleur 4 *rsa1 */ ?$

X 10!B!1 0es instr#ctions breaD et contin#e

$*instruction breaD permet de sortir d9#ne bo#cle for, w#ile, foreac# ou d*un test switc# par e!emple $*instruction contin#e permet d*i%norer la ,in de bo#cle et donc de sauter les instructions de

l*itration en cours d*une boucle pour e!cuter les instructions de l*itration suivante ;n argument numrique =optionnel?, par e!emple breaD F'G indique combien de structures emboites ont t interrompues, et par e!emple contin#e F'G indique combien de structures emboites ont t ignores

10!E 0es ,onctions #tilisate#rs

Bous pouvez dclarer vous%m4mes des fonctions utilisateurs ou les tirer de bibliot#(ques Sn peut assimiler ces fonctions utilisateurs des sous%programmes plus ou moins comple!es que l*on appelle depuis le programme principal 2lles vitent aussi de rpter plusieurs fois dans le programme principal un code qui sert souvent

X 10!E!1 Dclaration d9#ne ,onction #tilisate#r

<?php #unction nom)de)la)#onction ($argument/ = ' aleur)par)de#aut'. $argument9. $argumentB) I // Niste dLinstructions O ?$

X 10!E!' 0e mot+cl ret#rn

$e mot%cl ret#rn permet d*arr4ter la fonction et de retourner une ale#r au programme qui a appel la fonction =9:Jmultiplier p#p?
<?php // Pclaration de la #onction multiplie () #unction multiplie ($ ar/. $ ar9) I $resultat = $ ar/ * $ ar9! return $resultat ! O // &ppel de la #onction multiplie

echo multiplie (/0./8) ! // &##iche /80 ?$

X 10!E!- Dclaration et appel d9#ne ,onction

$es arguments ayant une valeur par dfaut sont optionnels, mais les autres sont obligatoires =7YJfonction p#p?
<?php // Pclaration de la #onction te%te)bien enue () #unction te%te)bien enue ($prenom. $te%te = '2on3our ') I i#(empt1($prenom)) I return U&NS- ! // Si $prenom est ide. la #onction retourne U&NSOelseI echo "$te%te $prenom <br$"! // Na #onction a##iche le te%te return ,RE- ! // Na #onction retourne ,RE- en cas de succ=s O O // &ppel de cette #onction' Si on passe les deu% arguments te%te)bien enue ('cher \ilbert'. '2ien enue ') ! // &##iche "2ien enue cher \ilbert" // Si on ne passe KuLun seul argument on utilise la second te%te)bien enue ('cher \ilbert') ! // &##iche "2on3our cher \ilbert" // Si on teste la aleur de retour i#(_te%te)bien enue ("")) I echo "-rreur" ! // *n a##iche "-rreur" // -n e##et. comme la cha`ne passe en param=tres est retourne U&NSO ?$ aleur par d#aut du

ide. la #onction

X 10!E!/ .on ertisse#r en E#ros

=9NJconvertisseurJeuro p#p?
<?php #unction con ertisseur)euro($ aleur) I $retour = $ aleur / @'88?8>!

return round($retour.9)! O echo '/0 Urancs = ''con ertisseur)euro(/0)' ' -uros'! ?$

X 10!E!1 Passa%e des ar%#ments F isibilit et porte des ariablesG

Bariable ,local, + par dfaut, une variable est visible =accessible? l oL elle a t dclare Par e!emple si on la dclare dans une fonction, elle ne sera pas accessible dans le script principal, et vice versa Bariable ,static, + la variable locale la fonction e!iste pendant tout le temps d*e!cution du script et conserve sa derni(re valeur c#aque nouvel appel de la fonction Bariable ,%lobal, + la variable est visible partout, dans la fonction et dans le script principal
<?php $param = B ! // Pclaration de la #onction decremente () #unction decremente ($ aleur) I $ aleur = $ aleur 5/! echo $param ! // Pclenche une erreur et n'a##iche rien car $param n'est pas d#ini au sein de la #onction mais en dehors. dans le script principal O // &ppel de la #onction decremente decremente ($param) ! echo $param ! // &##iche B car la aleur modi#ie $ aleur n'est pas la mTme Kue la aleur actuelle $param echo $ aleur ! // Dclenche une erreur et n'affiche rien car $ aleur n'est pas d#ini au sein du script principal ?$

X 10!E!? Passa%e des ar%#ments par copie

Passa%e des ar%#ments par copie + $es arguments passs une fonction le sont normalement par copie Si la fonction modifie la copie de cette variable cela ne modifiera donc pas la variable en de#ors de la fonction
<?php #unction decremente ($ aleur) I $ aleur = $ aleur 5/! O $param = B! decremente ($param) ! echo $param !

// &##iche B ?$

Si on veut que X marc#e, il est prfrable d*utiliser ret#rn pour rcuprer le rsultat comme ceci + =97Jparcopie p#p?
<?php #unction decremente ($ aleur) I $ aleur = $ aleur 5/! return $ aleur ! O $param = B ! echo decremente ($param) ! // &##iche 9 ?$

X 10!E!A Passa%e des ar%#ments par r,rence

Passa%e des ar%#ments par r,rence + Sn peut toutefois passer des arguments une fonction par r,rence 3l suffit d*a)outer dans la dclaration un OYO devant l*argument .lors PHP utilisera la valeur d*origine de la variable et non plus une copie
<?php #unction decremente (a$ aleur) I $ aleur = $ aleur 5/! O $param = B ! decremente ($param) ! echo $param ! // &##iche 9 ?$

10!10 Sc#rit des ,orm#laires

$e formulaire est la partie dynamique du PHP, il ouvre un espace interactif entre l*internaute et le site web, permettant l*utilisateur d*envoyer des donnes vers le serveur, et au site web de rcuprer ces donnes pour ventuellement y rpondre &ependant en offrant l*utilisateur d*envoyer des donnes vers le serveur, on lui offre aussi la possibilit d*envoyer des virus D ;n certain nombre de prcautions sont donc ncessaires pour bien grer certains caract(res spciau! accentus ou autres, les caract(res spciau! du code #tml,

pour emp4c#er un utilisateur d*envoyer du code malveillant dans un c#amp te!te, pour scuriser les failles d"in)ection de #eaders de mail, etc

X 10!10!1 .aractHres spcia#: : #rlencode@ #rldecode

.vant toutes c#oses il faut prciser que certains caract(res spciau! accentus ou autres poseraient probl(me parce qu*ils ne peuvent pas 4tre transmis par l*url =mt#ode get? #rlencode prend en c$ar%e les caractHres spcia#:
<?php /* urlencode prend en charge les caract=res spciau% */ $nom = urlencode("Vernbt")! $prenom = urlencode("\ilbert")! $email = urlencode ("mon'adresse[monhebergeur'#r")! ?$

2nsuite, bien s_r, il faudra dcoder ces caract(res au moment de la rcupration des donnes +
<?php $nom = urldecode($)\-,F"nom"G)! ?$

X 10!10!' Sc#rit des c$amps te:te : $tmlentities

Si on envoyait tel quel dans un c#amp te!te certains caract(res spciau! du code #tml tels que les dlimiteurs de balises `ECH* les `T*, etc , ils seraient interprts et non pas affic#s par le navigateur De m4me, pour emp4c#er un utilisateur d*envoyer du code malveillant dans un c#amp te!te il faut le rendre inoprant grace la fonction `$tmlentities* de PHP Sn crit alors +
<?php $np = htmlentities ($)V*S,FcnomLG)! echo "Hotre nom est $np <br /$"! ?$

X 10!10!- Sc#rit des c$amps te:te : ,ailles d*in8ection de $eaders de mail

D(s qu*on laisse l*utilisateur la possibilit de remplir un c#amp te!te quelconque, la ,onction mailFG peut 4tre dtourne par des spammeurs ou #acbers des fins malveillantes + pour envoyer par e!emple un mail anonyme, ou pour une arnaque quelconque

$e probl(me se pose si l"utilisateur peut c#oisir le contenu du su)et du mail, son message, l"e!pditeur ou le destinataire 2n introduisant des sauts de lignes ou des retours c#ariot il peut facilement a)outer des #eaders supplmentaires telles que &c, >cc, &ontent%8ype contenant du code malveillant =#tml ou autre? De m4me les #eaders 8o, Sub)ect, peuvent 4tre dfinis deu! fois dans le m4me but $e dtail est e!pos sur le site + #ttp+PPwww p#psecure infoPv9ParticlePMailHeaders3n)ect p#p Pour scuriser ces failles d"in)ection de #eaders de mail, une ide parmi d*autres serait d"a)outer, apr(s la ligne +
$nom=$)V*S,F"nom"G!

le code suivant +
i# (preg_match("/\r/i".$nom) dd preg)match("/\n/i".$nom)) I die("+i retour ; la ligne ni en dbut de ligne. champ nom 4 (")! O

$e script est stopp grace la fonction die=? si Knom contient ,cr, =le retour en dbut de ligne? ou ,cn, =le saut de ligne ou ,&arriage 5eturn,? ou la combinaison des deu! $e filtre vrifie tout ceci car il n"y a aucune autre raison que le piratage pour qu*ils soient utiliss Uote + nous utilisons pregJmatc#=? et non plus eregi=?, en effet il ne faut plus utiliser la fonction ere%iFG qui est 4)S40ETE depuis PHP - N :

10!11 0es ,orm#laires

X 10!11!1 .ration d9#n ,orm#laire en HTM0 : I,ormJKIL,ormJ

;n formulaire est dlimit par la balise I,ormJ !!! IL,ormJ $a balise form doit contenir un certain nombre de param(tres +

X 10!11!' 4M ont les donnes : action

% action indique vers quelle page iront les donnes entres par l*utilisateur apr(s action du bouton envoi 2n principe on a %nralement de#: pa%es + une pour le ,orm#laire remplir et une autre qui rc#pHre les donnes envoyes par votre visiteur Eform actionO,receptionJdonnees p#p,H

X 10!11!- Transmission des donnes : mt$ode 7ET

% met$od indique comment les donnes entres par l*utilisateur sont transmises % met#odO,7ET, est la mt#ode la plus simple + les donnes sont transmises par l";5$ avec une limite de 9-- caract(res et avec l*inconvnient de transmettre les mots de passe en clair, donc pas terrible au point de vue scurit 7? Pour transmettre les donnes, on peut utiliser indiffremment soit un ,orm#laire I,ormJ, comme ceci + E,orm actionO,receptionJdonnees p#p, met$odO,128, H 9? soit crire directement toutes les variables dans un simple lien Ia $re,N* !!! *J construit la main comme cela + Ea $re,O"receptionJdonnees p#pFnomOPernotTprenomO1ilbertTemailOg pernot R/:aliceadsl fr"H$ienEPaH Dans les deu! cas, les variables transmises seront rcupres e!actement de la m4me faXon, dans la variable s#per+%lobale 3S7ET 0a pa%e de ,orm#laire d9en oi : =9/Jurl%get p#p?
<?php $nom = urlencode("Vernbt")! $prenom = urlencode("\ilbert")! $email = urlencode ("mon'adresse[monhebergeur'#r")! /* urlencode prend en charge les caract=res spciau% */ ?$ Vour en o1er des ariables a ec la mthode \-, ous pou eJ utiliser un #ormulaire comme ci5dessous.<br$ -ntreJ otre nom. otre prnom et otre email 4 <#orm action="98)script'php" method="get"$ <input t1pe="te%t" name="nom" alue="<?php echo "$nom"!?$"$ <_55 alue est la aleur par d#aut (#acultati#) //55$ <input t1pe="te%t" name="prenom" alue="<?php echo "$prenom"!?$"$ <input t1pe="te%t" name="email" alue="<?php echo "$email"!?$"$

<br$<input t1pe="submit" </#orm$

alue=" alider"$

Sinon vous pouvez envoyer les variables avec un lien comme ci%dessous, X marc#era e!actement de la m4me faXon au moment de rcuprer les donnes
<?php $lien = "98)script'php?nom=$nomaprenom=$prenomaemail=$email"! echo "<a hre#='$lien'$Nien</a$<br$"! /* &##iche le Nien */ echo "$lien"! /* &##iche 98)script'php?nom=VernYU8taprenom=\ilbertaemail=gilbert'pernot Y<0aliceadsl'#r */ ?$

Et la pa%e de rc#pration des donnes : =9-Jscript p#p?


<?php echo "Vage de rcupration des donnes 4<br$<br$"! $nom = urldecode($_GET["nom"])! echo "+om = $nom <br$"! $prenom = urldecode($)\-,F"prenom"G)! echo "Vrnom = $prenom <br$"! $email = urldecode($)\-,F"email"G)! echo "email = $email <br$"! ?$

X 10!11!/ Transmission des donnes : mt$ode P4ST

% met#odO,P4ST, + $es donnes sont transmises dans les variables super%globales que PHP peut rcuprer dans la page dfinie dans action &ette mt#ode est tr(s bien pour transmettre des donnes confidentielles =mot de passe?, des fic#iers de grande taille, etc E#tmlH Eform actionO,receptionJdonnees p#p, met$odNOpostO H EP#tmlH 0a pa%e de ,orm#laire d9en oi : =9\Jmet#%post p#p?
<html$ <bod1$ <#orm action="9>)script'php" method="post" $ <input t1pe="te%t" name="nom"$ <input t1pe="submit" name="Submit" alue="-n o1er"$

</#orm$ </bod1$ </html$

Et la pa%e de rc#pration des donnes : =9]Jscript p#p? Si on a input typeO,te!t, nameO,nom, on rcup(re 3SP4STUOnomOV
<html$ <bod1$ <?php echo "Vage de rcupration des donnes 4<br$<br$"! $nom = urldecode($)V*S,F"nom"G)! /* Si on a input t1pe="te%t" name="nom" on rcup=re $)V*S,F"nom"G */ echo "Hotre nom est $nom <br$"! ?$ </bod1$ </html$

X 10!11!1 .omment entrer les donnes dans le ,orm#laire : balise Iinp#tJ

Sn utilise la balise Iinp#tJ 2!emple + Einput typeO,submit, nameO,Submit, valueO,2nvoyer,H Synta:e %nrale : Einput typeO,1enreDe&ontrole, nameO,UomDu&ontrole, valueO,BaleurDu&ontrole, styleO,$ongueur+WWG Hauteur+WWG &ouleur+WWG WW+dd , disabled accessbeyO;ne$ettreD.ccesH 8ous les param(tres sont optionnels, mais les N premiers param(tres type, name et al#e, sont peu pr(s indispensables pour une bonne gestion du contr@le Tablea# des paramHtres : E:plication &"est un mot rserv qui dtermine s"il s"agit d"une case coc#er, d"un bouton ou autre b#tton + Simple bouton te:t + eone de saisie simple password + eone de mot de passe =III? ,ile + eone de rcupration de fic#ier c$ecDbo: + &ase coc#er E:emple Einput typeO,button,H

Htre

2is#alisatio

De&ontrole

u&ontrole

Du&ontrole

radio + >outon 5adio s#bmit + 2nvoi de formulaire reset + 5emise : de tous les contr@les d"un formulaire ;n nom parlant que l"on pourra rutiliser en MavaScript Sn peut normaliser les noms des contr@les de la mani(re suivante + )#tton + >D&Uom>outonDe&ommande te:t + 8W8UomeoneDe8e!te password + P6DUomeoneMotDePasse =Password? ,ile + <3$UomeoneDe<ic#ier c$ecDbo: + &.&Uom&ase.&oc#er radio + >85Uom>outon5adio s#bmit + S;>Uom>outonSubmit reset + 52SUom>outon5eset $e contenu du contr@le 2n cas de case coc#er ou de bouton radio, ce nom ne sera pas visible, par contre, pour les boutons ou les zones d"dition, BaleurDu&ontrole apparait sur le contr@le

Einput typeO,button, nameO,>D&Balider,H

Einput typeO,button, nameO,>D&Balider, al#eO,&liquez sur moi,H 2!emple d*un bouton de ]/ pi!els de large sur NN de #aut Einput typeO,button, styleNOwidt$+ ]/p!G $ei%$t+ NNp!,H .utre e!emple, un bouton dont le fond est )aune + Einput typeO,button, styleO ,bacD%ro#nd+color+ yellow,H 2t avec une police de caract(res e!tra%large + Einput typeO,button, styleO,,ont+siQe+ !%large, valueOtestH Einput typeO,button, disabled valueO,8est,H

Permet de dterminer la largeur et la #auteur du contr@le, mais aussi d"autres c#oses, comme par e!emple la couleur de fond ou des caract(res $es diffrents param(tres de style sont installs entre guillemets, c#aque fois spars par un point%virgule

ey

;ne autre proprit titre d"e!emple + disabled dsactive le contr@le Dans l"e!emple, al#e est place droite de disabled pour montrer que l"ordre des param(tres n"a pas d"importance ;ne autre proprit qui permet cette fois d"accder au contr@le avec A0TQ la lettre convenue

Einput typeO,button, accessDeyO,t,H Alt+t mettra le focus sur ce bouton

X 10!11!? 0es bo#tons : inp#t typeNOb#ttonO

% type % Pour obtenir un bouton, il est ncessaire de prciser le type comme ceci + Einput typeO,button,H Boici le rsultat + % al#e % Pour crire q#elq#e c$ose s#r ce bo#ton, il faut prciser l*attribut value + Einput typeO,button, al#eO,&liquez sur moi,H Boici le rsultat + % name % $"attribut name permet de donner #n nom R ce bo#ton + Einput typeO,button, valueO,&liquez sur moi, nameO,$e>outon,H % style % $"attribut style permet de dimensionner le bouton + Einput typeO,button, styleO,widt#+ 7^:p!G #eig#t+ -:p!,H $e voici +

X 10!11!A Des bo#tons %rap$iq#es

Sn peut tout fait remplacer les boutons standards par une ima%e %rap$iq#e Einput typeNOima%eO nameO,img, srcO,imagesPlogo gif, altO,logo, H

X 10!11!B Pone de saisie de te:te : inp#t typeNOte:tO

0e ,orm#laire + =9^JSaisie8e!te?
<html$ <bod1$ <#orm action="97)script'php" method="post" $ RemplisseJ les cases ci5dessous 4<br$<br$ <input type "te!t" name="champ/" alue="-ntreJ otre nom ici"$<br$ <_55 alue="-ntreJ otre nom ici" est la aleur par d#aut //55$ <input t1pe="submit" name="Submit" alue="Soumettre la reKuTte"$ </#orm$ </bod1$ </html$

Boici quoi ressemble ce formulaire + Pa%e de rc#pration des donnes + =9^Jscript p#p?
<html$ <bod1$ <?php echo "Vage de rcupration des donnes 4<br$<br$"! $nom = ($)V*S,F"champ/"G)! $nom = htmlentities($nom. -+,)DE*,-S)! /* htmlentities con ertit les caract=res spciau% tels Kue (<) ($) et (a) en (<) ($) et (a) de sorte KuLils soient a##ichs. et non interprts. par le na igateur' E"T_#$%TE& rend les guillemets et les apostrophes lisibles par le na igateur */ echo "Hotre nom est $nom <br$"! ?$ </bod1$ </html$

2t voici le rsultat +

X 10!11!E .$amps po#r mots de passe : inp#t typeNOpasswordO

Einput typeO,password, nameO,motJdeJpasse, sizeO,^, H $e mot de passe restera cac#, mais attention, il ne faut pas utiliser de valeur par dfaut =value? ou faire transiter ce mot de passe par la mt#ode 128, sinon il redeviendrait visible

X 10!11!10 .$amps cac$s : inp#t typeNO$iddenO

Einput typeO,$idden, nameO,identifiant, valueO,\9, H

$e c#amp cac# sert envoyer une valeur l*insu de l*utilisateur, et sans qu*il puisse la modifier $es c#amps cac#s sont utiles pour stocber des donnes dans les formulaires en plusieurs pages, ils permettent de n*effectuer le traitement qu* la toute derni(re page, et ce, pour viter des donnes incompl(tes ou inco#rentes

X 10!11!11 Taille de la saisie et d# te:te : siQe@ ma:len%t$@ Ite:tareaJKILte:tareaJ

Taille dynamiq#e de la Qone de saisie + avec l*attribut siQe


<?php $t = '+ombre d'articles disponibles en stocA 4'! /* en gnral ce titre est rcupr dans une base de donnes */ $s = strlen($t) ! /* strlen dtermine la longueur de la cha`ne */ echo '<input t1pe="te%t" name="t" alue=" ' '$t' ' " siJe=" ' '$s' ' "$' ! /* ce Kui permet dLadapter d1namiKuement la taille de la boite de saisie */ ?$

0a taille d# te:te + la limiter avec l*attribut ma:len%t$ Einput typeO,te!t, nameO,login, ma:len%t$O,^, valueO,eda,HEbrH .ttention l*attribut ma!lengt# n*emp4c#era pas un #acber d*envoyer une donne trop longue + il faut donc contr@ler la taille dans nos scripts de gestion "ne %rande Qone de te:te + avec les balises Ite:tareaJ !!! ILte:tareaJ 0e ,orm#laire + =N:JSaisie1rand8e!te p#p?
<html$ <bod1$ <#orm action="B0)script'php" method="post" $<p$ Contenu de l'article 4<br$<br$ <te!tarea name="te%te)long" roXs="/0" cols="80"$ Haleur par d#aut entuelle </te!tarea$<br$ <input t1pe="submit" name="Submit" alue="Soumettre la reKuTte"$ </p$</#orm$ </bod1$ </html$

Boici quoi ressemble ce formulaire +

Pa%e de rc#pration des donnes + =N:Jscript p#p?


<html$ <bod1$ <?php echo "Vage de rcupration des donnes 4<br$<br$"! $nom = ($)V*S,F"te%te)long"G)! $nom = htmlentities($nom. -+,)DE*,-S)! /* htmlentities con ertit les caract=res spciau% tels Kue (<) ($) et (a) en (<) ($) et (a) de sorte KuLils soient a##ichs. et non interprts. par le na igateur' E"T_#$%TE& rend les guillemets et les apostrophes lisibles par le na igateur */ echo "Hotre article donne ceci 4 <br$ $nom"! $t%t = nl9br($)V*S,F"te%te)long"G)! $t%t = htmlentities($t%t. -+,)DE*,-S)! echo "<br$<br$& ec les sauts de ligne pour a##ichage e:,(N 4 <br$ $t%t"! $nl = arra1("]r]n"."]r"."]n")! $t%t9 = str)replace($nl. "<br$]n". $)V*S,F"te%te)long"G)! $t%t9 = htmlentities($t%t9. -+,)DE*,-S)! echo "<br$<br$-t a ec les sauts de ligne pour a##ichage :,(N 4 <br$ $t%t9"! ?$ </bod1$ </html$

2t voici le rsultat +

X 10!11!1' .ases R coc$er : inp#t typeNOc$ecDbo:O

$a case coc#er permet de c#oisir :, 7, 9 ou plusieurs options parmi une srie de propositions . prsent c*est vous%m4mes qui dfinissez les rponses possibles 0e ,orm#laire + =N7Jcaseacoc#er p#p?
<html$ <bod1$ <#orm action="B/)script'php" method="post" $<p$ SlectionneJ les Kuipements Kue ous possdeJ d3; 4<br$<br$ <input t1pe="checAbo%" name="Kcm/" alue="3Lai un ordinateur" checAed$En ordinateur<br$ <_55 Vour la case ; cocher le t1pe="checAbo%" //55$ <_55 Na aleur dLune case est "on" si elle est coche sinon il nL1 a aucune aleur comme si la case nLtait pas prsente //55$ <_55 checAed eut dire Kue. par d#aut. la case est coche //55$ <input t1pe="checAbo%" name="Kcm9" alue="3Lai internet &PSN"$Ene conne%ion internet &PSN<br$ <input t1pe="checAbo%" name="KcmB" alue="3Lai une C2"$En mo1en de paiement en ligne. C2. etc<br$ <input t1pe="submit" name="Submit" alue="Soumettre la reKuTte"$ </p$</#orm$ </bod1$ </html$

Boici quoi ressemble ce formulaire +

Pa%e de rc#pration des donnes + =N7Jscript p#p? Suivant que la case est coc#e ou non, le c#amp `qcm7* renvoie dans la variable KJPSS8 la valeur de value `MeSuisMembre* ou rien du tout
<html$ <bod1$ <?php echo "Vage de rcupration des donnes 4<br$<br$"! i# (isset($)V*S,F"Kcm/"G)) /* la case est coche */ $Kcm/ = $)V*S,F"Kcm/"G! else $Kcm/ = "Ce n'ai pas d'ordinateur"! i# (isset($)V*S,F"Kcm9"G)) $Kcm9 = $)V*S,F"Kcm9"G! else $Kcm9 = "Ce n'ai pas de conne%ion internet &PSN"! i# (isset($)V*S,F"KcmB"G)) $KcmB = $)V*S,F"KcmB"G! else $KcmB = "Ce n'ai pas de mo1en de paiement en ligne. C2. etc"! /* Ene case ; cocher ne pose pas de probl=me de scurit. la #onction chtmlentitiesL est donc inutile */ echo "Duestion / $Kcm/ <br$"! echo "Duestion 9 $Kcm9 <br$"! echo "Duestion B $KcmB <br$"! ?$ </bod1$ </html$

2t voici le rsultat +

X 10!11!1- )o#tons radio : inp#t typeNOradioO

$es boutons radio fonctionnent e!actement de la m4me mani(re que les cases coc#er, la seule diffrence c*est qu*ils ne permettent qu*un seul c#oi! =pour les boutons radio ayant le m4me nom? 0e ,orm#laire + =N9Jboutonsradio p#p?
<html$ <bod1$ <#orm action="B9)script'php" method="post" $<p$ Hous Ttes 4 <br$ <input t1pe="radio" name="etatci il" alue="(arie" checAed$(ari(e) <br$ <input t1pe="radio" name="etatci il" alue="Celibataire"$Clibataire <br$ <input t1pe="radio" name="etatci il" alue="Pi orce"$Pi orc(e) <br$ <input t1pe="submit" name="Halider" alue="Halider"$ </p$</#orm$ </bod1$ </html$

Pa%e de rc#pration des donnes + =N9Jscript p#p?


<html$ <bod1$ <?php echo "Vage de rcupration des donnes 4<br$<br$"! $etatci il = $)V*S,F"etatci il"G! /* En bouton radio ne pose pas de probl=me de scurit. la #onction chtmlentitiesL est donc inutile */ sXitch ($etatci il) I case "(arie" 4 $etatci il = "(ari(e)"! breaA ! case "Celibataire" 4 $etatci il = "Clibataire"! breaA ! case "Pi orce" 4 $etatci il = "Pi orc(e)"! breaA ! O ! echo "Hous Ttes 4 $etatci il <br$"! ?$ </bod1$

</html$

X 10!11!1/ 0iste de slection dro#lante : IselectJKILselectJ

2lle permet de faire un c#oi! dans une liste d*lments affic#s 0e ,orm#laire + =NNJlistederoulante p#p?
<html$ <bod1$ <#orm action="BB)script'php" method="post" $<p$ Hotre salaire mensuel 4 slectionneJ et en o1eJ <br$ <select name="salaire" siJe="B"$ <_55 siJe="B" permet d'a##icher B lignes de la liste droulante //55$ <_55si siJe est omis ou si siJe="/" nous nLa##icherons KuLune ligne de la liste //55$ <option alue="/"$(oins de /000 ^ </option$ <option alue="9" selected$-ntre /000 et 9000 ^ </option$ <_55 selected eut dire Kue ceci est le choi% par d#aut //55$ <_55 pour cocher d1namiKuement l'option. nous pou ons remplacer "selected" par un code php comme ceci.//55$ <?php/* i# ($selection == 9) echo 'selected'! */?$ <option alue="B"$-ntre 9000 et <000 ^ </option$ <option alue="<"$Vlus de <000 ^ </option$ </select$ <input t1pe="submit" name="Submit" alue="-n o1er" $ </p$</#orm$ </bod1$ </html$

Boici quoi ressemble ce formulaire avec sizeO,N,+

Si size n*est pas prcise ou si sizeO,7,nous n*aurons qu*une ligne de la liste affic#e +

Pa%e de rc#pration des donnes + =NNJscript p#p?


<html$ <bod1$ <?php echo "Vage de rcupration des donnes $salaire = $)V*S,F"salaire"G! /* Ene liste droulante ne pose pas de chtmlentitiesL est donc inutile */ sXitch ($salaire) I case "/" 4 $salaire = "moins de /000 ^"! breaA ! case "9" 4 $salaire = "entre /000 et 9000 breaA ! case "B" 4 $salaire = "entre 9000 et <000 breaA ! case "<" 4 $salaire = "plus de <000 ^"! breaA ! O ! ?$ </bod1$ </html$

4<br$<br$"! probl=me de scurit. la #onction

^"! ^"!

echo "Hous gagneJ $salaire par mois <br$"!

X 10!11!11 En oi de ,ic$iers et d9ima%es : inp#t typeNO,ileO

$*administrateur d*un site d*e%commerce, par e!emple, peut tr(s bien envoyer la nouvelle ima%e d*un produit ou un ,ic$ier PDC contenant sa description dtaille Sn utilise pour cela la balise Iinp#t typeNO,ileOJ mais en plus, dans la balise I,ormJ l*attribut enctypeNOm#ltipartL,orm+ dataO nous permet de prciser que les donnes envoyes ne sont pas du te!te

0e ,orm#laire + =N/Jenvoific#iers p#p?


<html$ <bod1$ <form action="B<)script'php" method="post" enctype "multipart'form(data"$<p$ <_55 seule la mthode post est possible pour en o1er des #ichiers //55$ Uormulaire dLen oi de #ichiers et dLimages 4 <br$slectionneJ et en o1eJ <br$ <input type "file" name="#ichier" siJe="<0" $ <input t1pe="submit" alue="-n o1er" $ </p$</#orm$ </bod1$ </html$

Pa%e de rc#pration des donnes + Pour rcuprer le fic#ier on utilise la super globale 3SC<0ESUV de p#p &*est un tableau associatif 9 dimensions + en premier on a le nom de c#amp du formulaire =nameNO,ic$ierO dans notre cas? et en second des informations sur le fic#ier transmis Dans la page de rcupration des donnes il faut aussi sauvegarder ce fic#ier, le traiter, le copier, le redimensionner, etc mo eS#ploadedS,ileFG dplace le fic#ier depuis son emplacement temporaire sur le serveur )usqu* sa destination finale =N/Jscript p#p?
<html$ <bod1$ <?php echo "Vage de rcupration des donnes 4<br$<br$"! set)time)limit("B0")! /* remet le compteur ; Jro et a3oute B0 secondes au temps d3; coul */ ignore)user)abort()! /* Si l'utilisateur arrTte le tlchargement en cours. ou se dconnecte. le script php se terminera Kuand mTme */ $nom)#ichier = $)UWN-SF'#ichier'G F'name'G! /* nom et adresse dLorigine du #ichier sur le disKue utilisateur */ $taille = $)UWN-SF'#ichier'G F'siJe'G! /* taille du #ichier en octets */ $tmp = $)UWN-SF'#ichier'G F'tmp)name'G! /* nom et adresse du #ichier temporaire sur le ser eur (#ichier dtruit ; la #in du script) */ $t1pe = $)UWN-SF'#ichier'G F't1pe'G! /* t1pe mime du #ichier */ $erreur = $)UWN-SF'#ichier'G F'error'G! /* code dLerreur associ au tlchargement */ echo echo echo echo echo "+om dLorigine =$ $nom)#ichier <br$"! ",aille =$ $taille octets <br$"! "&dresse temporaire sur le ser eur =$ $tmp <br$"! ",1pe de #ichier =$ $t1pe <br$"! "Code erreur =$ $erreur' <br$"!

$adresse)destination = ''/pict/''$nom)#ichier! mo e)uploaded)#ile($tmp. $adresse)destination)! /* $tmp = on prend le #ichier temporaire sur le ser eur (le #ichier est dtruit ; la #in du script) */ /* $adresse_destination = c'est l; of le #ichier sera sau egard sur le ser eur. ici le rpertoire XXX/pict/ */ /* dans $adresse)destination on a conser le nom du #ichier dLorigine 4 bien entendu il #aut grer et changer ce nom pour iter Kue deu% utilisateurs en oient deu% #ichiers di##rents portant le mTme nom' Wl con ient aussi de ri#ier Kue lLe%tension du #ichier est celle Kui est attendue */ echo "&dresse destination =$ $adresse)destination<br$<br$"! /* Ptection dLerreurs */ i# ($erreur = $)UWN-SF'#ichier'G F'error'G) I echo "Ene erreur sLest produite<br$" ! i# ($erreur == EVN*&P)-RR)W+W)SWg-) echo "Uichier plus gros Kue le ma%imum autoris par V:V<br$" ! elsei# ($erreur == EVN*&P)-RR)U*R()SWg-) echo "Uichier plus gros KuLindiKu dans le #ormulaire<br$" ! elsei# ($erreur == EVN*&P)-RR)V&R,W&N) echo ",lchargement interrompu a ant la #in. merci de ressa1er<br$" ! elsei# ($erreur == EVN*&P)-RR)+*)UWN-) echo "&ucun #ichier nLa t tlcharg<br$" ! O else echo "<b$,lchargement du #ichier russi _</b$" ! ?$ </bod1$ </html$

X 10!11!1? "ne calc#latrice

=N\Jcalculatrice p#p?
<?php // rcupration des ariables echo '<pre$'! /* print)r($)V*S,)! */ i# (isset($)V*S,F"nnb/"G)) I echo '</pre$'! $nnb/ = $)V*S,F'nnb/'G! $op = $)V*S,F'op'G! $nnb9 = $)V*S,F'nnb9'G! i#(_empt1($nnb/) aa _empt1($nnb9) )I sXitch($op) I case "plus"4 $resultat=$nnb/R$nnb9! $ope = "R"! $sel/ = 'selected'!

breaA! case "moins"4 $resultat=$nnb/5$nnb9! $ope = "5"! $sel9 = 'selected'! breaA! case "mult"4 $resultat=$nnb/*$nnb9! $ope = "*"! $selB = 'selected'! breaA! case "di "4 $ope = "/"! $resultat=$nnb//$nnb9! $sel< = 'selected'! breaA! O echo 'Rsultat 4 ''$nnb/'' ''$ope'' ''$nnb9'' = ''$resultat''<br$<br$'! echo '&utre opration ?<br$<br$'! /* */ O else I // S'il 1 a des champs ides echo 'merci de remplir les champs nombres et de choisir un operateur'! O O ?$ <html$ <bod1$ <#orm action="B@)calculatrice'php" method="post"$ <input t1pe="te%t" name="nnb/" alue=""$oprande <select name="op"$ <option selected alue="plus"$R</option$ <option selected alue="moins"$5</option$ <option selected alue="mult"$*</option$ <option selected alue="di "$/</option$ </select$oprateur <input t1pe="te%t" name="nnb9" alue=""$9<sup$e</sup$ oprande <input t1pe="submit" alue="Calculer"$ </#orm$ </bod1$ </html$

10!1' Corm#laires d9en oi de mails

X 10!1'!1 "n en oi de mail to#t simple

Me n*ai pas russi le faire fonctionner en local sur ma mac#ine 6indows, mais il marc#e tr(s bien quand )e le mets sur le serveur de mon #bergeur =N-JformJmail7 p#p?
<?php /* adresse de l'e!pditeur ci5dessous */ $headers ='Urom4 "nom"<mon'adresse[monhebergeur'#r$''"]n"! $headers '='Repl15,o4 mon'adresse[monhebergeur'#r''"]n"! $headers '='Content5,1pe4 te%t/plain! charset="iso5778?5/"''"]n"! $headers '='Content5,rans#er5-ncoding4 7bit'! $message ='En message de test ici'! /* adresse du destinataire ci5dessous */ i#(mail('mon'adresse[monhebergeur'#r'. 'Su3et'. $message. $headers)) I echo 'Ne message a bien t en o1'! O else I echo 'Ne message n]'a pas pu Ttre en o1'! O

?$

X 10!1'!' "n en oi de mail q#i rc#pHre les donnes d9#n ,orm#laire

=N-JformJmail9 p#p?
<?php $nom = ""! $prenom = ""! $tel = ""! $mail = ""! $sub3ect = ""! $message = ""! $msg)nom = ""! $msg)mail = ""! i#($)V*S,)I //Rcupration des donnes du #ormulaire5555555555555555555555555555 $nom = $)V*S,F"nom"G! $prenom = $)V*S,F"prenom"G! $tel = $)V*S,F"tel"G! $mail = $)V*S,F"mail"G! $sub3ect = $)V*S,F"sub3ect"G! //555555555555555555555555555555555555555555555555555555555555555555 $destinataire = "mon'adresse[monhebergeur'#r"! $e%pediteur = $mail! $message '= $)V*S,F'nom'G'"]n"! $message '= $)V*S,F'prenom'G'"]n"!

$message '= $)V*S,F'tel'G'"]n"! $message '= $)V*S,F'mail'G'"]n"! $message '= $)V*S,F'message'G'"]n"! /* adresse de l'e%pditeur ci5dessous c'est ; dire le Site Qeb */ /* $headers ='Urom4 "SiteQeb"<mon'adresse[monhebergeur'#r$''"]n"! */ $headers ='Urom4 "SiteQeb"<mon'adresse[monhebergeur'#r$''"]n"! $headers '='Repl15,o4 mon'adresse[monhebergeur'#r''"]n"! $headers '='Content5,1pe4 te%t/plain! charset="iso5778?5/"''"]n"! $headers '='Content5,rans#er5-ncoding4 7bit'! /* adresse du destinataire ci5dessous */ i#(mail($destinataire. $sub3ect. $message. $headers)) I echo 'Ne message a bien t en o1'! O else I echo 'Ne message n]'a pas pu Ttre en o1'! O O ?$ <#orm name="#orm)mail" method="post" action="B8)#orm)mail9'php"$ <table$ <tr$ <td colspan="9"$<span st1le="color4 red"$( * 4 Champs obligatoires ) </span$</td$ </tr$ <tr$ <td $+om <span st1le="color4 red"$*</span$ 4 </td$ <td$<input name="nom" t1pe="te%t" alue="<?php print $nom! ?$"$ <?php echo $msg)nom! ?$ </td$ </tr$ <tr$ <td$Vrnom 4</td$ <td$<input name="prenom" t1pe="te%t" alue="<?php print $prenom! ? $"$</td$ </tr$ <tr$ <td$,el 4</td$ <td$<input name="tel" t1pe="te%t" alue="<?php print $tel! ?$"$</td$ </tr$ <tr$ <td$-mail <span st1le="color4 red"$*</span$ 4</td$ <td$<input name="mail" t1pe="te%t" alue="<?php print $mail! ?$"$<?php echo $msg)mail! ?$!</td$ </tr$ <tr$ <td $Su3et du message 4</td$ <td$<te%tarea name="sub3ect" roXs="/" $<?php print $sub3ect! ? $</te%tarea$</td$ </tr$ <tr$ <td $,e%te du message 4</td$ <td$<te%tarea name="message" roXs="8" $<?php print $message! ? $</te%tarea$</td$ </tr$ <tr$

<td$ </td$ <td$ <input name=" eri#" t1pe="submit" alue="Halider"$ <input name="e##acer" t1pe="reset" alue="-##acer"$ </td$ </tr$ </table$ </#orm$

X 10!1'!- "n en oi de mail complet q#i teste la alidit des c$amps

=N-JformJmailN p#p?
<?php // Hri#ie la s1nta%e d'une adresse mail #unction is)email($email) I return preg)match('/hFh[GR[Fa5J&5g05?')5GR]'Fa5J&5gGR$/'. $email)! O /* preg)match($pattern. $email)! */ /* &nal1se email pour trou er l'e%pression Kui correspond ; pattern */ /* return retourne ,RE- si rai */ /* oir dans http4//php'net/manual/#r/#unction'preg5match'php */ /* -%emple preg)match("/[/i". $email)! ri#ie si $email contient un [ */ /* Si on prend le mod=le username[domain'tld */ /* Se lit de la #aMon sui ante */ /* username4 au moins / caract=re Kui ne soit pas un [ */ /* domain4 au moins / caract=re et Kui ne contienne Kue des caract=res alides' */ /* tld4 au moins / caract=re. alphabtiKue seulement (ce n'est pas tout ; #ait sSr Kue les nou elles con entions Kue ,NP permettront ne ncessitent pas d'largir ; d'autres caract=res Kue les alphanumriKues)' */ $nom = ""! $prenom = ""! $tel = ""! $mail = ""! $sub3ect = ""! $message = ""! $msg)nom = ""! $msg)prenom = ""! $msg)mail = ""! $msg)message = ""! i#($)V*S,)I //Rcupration des donnes du #ormulaire5555555555555555555555555555 $nom = $)V*S,F"nom"G!

$prenom = $)V*S,F"prenom"G! $tel = $)V*S,F"tel"G! $mail = $)V*S,F"mail"G! $sub3ect = $)V*S,F"sub3ect"G! $message = $)V*S,F"message"G! i# (preg)match("/]r/i".$nom) dd preg)match("/]n/i".$nom)) I die("+i retour ; la ligne ni en dbut de ligne. champ nom 4 (")! /* le script est stopp grice ; une #onction die() si l'e%pediteur contient "]r" ou "]n"' "]n" "]n" c'est le saut ; la ligne. et "]r" correspond ; CR "Carriage Return". le retour en dbut de ligne'*/ O i# (preg)match("/]r/i".$prenom) dd preg)match("/]n/i".$prenom)) I die("+i retour ; la ligne ni en dbut de ligne. champ prenom 4 (")! O i# (preg)match("/]r/i".$tel) dd preg)match("/]n/i".$tel)) I die("+i retour ; la ligne ni en dbut de ligne. champ tl 4 (")! O i# (preg)match("/]r/i".$mail) dd preg)match("/]n/i".$mail)) I die("+i retour ; la ligne ni en dbut de ligne. champ mail 4 (")! O i# (preg)match("/]r/i".$sub3ect) dd preg)match("/]n/i".$sub3ect)) I die("+i retour ; la ligne ni en dbut de ligne. champ sub3ect 4 (")! O //555555555555555555555555555555555555555555555555555555555555555555 //\estion des erreurs de saisie5555555555555555555555555555555555555 /*Hri#ier la alidit des champs du #ormulaire */ $ alide)#orm = ,RE-! i# ( $)V*S,F' eri#'G ) // le #ormulaire doit etre ri#i I i# ( _$)V*S,F'nom'G) // le nom n'est pas renseign I $msg)nom = '<span st1le="color4 red"$HeuilleJ entreJ otre nom ici</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'prenom'G) // le prnom n'est pas renseign I $msg)prenom = '<span st1le="color4 red"$HeuilleJ entreJ otre prenom ici</span$<br$'! $ alide)#orm = U&NS-! O i# ( _is)email($)V*S,F'mail'G) ) // le mail n'est pas correct I $msg)mail = '<span st1le="color4 red"$HeuilleJ ri#ier otre adresse mail ici</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'message'G) // il n'1 a aucun message I

entreJ

$msg)message = '<span st1le="color4 red"$HeuilleJ otre message ici</span$<br$'! $ alide)#orm = U&NS-! O O

//555555555555555555555555555555555555555555555555555555555555555555 i# ( $)V*S,F' eri#'G aa $ alide)#orm === ,RE- ) I // Cration du message a ec les donnes du #ormulaire $message = $)V*S,F'nom'G'"]n"! $message '= $)V*S,F'prenom'G'"]n"! $message '= $)V*S,F'tel'G'"]n"! $message '= $)V*S,F'mail'G'"]n"! $message '= $)V*S,F"sub3ect"G! $message '= $)V*S,F'message'G'"]n"! // Cration des entTtes /* adresse de l'e!pditeur ci5dessous c'est ; dire le Site Qeb*/ $headers ='Urom4 "SiteQeb"<mon'adresse[monhebergeur'#r$''"]n"! $headers '='Repl15,o4 mon'adresse[monhebergeur'#r''"]n"! $headers '= '(W(-5Hersion4 /'0' ' "]n"! $headers '='Content5,1pe4 te%t/plain! charset="iso5778?5 /"''"]n"! /* $headers '= 'Content5t1pe4 te%t/html! charset=iso5778?5/' ' "]n"! */ $headers '='Content5,rans#er5-ncoding4 7bit'! /* adresse du destinataire ci5dessous*/ $destinataire = "mon'adresse[monhebergeur'#r"! // en oi du mail $resultat = mail($destinataire. $sub3ect. $message. $headers)! i#($resultat) I echo "<hB$Ne message a bien t en o1</hB$"! /* Redirige le client ers la page sui ante */ /* header("Nocation4 B8)#orm)mail)suite9'php?nom="' $nom)! +ote 4 header ne marche Kue si les entTtes nLont pas t d3; en o1es */ /* Var contre M;. M; marche ; tous les coups 4 */ /* echo "<a hre#=]"B8)#orm)mail)suite9'php]" title=]"Retour ; la page d'accueil]"$ <hB$CliKueJ ici pour re enir ; l'accueil</hB$</a$<br$"!*/ /* &utre solution plus "lgante" ''' */ $nom = urlencode($nom)! $prenom = urlencode($prenom)! /* urlencode prend en charge les caract=res spciau% */ echo "<meta http5eKui ='re#resh' content='9! url=B8)#orm)mail)suite9'php?nom=$nomaprenom=$prenom'$"! /* le B dtermine le nombre de secondes ou l'ancienne page doit rester a##iche ; l'cran' Si ce nombre est gal ; 0. la redirection est instantane'*/ e%it()! O else I

echo "<span st1le='color4 red'$Ne message n'a pas pu Ttre en o1</span$"! O /* \arantie Kue le code ci5dessous n'est 3amais e%cut' e%it()! */ $nom = $)V*S,F'nom'G! $prenom = $)V*S,F'prenom'G! $tel = $)V*S,F'tel'G! $mail = $)V*S,F'mail'G! $sub3ect = $)V*S,F"sub3ect"G! $message = $)V*S,F"message"G! echo "<span st1le='color4 red'$Ne message n'a pas pu Ttre en o1</span$"! O //555555555555555555555555555555555555555555555555555555555555555555 O ?$ <#orm name="#orm)mail" method="post" action="B8)#orm)mailB'php"$ <table$ <tr$ <td colspan="9"$<span st1le="color4 red"$( * 4 Champs obligatoires ) </span$</td$ </tr$ <tr$ <td $+om <span st1le="color4 red"$*</span$ 4 </td$ <td$<input name="nom" t1pe="te%t" alue="<?php print $nom! ?$"$ <?php echo $msg)nom! ?$ </td$ </tr$ <tr$ <td$Vrnom <span st1le="color4 red"$*</span$ 4</td$ <td$<input name="prenom" t1pe="te%t" alue="<?php print $prenom! ?$"$ <?php echo $msg)prenom! ?$ </td$ </tr$ <tr$ <td$,el 4</td$ <td$<input name="tel" t1pe="te%t" alue="<?php print $tel! ?$"$</td$ </tr$ <tr$ <td$-mail <span st1le="color4 red"$*</span$ 4</td$ <td$<input name="mail" t1pe="te%t" alue="<?php print $mail! ?$"$ <?php echo $msg)mail! ?$ </td$ </tr$ <tr$ <td $Su3et du message 4</td$ <td$<te%tarea name="sub3ect" roXs="/" $<?php print $sub3ect! ? $</te%tarea$</td$ </tr$ <tr$ <td $,e%te du message <span st1le="color4 red"$*</span$ 4</td$ <td$<te%tarea name="message" roXs="8" $<?php print $message! ? $</te%tarea$ <?php echo $msg)message! ?$ OelseI

</td$ </tr$ <tr$ <td$ </td$ <td$ <input name=" eri#" t1pe="submit" </td$ </tr$ </table$ </#orm$

alue="-n o1eJ le message"$

Et la pa%e s#r laq#elle on est rediri% =N-JformJmailJsuite9 p#p?


<p$Hotre message a maintenant Ttre trait. nous ous en remercions. <br$ ous alleJ rece oir notre rponse dans les meilleurs dlais'</p$ <?php $nom = urldecode($)\-,F'nom'G)! $prenom = urldecode($)\-,F'prenom'G)! echo '(erci cher(e) '. $prenom. ' '. $nom! ?$

10!1- 0es ,ic$iers

X 10!1-!1 <ncl#re les donnes d9#n ,ic$ier te:te : incl#deFG o# incl#deSonceFG

Pour inclure des fic#iers ou des bibliot#(ques, on peut utiliser l*instruction incl#deFG ou incl#deSonceFG Par e!emple ce peut 4tre un fic#ier &opyrig#t, ou le fic#ier de configuration contenant les param(tres d*acc(s la base de donnes, etc =:NJincludefilecontent p#p? +
<html$ <bod1$ <center$Wnclude #ile content 4 <?php include("0B)cop1right't%t")! ?$ </center$ </bod1$ </html$

et =:NJcopyrig#t t!t? + &opyrig#t f 9:77 PHP <rance 8ous droits rservs A#tre e:emple + fic#ier =:NJaJinclure inc p#p?
<?php echo 'nous habitons *rsa1 dans l]'-ssonne<br$ ' ! ?$

2t le fic#ier principal =:NJaJinclusion p#p?


<?php echo 'Pans Kuelle rgion habiteJ5 ous ? <br$ ' ! include('0B)a)inclure'inc'php') ! echo '*h Kuelle belle rgion _<br$ ' ! ?$

X 10!1-!' 0ect#re d9#n ,ic$ier te:te : ,ileS%etScontentsFG o# ,ileFG

,ileS%etScontentsFG prend en argument le nom et l*adresse du fic#ier et retourne son contenu sous forme d*une c#aAne de caract(res Synta!e +
<?php $contenu)#ichier = #ile)get)contents('mon#ichier't%t') echo $contenu)#ichier! ?$

,ileFG prend en argument le nom et l*adresse du fic#ier et retourne son contenu dans un tableau ligne ligne Synta!e +
<?php $tab = #ile('mon#ichier't%t') ! #oreach($tab as $ligne) I echo $ligne '<br$' ! O ?$

X 10!1-!- 0ect#re d9#n ,ic$ier de con,i%#ration : parseSiniS,ileFG

0e ,ic$ier de con,i%#ration + =/:Jtest ini? G les commentaires commencent par un point virgule G <ic#ier test ini Zte!t[ acceptOI gif,I )pg,I png,I t!t,I log,I mid,I wav,I zip ignoreOI e!e,I com,I bat,I dll,I ini,I vbs,I )s,I #tm,I #tml,I p#p networbO;ndernet commandc#arOP linesepO% timestampOZHH+nn[ t#emeOm35& &lassic Zdirs[ logdirOlogsc 0ect#re d# ,ic$ier de con,i%#ration + =/:J$ecture<ic#ier&onfig? parseSiniS,ileFG prend en argument le nom et l*adresse d*un fic#ier de configuration et retourne son contenu sous forme d*un tableau associatif Synta!e +
<?php /* Necture du #ichier de con#iguration <0)test'ini */ $tab = parse)ini)#ile('<0)test'ini') ! echo 'Uichiers accepts 4 ''$tabF'accept'G' '<br$' ! echo 'Uichiers ignors 4 ''$tabF'ignore'G' '<br$' ! echo '-n rac 4 <br$' ! print)r ($tab) ! /* &utre prsentation */ $tab = parse)ini)#ile('<0)test'ini'.,RE-) ! /* Si le 9e param=tre (optionnel) de parse)ini)#ile est ,RE-. parse)ini)#ile anal1se aussi les sections (mots entre crochets) */ echo '<pre$' ! print)r ($tab) ! echo '</pre$' ! ?$

X 10!1-!/ 0ect#re d9#n ,ic$ier .S2 iss# d9#n table#r : ,%etcs FG

Pour lire un fic#ier &SB =&omma Separated Balues? issu d*un tableur =2!cel ou Spen Sffice?, il faut d*abord l*ouvrir avec fopen=?, puis fgetcsv=? permet de lire une ligne du fic#ier .rguments + ,%etcs =nomJfic#ier, nbma!JcaractJligne, , G,? G 0e ,ic$ier Z!cs + =/7J<ic#ierdetableur csv?
,itre!Vage Vour commencer!B

Ptails de otre installation!B j Kuoi sert le V:V!B 2alises d'ou erture 5 #ermeture!B Commentaires!B Ne point irgule!B &postrophes et guillemets!B Hariables et constantes!< Nes $ ariables!< Nes C*+S,&+,-S!< DuelKues \adgets!< &##icher la date du 3our!< Halidit dLune date saisie!8 ,emps dLe%cution dLun script php!8 Rcuprer mon adresse WV!@ Nes oprateurs!@ Nes oprations!@ "Ne (odulo '$a Y 9 !'"!> *prateurs d'incrmentation!> *prateurs de concatnation!> *prateurs de comparaison!> *prateurs logiKues 4!>

0e ,ic$ier de lect#re d9#n ,ic$ier .S2 + =/7J$ecture<ic#ier&SB p#p?


<?php /* Necture du #ichier </)Uichierdetableur'cs */ $#p = #open('</)Uichierdetableur'cs '. 'aR') ! Xhile ($tab = #getcs ($#p. /000. "!") ) I print)r ($tab) ! O /* &utre prsentation */ echo "<br$"! $roX = / ! $#p = #open('</)Uichierdetableur'cs '. 'r') ! Xhile ($data = #getcs ($#p. /000. "!") ) I $num = count ($data) ! print "<b$$num champs dans la ligne $roX 4</b$<br$]n" ! $roXRR ! #or ($c=0! $c < $num! $cRR) I print $dataF$cG ' "<br$]n" ! O O #close ($#p) ! ?$

X 10!1-!1 Ecrit#re dans #n ,ic$ier : ,ileSp#tScontentsFG

.rguments + ,ileSp#tScontents ="nomJfic#ier t!t", ,c#aAne contenue dans le fic#ier Kvar,, <3$2J.PP2UD? G $a c#aAne est alors crite dans le fic#ier en crasant ce qui pre!istait $*option C<0ESAPPE5D permet d*a)outer ce contenu la fin

X 10!1-!? 4# ert#re d9#n ,ic$ier : ,openFG

,open="nomJadresseJfic#ier t!t", "mode"? G ouvre un fic#ier $e param(tre mode spcifie le type d"acc(s *r* Suvre en lecture seule, et place le pointeur de fic#ier au dbut du fic#ier *r[* Suvre en lecture et criture, et place le pointeur de fic#ier au dbut du fic#ier *w* Suvre en criture seule G place le pointeur de fic#ier au dbut du fic#ier et rduit la taille du fic#ier : Si le fic#ier n"e!iste pas, on tente de le crer *w[* Suvre en lecture et criture G place le pointeur de fic#ier au dbut du fic#ier et rduit la taille du fic#ier : Si le fic#ier n"e!iste pas, on tente de le crer *a* Suvre en criture seule G place le pointeur de fic#ier la fin du fic#ier Si le fic#ier n"e!iste pas, on tente de le crer *a[* Suvre en lecture et criture G place le pointeur de fic#ier la fin du fic#ier Si le fic#ier n"e!iste pas, on tente de le crer *:* &re et ouvre le fic#ier en lecture seule G place le pointeur de fic#ier au dbut du fic#ier Si le fic#ier e!iste d), fopen=? va c#ouer, en retournant <.$S2 et en gnrant une erreur de niveau 2J6.5U3U1 Si le fic#ier n"e!iste pas, fopen=? tente de le crer &e mode est l"quivalent des options SJ2W&$VSJ&52.8 pour l"appel syst(me open=9? sous%)acent &ette option est supporte partir de PHP / N 9 et fonctionne uniquement avec des fic#iers locau! *:[* &re et ouvre le fic#ier pour lecture et critureG le comportement est le m4me que pour "!" *c* Suvre le fic#ier pour criture seulement Si le fic#ier n"e!iste pas, il sera cre, s"il e!iste, il n"est pas tronqu =contrairement "w"? et l"appel la fonction n"c#oue pas =comme dans le cas de "!"? $e pointeur du fic#ier est positionn au dbut &e mode peut 4tre utile pour obtenir un verrou =voyez flocb=?? avant de tenter de modifier le fic#ier, utiliser "w" pourrait tronquer le fic#ier avant d"obtenir le verrou =vous pouvez tou)ours tronquer grace ftruncate=?? *c[* Suvre le fic#ier pour lecture et criture, le comportement est le m4me que pour le mode "c" *b* lorsque vous travaillez avec des fic#iers binaires, sinon vous pourriez rencontrer des probl(mes avec vos donnes, comme des images corrompues ou des caract(res crcn inopins

X 10!1-!A 2erro#illa%e d9#n ,ic$ier : ,locDFG

,locD g Berrouille le fic#ier + un syst(me simple de verrous criturePlecture, qui peut 4tre utilis sur n"importe quelle plate%forme =;ni! et 6indows compris? $*opration peut prendre une des valeurs suivantes + h 04.TSSH pour acqurir un verrou partag =lecture? h 04.TSE\ pour acqurir un verrou e!clusif =criture? h 04.TS"5 pour librer un verrou =partag ou e!clusif? 3l est galement possible d"a)outer h 04.TS5) comme masque d"une des oprations prcdentes si vous ne voulez pas que la fonction flocb=? bloque durant le verrouillage =non support sous 6indows? E:emple 1 +
<?php $#p = #open("/tmp/locA't%t". "rR")! i# (#locA($#p. N*Ck)-e)) I // pose un errou e%clusi# #truncate($#p. 0)! // e##acement du contenu #Xrite($#p. "lcrire dans un #ichier]n")! #locA($#p. N*Ck)E+)! // lib=re le errou O else I echo "Wmpossible de errouiller le #ichier _"! O #close($#p)! ?$

E:emple ' + flocb=? en utilisant l"option $S&iJU>


<?php $#p = #open('/tmp/locA't%t'. 'rR')! /* &cti ation de l'option N*Ck)+2 lors d'une opration N*Ck)-e */ i#(_#locA($#p. N*Ck)-e d N*Ck)+2)) I echo 'Wmpossible d]'obtenir le errou'! e%it(5/)! O /* ''' */ #close($#p)! ?$

X 10!1-!B Tronq#er #n ,ic$ier : ,tr#ncateFG

,tr#ncate g 8ronque un fic#ier bool ftruncate = resource K#andle , int Ksize ? Prend le pointeur de fic#ier #andle et le tronque la taille de size E:emple +
<?php

$#ilename = 'lorem)ipsum't%t'! $handle = #open($#ilename. 'rR')! #truncate($handle. rand(/. #ilesiJe($#ilename)))! reXind($handle)! echo #read($handle. #ilesiJe($#ilename))! #close($handle)! ?$

X 10!1-!E Cermer #n ,ic$ier : ,closeFG

'uand on a fini d*utiliser un fic#ier, il faut le fermer pour librer les ressources syst(me .rguments + ,close="monfic#ier t!t"? G

X 10!1-!10 0ire #n ,ic$ier : ,readFG

.rguments + ,read="nomJadresseJfic#ier t!t", nboctets? G lit un fic#ier entier et retourne une c#aAne de caract(res
<?php /* lecture de <8 octets d'un #ichier */ $#p = #open ("mon#ichier't%t". "rb")! $s = #read( $#p. <8 ) ! echo "les <9 premiers caract=res sont 4 $s <br$" ! i# ( strlen($s) < <8 ) echo "le #ichier contient moins de <9 caract=res" ! ?$

X 10!1-!11 Ecrire dans #n ,ic$ier : ,writeFG

.rguments + ,write="nomJadresseJfic#ier t!t", "c#aine", nboctets? G crit dans un fic#ier une c#aAne de caract(res
<?php /* crire dans un #ichier */ $#p = #open ("mon#ichier't%t". "ab")! $ ar = 'Ne beau3olais nou eau est arri _' !

#Xrite( $#p. $ ar. ? ) ! /* on crit ? octets seulement. la #in du te%te est donc ignore */ echo $s ! ?$

X 10!1-!1' Taille d9#n ,ic$ier : ,ilesiQeFG

.rguments + ,ilesiQe="nomJadresseJfic#ier t!t"? G retourne la taille en octets du fic#ier


<?php /* lecture de tout un #ichier en mesurant sa taille a ec #ilesiJe() $#p = #open ("mon#ichier't%t". "rb")! $s = #read( $#p. #ilesiJe('mon#ichier't%t') ) ! echo $s ! ?$ */

10!1/ Cic$iers et %estion doc#mentaire

Boici un e!emple d*utilisation de fic#iers dans le cadre d*une gestion de documents partags par plusieurs utilisateurs &#aque utilisateur doit pouvoir modifier le document, le script g(re les numros de version et avertit si 9 personnes ont modifi la m4me version . ce stade il n*est pas ncessaire d*utiliser une base de donnes D,inir + $*interface pour envoyer un fic#ier par formulaire $*interface pour rcuprer les initiales de la personne qui modifie le fic#ier Structure des noms de ,ic$iers + nomDocument%BersionUo%initialesDernier.uteur e!tension

X 10!1/!1 0e ,orm#laire

=/NJ12Denvoific#iers p#p?

<?php /* session)start()! *n d#init ici par d#aut les initiales de l'auteur Vour bien #aire il #audrait ou rir une session mais nous errons cela plus loin */ ?$ <html$ <head$<title$-n oi de #ichier</title$</head$ <bod1$ <#orm action="<B)\-Pscript'php" method="post" enct1pe="multipart/#orm5data"$ <_55 seule la mthode post est possible pour en o1er des #ichiers //55$ <p$ Uormulaire dLen oi de #ichiers et dLimages 4 <br$<br$ -ntreJ os initiales ci5dessous 4<br$ <input t1pe="te%t" name="initiales&uteur" alue="%%"$<br$ <_55 alue est la aleur par d#aut //55$ <br$slectionneJ le #ichier modi#i et en o1eJ<br$ <input t1pe="#ile" name="#ichier" $ <input t1pe="submit" alue="-n o1er" $ <_55 &ttention. il #audra ri#ier Kue le nom des #ichiers est con#orme ; la structure 4 //55$ <_55 nomPocument5Hersion+o5initialesPernier&uteur'e%tension//55$ </p$ </#orm$ </bod1$ </html$

X 10!1/!' 0a pa%e de rc#pration des donnes

=/NJ12Dscript p#p?
<html$ <bod1$ <?php echo "Vage de rcupration des donnes 4<br$<br$"! /* remet le compteur ; Jro et a3oute B0 secondes au temps d3; coul */ set)time)limit("B0")! /* si l'utilisateur arrTte le tlchargement en cours. ou se dconnecte. le script php se terminera Kuand mTme */ ignore)user)abort()! /* nom et adresse dLorigine du #ichier sur le disKue utilisateur */ $initiales&uteur = $)V*S,F'initiales&uteur'G! /* echo "initiales&uteur 4 $initiales&uteur<br$<br$"! */ $nom)#ichier = $)UWN-SF'#ichier'G F'name'G! /* taille du #ichier en octets */ $taille = $)UWN-SF'#ichier'G F'siJe'G! /* nom et adresse du #ichier temporaire sur le ser eur (#ichier dtruit ; la #in du script) */ $tmp = $)UWN-SF'#ichier'G F'tmp)name'G! /* t1pe mime du #ichier */ $t1pe = $)UWN-SF'#ichier'G F't1pe'G! /* code dLerreur associ au tlchargement */

$erreur = $)UWN-SF'#ichier'G F'error'G! // 55555555555555555555555555555555555555555555555555555555555555555555555555555 /* on ne garde Kue le nom du #ichier. pas son chemin d'acc=s */ $nom)#ichier = basename($nom)#ichier)! /* on rcup=re l'e%tension du #ichier (apr=s le dernier point de la cha`ne) */ $dernierVoint = strrpos($nom)#ichier. ''')! $e%tension = substr($nom)#ichier. $dernierVoint)! $nom)#ichier = substr($nom)#ichier. 0. $dernierVoint)! /* on rcup=re les initiales du prcdent auteur */ $dernier,iret = strrpos($nom)#ichier. '5') ! $ancien&uteur = substr($nom)#ichier. $dernier,iret R/)! $nom)#ichier = substr($nom)#ichier. 0. $dernier,iret)! /* on rcup=re le numro de l'ancienne ersion */ $dernier,iret = strrpos($nom)#ichier. '5')! $ancienneHersion = substr($nom)#ichier. $dernier,iret R/)! $nom)#ichier = substr($nom)#ichier. 0. $dernier,iret)! /* le reste est le nom du document */ $document = $nom)#ichier! // 55555555555555555555555555555555555555555555555555555555555555555555555555555 /* dans le rpertoire. o1ons maintenant Kuelle est la derni=re ersion de ce document */ $ ersion&ctuelle = 0 ! #oreach(glob($document''5*5*''$e%tension) as $#ichier) I $debut = strpos($#ichier. '5' ) R/! $longueur = strrpos($#ichier. '5' ) 5 $debut! $ ersion = substr($#ichier. $debut. $longueur )! i#($ ersion $ $ ersion&ctuelle) I $ ersion&ctuelle = $ ersion! $#ichier&ctuel = $#ichier! O O // 55555555555555555555555555555555555555555555555555555555555555555555555555555 /* interprtation et en oi des rsultats ci5dessus ; l'utilisateur */ session)start()! i#($ ersion&ctuelle $ $ancienneHersion) I echo "Ne document a t modi#i depuis otre derni=re isite' <br$"! echo "(erci de rcuprer la derni=re ersion ($#ichier). <br$"! echo "de la mettre ; 3our et de la ren o1er'"! OelseI $#ichier = $document ''5''($ancienneHersion R/) ''5''$initiales&uteur '$e%tension! O // 55555555555555555555555555555555555555555555555555555555555555555555555555555 /* l'adresse de destination = $#ichier. c'est l; of le #ichier sera sau egard sur le ser eur */ /* echo "&dresse de destination = $#ichier<br$<br$"! */ mo e)uploaded)#ile($)UWN-SF'#ichier'GF'tmp)name'G. $#ichier)! /* dtection dLerreurs */

i# ($erreur = $)UWN-SF'#ichier'G F'error'G) I echo "Ene erreur sLest produite<br$" ! i# ($erreur == EVN*&P)-RR)W+W)SWg-) echo "Uichier plus gros Kue le ma%imum autoris par V:V<br$" ! elsei# ($erreur == EVN*&P)-RR)U*R()SWg-) echo "Uichier plus gros KuLindiKu dans le #ormulaire<br$" ! elsei# ($erreur == EVN*&P)-RR)V&R,W&N) echo ",lchargement interrompu a ant la #in. merci de ressa1er<br$" ! elsei# ($erreur == EVN*&P)-RR)+*)UWN-) echo "&ucun #ichier nLa t tlcharg<br$" ! OelseI echo "<b$Uichier correctement mis ; 3our ers $#ichier</b$" ! O ?$ </bod1$ </html$

10!11 0es cooDies

$es coobies sont des petits fic#iers te!te =faisant au ma!imum \- io? sauvegards par le navigateur sur la station utilisateur et qui permettent de conser er des in,ormations sur un utilisateur + se souvenir de son nom pour lui viter de le ressaisir la proc#aine aut#entification, ou des fins statistiques, ou se souvenir des informations d*un formulaire pour lui viter de les ressaisir la proc#aine fois, ou le pr remplir, se souvenir des sites visits, etc 8outefois, les donnes sensibles et confidentielles ne doivent pas 4tre stocbes dans des coobies, car ces derniers sont accessibles et modifiables par l*utilisateur

X 10!11!1 Ecrit#re et lect#re d9#n cooDie : setcooDieFG@ 3S.44T<EUV

;ne seule fonction g(re les coobies + setcooDie =nomcoobie, valeur, dureeDeBie? G h ale#r est une c#aAne h d#reeDe2ie du coobie + 9/ #eures OH time=?Q \:I\:I9/ Sn acc(de au! coobies l*aide du tablea# 3S.44T<EUV E:emple 1 + =/-Jcoobies p#p?

<?php /* &ttention. dans php'ini =$ output)bu##ering = 0 */ /* &ttention. aucun te%te :,(N ne doit Ttre en o1 a ant le cooAie */ /* -n dbut de code. pas de blancs */ setcooAie('langage'. 'V:V ersion 8'. time()R @0*@0*9<)! /* time()R @0*@0*9< =$ cooAie ; dure de ie 9< heures */ ?$ <html$ <head$ <title$Nes cooAies</title$</head$ <bod1$ <?php /* Hri#ions si le cooAie a t reMu */ i#(isset($)C**kW-F'langage'G)) I /* Pans le cas of le cooAie e%iste */ echo '<p$un cooAie a t en o1</p$'! echo '<p$son nom est langage</p$'! /* Necture et a##ichage du contenu du cooAie */ echo '<p$Son contenu est 4 '! echo $)C**kW-F'langage'G! echo '</p$'! OelseI /* &utrement c'est Kue le cooAie n'a pas t reMu */ echo '<p$&ucun cooAie du nom de langage n]'a t reMu</p$'! O echo '<p$Niste de tous les cooAies 4</p$'! echo '<pre$'! print)r($)C**kW-)! echo '</pre$'! echo'<br/$'! ?$ </bod1$ </html$

E:emple ' + =/-Jcoobie9 p#p?


<?php i# ([setcooAie('langage'.'V:V ersion 8')) I ?$ <html$ <head$ <title$En cooAie en o1</title$ </head$ <bod1$ <p$En cooAie a t en o1</p$ <p$son nom est langage</p$ <p$son contenu est V:V ersion 8</p$ </bod1$ </html$ <?php OelseI

?$ <html$ <head$ <title$-rreur cooAie</title$ </head$ <bod1$ <p$-rreur cooAie</p$ </bod1$ </html$ <?php O ?$

X 10!11!' S#ppression d9#n cooDie : setcooDieFG@ sans ale#r

Pour effacer un coobie on envoie un coobie de m4me nom, ou avec un temps de vie dpass E:emple + =/-JcoobieSuppr p#p?
<?php /* Si un cooAie compteur de isites e%iste */ W# ( isset( $)C**kW-F' isites'G)) I /* *n demande au na igateur d'e##acer son cooAie */ setcooAie(' isites')! /* *u setcooAie(' isites'. 0./)! cooAie alable 3usKuLau 0//0///?>0 ; 00h00 et / seconde demande au na igateur d'e##acer son cooAie */ /* *n e##ace aussi la aleur du cooAie en local pour iter de l'utiliser par erreur dans la suite du script */ unset( $)C**kW-F' isites'G)! O ?$

X 10!11!- Enre%istrer dans #n cooDie les donnes d9#n ,orm#laire

Sn sou#aite crer une page spciale destine recevoir la commande semestrielle d"un client .pr(s une identification, le client remplit un formulaire, et valide sa commande &#aque semestre la commande est quasi%similaire part pour quelques c#amps =qqt, lieu, etc ? Pour ne pas obliger le client tout ressaisir c#aque fois, on va stocber dans un coobie un #istorique de c#aque c#amp =&*est aussi utile si les commandes viennent se multiplier? D Source + #ttp+PPwww commentcamarc#e netPforumPaffic#%\N^-Y/7%p#p%formulaire% coobiesjqOformulaireQcoobieTcurO7TurlOR9<

E:emple + =/-Jcoobie<orm7 p#p?


<?php $nom = ""! $msg)nom = ""! $prenom = ""! $msg)prenom = ""! $mail = ""! $msg)mail = ""! //555555555555555555555555555555555555555555555555555555555555555555 W# (isset($)V*S,F'nom'G)) I $nom = $)V*S,F'nom'G! $prenom = $)V*S,F'prenom'G! $mail = $)V*S,F"mail"G! $contenu = "$nom aa $prenom aa $mail"! // on d#init une dure de ie de notre cooAie (en secondes). donc un an dans notre cas $temps = B@8*9<*B@00! // on en oie un cooAie de nom pseudo portant la aleur de la ariable $nom. c'est5;5dire la aleur Ku'a saisi la personne Kui a rempli le #ormulaire setcooAie ("pseudo". $contenu. time() R $temps)! echo '<span st1le="color4 red"$<b$Hos donnes personnelles sont bien notes_ </b$</span$<br$'! echo '<span st1le="color4 red"$Hous pou eJ encore les ri#ier et les modi#ier ci5dessous</span$<br$'! echo '<span st1le="color4 red"$Sinon cliKueJ sur ]'&cc=s direct ; la page d]'accueil du site]'</span$<br$'! /* echo 'Contenu = ''$contenu'' _'! */ //555555555555555555555555555555555555555555555555555555555555555555 // Hri#ie la s1nta%e d'une adresse mail #unction is)email($email) I return preg)match('/hFh[GR[Fa5J&5g05?')5GR]'Fa5J&5gGR$/'. $email)! O /* le script est stopp grice ; une #onction die() si l'e%pediteur contient "]r" ou "]n"' "]n" "]n" c'est le saut ; la ligne. et "]r" correspond ; CR "Carriage Return". le retour en dbut de ligne'*/ i# (preg)match("/]r/i".$nom) dd preg)match("/]n/i".$nom)) I die("+i retour ; la ligne ni retour dbut de ligne. champ nom 4 (")! O i# (preg)match("/]r/i".$prenom) dd preg)match("/]n/i".$prenom)) I die("+i retour ; la ligne ni retour dbut de ligne. champ prenom 4 (")! O i# (preg)match("/]r/i".$mail) dd preg)match("/]n/i".$mail)) I die("+i retour ; la ligne ni en dbut de ligne. champ mail 4 (")! O //555555555555555555555555555555555555555555555555555555555555555555

// \estion des erreurs de saisie5555555555555555555555555555555555555 /* Hri#ier la alidit des champs du #ormulaire */ $ alide)#orm = ,RE-! // le #ormulaire doit etre ri#i i# ( _$)V*S,F'nom'G) //le nom n'est pas renseign I $msg)nom = '<span st1le="color4 red"$Wl manKue otre nom ici</span$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'prenom'G) //le prnom n'est pas renseign I $msg)prenom = '<span st1le="color4 red"$Wl manKue otre prnom ici</span$'! $ alide)#orm = U&NS-! O i# ( _is)email($)V*S,F'mail'G) ) //le mail n'est pas correct I $msg)mail = '<span st1le="color4 red"$HeuilleJ ri#ier otre adresse mail ici</span$<br$'! $ alide)#orm = U&NS-! O //555555555555555555555555555555555555555555555555555555555555555555 // #onction nous permettant de #aire des redirections #unction redirection($url)I i# (headers)sent())I print('<meta http5eKui ="re#resh" content="0!ERN=''$url''"$')! O else I header("Nocation4$url")! O O /* on e##ectue une redirection ers la page d'accueil redirection ('<8)cooAieUorm9'php')! */ O /* else I echo 'Na ariable du #ormulaire n]'est pas dclare''! O */ ?$ <html$ <head$ <title$Uormulaire du site</title$ <bod1$ <?php // on teste la dclaration de notre cooAie i# (isset($)C**kW-F'pseudo'G)) I /* echo '2on3our ''$)C**kW-F'pseudo'G'' _'! */ $pseudo = e%plode(" aa ". $)C**kW-F'pseudo'G)! // *n e%trait les donnes spares par des ada /* echo 'print)r($pseudo) = '! print)r($pseudo)!*/ $nom = $pseudoF0G! $prenom = $pseudoF/G! $mail = $pseudoF9G! echo '2on3our ''$prenom''. (erci de re enir sur notre site_ <br$'!

O else I

echo '(erci de mettre ; 3our os donnes personnelles si besoin. puis cliKuer sur en o1er'<br$'! /* si le cooAie n'e%iste pas. on a##iche un #ormulaire permettant au isiteur de saisir son nom echo '<#orm action="<8)cooAieUorm/'php" method="post"$'! echo 'Hotre nom 4 <input t1pe = "te%te" name = "nom" alue="<? php echo $nom! ?$"$<br /$'! echo 'Hotre prnom 4 <input t1pe = "te%te" name = "prenom" alue="<?php echo $prenom! ?$"$<br /$'! echo '<input t1pe = "submit" alue = "-n o1er"$'!</#orm$*/ O ?$ <_55 Si le cooAie n'e%iste pas. on a##iche un #ormulaire permettant au isiteur de saisir son nom. etc' //55$ <br$<span st1le="color4 red"$( * 4 Champs obligatoires )</span$ <#orm action="<8)cooAieUorm/'php" method="post"$ <table Xidth=@00 border=/$ <tr$ <td Xidth=900 border=]"/]"$ Hotre nom de #amille <span st1le="color4 red"$(*)</span$ </td$ <td Xidth=<00 border=]"/]"$ <input t1pe = "te%t" name = "nom" alue="<?php echo $nom! ?$"$ <?php echo $msg)nom! ?$ </td$ </tr$ <tr$ <td$ Hotre prnom <span st1le="color4 red"$(*)</span$ </td$ <td$ <input t1pe = "te%t" name = "prenom" alue="<?php echo $prenom! ?$"$ <?php echo $msg)prenom! ?$ </td$ </tr$ <tr$ <td$ Hotre adresse mail <span st1le="color4 red"$(*)</span$ </td$ <td$ <input name="mail" t1pe="te%t" alue="<?php print $mail! ?$"$ <?php echo $msg)mail! ?$ </td$ </tr$ <tr$ <td$ </td$ <td$ <input t1pe = "submit" alue = "-n o1er os in#ormations personnelles"$<br$ </td$ </tr$ </#orm$ </table$

<br$<input t1pe="button" alue="-##acer toutes os in#ormations personelles" name="NeNien/" onclicA="sel#'location'hre#='<8)cooAieUorm/)Aill'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5 Xeight4bold"onclicA$<br$ <br$<input t1pe="button" alue="&cc=s direct ; la page d'accueil du site" name="NeNien/" onclicA="sel#'location'hre#='<8)cooAieUorm/'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5 Xeight4bold"onclicA$<br$ </bod1$ </html$

Po#r dtr#ire le cooDie + =/-Jcoobie<orm7Jbill p#p?


<?php setcooAie ("pseudo". $)V*S,F'nom'G. time() R $temps)! unset( $)C**kW-F"pseudo"G)! // #onction nous permettant de #aire des redirections #unction redirection($url)I i# (headers)sent())I print('<meta http5eKui ="re#resh" content="0!ERN=''$url''"$')! Oelse I header("Nocation4$url")! O O // on e##ectue une redirection ers la page d'accueil redirection ('<8)cooAieUorm/'php')!

?$

X 10!11!/ Enre%istrer dans #n cooDie le nombre de isites d9#n isite#r

Sn cre dans le rpertoire coobies une page ,/\JUbBisites p#p, &ette page cre un coobie qui compte le nombre de visites de l*utilisateur sur la page Sn affic#e ce nombre sur la page .ompta%e de isites + =/\JUbBisites p#p?
<?php i# (_isset($)C**kW-F',estCooAie'G)) I $ aleur)cooAie = /! OelseI $ aleur)cooAie = $)C**kW-F',estCooAie'G R /! O setcooAie(',estCooAie'. $ aleur)cooAie )! // Wncrmentation de la cooAie echo '2on3our. ceci est otre '! echo $ aleur)cooAie!

aleur du

echo 'e ?$

isite' (erci _'!

Destr#ction d# cooDie + =/\JUbBisitesJbill p#p?


<?php ?$ setcooAie (',estCooAie')! unset( $)C**kW-F',estCooAie'G)!

X 10!11!1 Personnaliser l9inter,ace %rap$iq#e de la pa%e R l9aide d9#n cooDie

Sn cre un syst(me qui permet au visiteur de c#oisir pour un an la couleur de fond du site parmi une slection 09inter,ace %rap$iq#e d9#ne pa%e + =/]Jinterface p#p?
<?php /* ,oute premiere apparition sur la page*/ i# (isset($)C**kW-F'titre)cooAie'G)) I echo '<br$Wl 1 a un cooAie d#ini pour titre)cooAie'! $titre)cooAie = $)C**kW-F'titre)cooAie'G! OelseI //titre par d#aut4 2ien enue echo '<br$Wl n]'1 a pas de cooAie d#ini pour titre)cooAie'! echo '<br$Pans ce cas. 3]'en cre un _'! $titre)cooAie = '<h/$2ien enue</h/$'! setcooAie('titre)cooAie'. $titre)cooAie )! // Cration d'un cooAie O i# (isset($)C**kW-F'couleur)cooAie'G)) I echo '<br$Wl 1 a un cooAie d#ini pour couleur)cooAie'! $couleur)cooAie = $)C**kW-F'couleur)cooAie'G! OelseI //couleur par d#aut4 2lanc echo '<br$Wl n]'1 a pas de cooAie d#ini pour couleur)cooAie'! echo '<br$Pans ce cas. 3]'en cre un _'! $couleur)cooAie = 'Z#c#c#c'! setcooAie('couleur)cooAie'. $couleur)cooAie )! // Cration d'un cooAie O i# (isset($)\-,F'titre'G)) I // Cration du cooAie pour le titre i# ($)\-,F'titre'G _= '') I $titre)cooAie = $)\-,F'titre'G! /* echo 'titre)cooAie = '! echo $titre)cooAie!*/ $titre)cooAie = '<h/$''$titre)cooAie''</h/$'! // (ise ; 3our du cooAie

setcooAie('titre)cooAie'. $titre)cooAie. time()RB@00*9<*B@8)! O O i# (isset($)\-,F'couleur'G)) I // Cration du cooAie pour la couleur i# ( $)\-,F'couleur'G _= '' ) I sXitch ($)\-,F'couleur'G) I case 'rouge' 4 $couleur)cooAie = 'ZCC0000'! breaA! case 'bleu' 4 $couleur)cooAie = 'Z00BBCC'! breaA! case ' ert' 4 $couleur)cooAie = 'Z00??BB'! breaA! case 'orange' 4 $couleur)cooAie = 'ZUU@@00'! breaA! case '3aune' 4 $couleur)cooAie = 'ZUUUUBB'! breaA! case 'blanc' 4 $couleur)cooAie = 'ZUCUCUC'! breaA! O /* echo 'couleur)cooAie = '! echo $couleur)cooAie!*/ // (ise ; 3our du cooAie setcooAie('couleur)cooAie'. $couleur)cooAie. time()RB@00*9<*B@8)! O O echo '<br$titre)cooAie = '! echo htmlentities($titre)cooAie)! echo '<br$couleur)cooAie = '! echo $couleur)cooAie! ?$ <html$ <head$ <title$CooAie 4 Versonnalisation d'inter#ace</title$ <meta http5eKui ="Content5,1pe" content="te%t/html! charset=iso5778?5/"$ </head$ <bod1 bgcolor ="<?php echo $couleur)cooAie! ?$"$ <center$<?php echo $titre)cooAie! ?$!</center$<br$ choi% de la couleur de #ond 4<br$ <a hre#=<>)inter#ace'php?couleur=rouge$rouge</a$<br$ <a hre#=<>)inter#ace'php?couleur=bleu$bleu</a$<br$ <a hre#=<>)inter#ace'php?couleur= ert$ ert</a$<br$ <a hre#=<>)inter#ace'php?couleur=orange$orange</a$<br$ <a hre#=<>)inter#ace'php?couleur=3aune$3aune</a$<br$ <a hre#=<>)inter#ace'php?couleur=blanc$blanc</a$<br$ <br$ <br$

choi% du titre 4<br$ <a hre#=<>)inter#ace'php?titre=Salut$Salut</a$<br$ <a hre#=<>)inter#ace'php?titre=2ien enue$2ien enue</a$<br$ <a hre#=<>)inter#ace'php?titre=2on3our$2on3our</a$<br$ <a hre#=<>)inter#ace'php?titre=:ello$:ello</a$<br$ <a hre#=<>)inter#ace'php?titre=Qelcome$Qelcome</a$<br$ </bod1$ </html$

Po#r dtr#ire le cooDie + =/]JinterfaceJbill p#p?


<?php setcooAie('couleur)cooAie'.0./)! unset( $)C**kW-F'couleur)cooAie'G)! setcooAie('titre)cooAie'.0./)! unset( $)C**kW-F'titre)cooAie'G)!

?$

10!1? 0es sessions

$es donnes sensibles et confidentielles ne doivent pas 4tre stocbes sur la mac#ine utilisateur dans des coobies, car ces derniers sont accessibles et modifiables par l*utilisateur $es sessions sont mieu! adaptes la sauvegarde de donnes confidentielles ou importantes telles que+ % $*aut#entification d*un visiteur G % $es donnes de l*utilisateur tant qu*il reste connect l*application G % $e panier d*ac#ats du visiteur d*un site marc#and G % $es formulaires en plusieurs parties, pour retenir les informations fournies par l*utilisateur dans les pages prcdentes 8outefois, les sessions ne sont pas faites pour durer + apr(s la visite de l*internaute, et d(s la fermeture du navigateur, la session est perdue =comme un coobie sans date d*e!piration?
X 10!1?!1 .omment marc$e #ne session

&ontrairement au! coobies, PHP stocDe les in,ormations d9#ne session s#r le ser e#r =et non plus sur la mac#ine utilisateur? $e visiteur se voit attribuer un identifiant 2t c#aque fois que le visiteur revient en annonXant son identifiant, PHP restitue toutes les informations qu*il avait sauvegardes propos de ce visiteur Process#s simpli,i + 7? $e client =mac#ine utilisateur? fait une premiHre demande de pa%e G

9? $e serveur cre un identi,iant de session, stocbe les informations de sessions dans un ,ic$ier de sessions qui a pour nom cet identifiant, puis rpond en renvoyant la page et l*identifiant de session G N? 2nsuite le client peut refaire une 'e demande de pa%e a ec l9identi,iant de session G /? $*identifiant de session permet au serveur de rc#prer les donnes dans le fic#ier de sessions qui a pour nom cet identifiant -? $e serveur rpond en renvoyant la page et l*identifiant de session

X 10!1?!' 0ect#re et crit#re de sessions

Pour crer une session il faut d*abord initialiser la session avec + sessionSstartFG> Note : Quand on fait session_start(); ! cherche l"identifiant attri#u$ % l"utilisateur dans un coo&ie nomm$ par d$faut PHPSESSID. 'i ce coo&ie n"existe pas( un nou)el identifiant al$atoire est cr$$ puis en)o*$ au na)i+ateur dans un coo&ie sans date d"expiration (donc $ph$m,re). $*initialisation doit se faire dans tous les scripts PHP qui utilisent les sessions, pas seulement le premier 'uand ceci est fait, on peut lire et crire dans la variable super globale + 3SSESS<45U*!!!*V &ette variable super globale est un tableau dans lequel on peut a)outer, enlever ou modifier autant de variables =ou autres? que l*on veut E:emple + code placer avant l*ent4te, et mettre dans toutes les pages scurises =/^Jsession p#p?
<?php // Wnitialisation de la session =$ & VN&C-R -+ :&E, PE SCRWV, _ session)start()! // *n teste d'abord si la ariable 'langage' est prsente dans la session i# (isset($)S-SSW*+F'langage'G)) I echo 'langage e%iste dans la session et sa aleur est '! echo $)S-SSW*+F'langage'G! O else I echo 'langage n]'e%iste pas dans la session donc 3e la cre'! // Sinon on crit la ariable 'langage' dans la session $)S-SSW*+F'langage'G = 'V:V8'! // *n peut stocAer des tableau%. des nombres. du te%te. des ob3ets (sans a oir ; les srialiser) $tableau = arra1('un'. 'deu%'. 'trois'. 'Kuatre')! $)S-SSW*+F'tab'G = $tableau! O echo '<br$identi#iant cr 4 '. session)id().'<br$' ! ?$

X 10!1?!- S#ppression d9#ne session : session destroyFG>

Uormalement c*est inutile puisque PHP efface automatiquement les fic#iers sessions inutiliss depuis plus d*une #eure et demie &ependant sessionSdestroyFG> efface le fic#ier de donnes, mais pas les variables contenues dans KJS2SS3SUZ[, ni le coobie E:emple + =/YJsessionJdestroy p#p?
<?php // Wnitialisation de la session' // Si ous utiliseJ un autre nom // session)name("autrenom") session)start()! // -t on e##ace les ariables contenues dans $)S-SSW*+FG $_&E&&)%" array*+, // ou unset ( $)S-SSW*+)! // Si ous ouleJ dtruire compl=tement la session. e##aceJ galement // le cooAie de session' // +ote 4 cela dtruira la session et pas seulement les donnes de session _ i# (isset($)C**kW-Fsession)name()G)) I setcoo-ie*session_name*+. ''. time*+(/0111. '''+, O // Uinalement. on dtruit la session' session_destroy*+, ?$

X 10!1?!/ A#tres instr#ctions F,ac#ltati esG

echo '<br$N]'identi#iant cr est 4 '. session_id*+.'<br$' ! // donne lLid de session session_regenerate_id*+ // rgn=re lLid ; chaKue aller5retour ce Kui scurise un peu plus session_name*'client'+ // le nom de la session sera 'client' session_sa2e_path*+ // donne lLadresse du rpertoire temporaire de stocAage des donnes session session_sa2e_path*''tmp'+ // le nom du rpertoire de stocAage des sessions sera tmp session_set_coo-ie_params*nomcoo-ie. 2aleur. dureeDe3ie+ /* *f le nomcooAie et la aleur sont #acultati#s (V:V leur donne le nom et lLidenti#iant de la session)' Pure de ie du cooAie 4 9< heures =$ time()R @0*@0*9< */

X 10!1?!1 6#elq#es rH%les de sc#rit

7? StocDer les sessions dans #n rpertoire pri + Dans le cas d*un serveur partag, il ne faut laisser quiconque l*acc(s au! sessions Pour cela il faut dfinir, pour stocber les sessions, un

rpertoire auquel vous seul avez acc(s + session!sa eSpat$ O ,P#omePuserPrepertoirePpersonnel, 9? 5e pas #tiliser la ,onction de rcrit#re des liens dans l9";0 Dans un tel cas l*identifiant de session figurerait en clair dans la barre d*adresses et serait trop facile pirater N? 0es identi,iants par d,a#t crs par PHP s#,,isent + vitez de dfinir vous%m4mes les identifiants de session m4me si PHP vous le permet /? Attaq#e par O,i:ation de sessionO + un attaquant peut fournir la victime, avant qu*elle s*aut#entifie, un numro de session connu 3l peut ainsi bnficier de son aut#entification ensuite $a parade consiste faire appel + % sessionSre%enerateSidFG c#aque fois, avant d*aut#entifier le visiteur, ou avant de stocber pour la premi(re fois des informations tr(s confidentielles G % session!#seSonlyScooDie dans le fic#ier de configuration de PHP -? 2ri,ier l9identit de l9#tilisate#r + en plus de son nom, stocbez dans la session son adresse <P, la ersion de son na i%ate#r, etc &eci est insuffisant, mais a)oute des difficults notre attaquant \? 5e pas stocDer le mot de passe dans la session + Stocbez dans la session le nom du visiteur, mais pas le mot de passe lui%m4me + vrifiez )uste si le mot de passe est valide

10!1A "tiliser #ne base de donnes MyS60

X 10!1A!1 0a str#ct#re d*#ne base de donnes

;ne base de donnes contient une ou plusieurs table=s? 8able clients

>ase de donnes

;ne table contient plusieurs enregistrements 8able clients

>ase de donnes

;n enregistrement contient un ou plusieurs c#amps 2t un c#amp contient des donnes 8able clients

>ase de donnes

X 10!1A!' 0es ,ormats des donnes en MyS60

0es donnes n#mriq#es + 2lles peuvent 4tre signes =signed? ou non signes =unsigned? Description 8r(s petit entier &ompris entre %79^ et 79] en signed et entre : et 9-\ en unsigned Petit entier &ompris entre %N9 ]\^ et N9 :]\] en signed et entre : et \--N- en unsigned

de c$amp

<5T

00<5T

"M<5T

2ntier moyen &ompris entre %^ N^^ \:^ et ^ N^^ \:] en signed et entre : et 7\ ]]] 97- en unsigned 2ntier &ompris entre 9 7/] /^N \/^ et 9 7/] /^N \/] en signed et entre : et / 9Y/ Y\] 9Y- en unsigned 1rand entier &ompris entre %Y 9NN N]9 :N\ ^-/ et Y 99N N]9 :N\ ^-/ ]]- ^:] en signed et entre : et 7^ //\ ]// :]N ]:Y --7 \7- en unsigned Uombre virgule flottante en prcision simple $"intervalle de validit va de %N /:9^9N/\\2QN^ %7 7]-/Y/N-72%N^ en signed et entre : et de 7 7]-/Y/N-72%N^ N /:9^9N/\\2QN^ en unsigned Uombre virgule flottante en prcision double $"intervalle de validit va de %7 ]Y]\YN7N/^\9N7-]2QN:^ %9 99-:]N^-^-:]9:7/2%N:^ en signed et de 9 99-:]N^-^-:]9:7/2%N:^ 7 ]Y]\YN7N/^\9N7-]2QN:^ en unsigned Uombre virgule flottante sign $es nombres sont enregistrs sous forme de c#aAnes de caract(res

5T

)0E

MA0

Pour plus de prcisions, reportez%vous la documentation de MyS'$ 0es c$a^nes de caractHres + Description &#aAne de caract(res de longueur fi!e oL ! =compris entre 7 et 9-\? est le nombre de caract(res &#aAne de caract(res de longueur variable oL ! =compris entre 7 et 9-\? est le nombre de caract(res &#aAne de 9-\ caract(res ma!imum &#aAne de \- -^- caract(res ma!imum &#aAne de 7\ ]]] 97- caract(res ma!imum &#aAne de / 9Y/ Y\] 9Y- caract(res ma!imum

de c$amp

;F:G

.HA;F:G

TE\T

"MTE\T

7TE\T

Pour plus de prcisions, encore une fois, reportez%vous la documentation de MyS'$

X 10!1A!- 0es oprate#rs de MyS60

0es oprate#rs arit$mtiq#es + 4prate#r Q % Description .ddition Soustraction

I P

Multiplication Division

0es oprate#rs de comparaison + 4prate#r O DO E EO H HO Description 2gal 3ngal 3nfrieur 3nfrieur ou gal Suprieur Suprieur ou gal

0es oprate#rs lo%iq#es + 4prate#r US8 ou V S5 ou VV .UD ou TT Description USU logique S; logique 28 logique

X 10!1A!/ P$pMyAdmin

P#pMy.dmin se prsente comme un site 6eb =en local? &*est un ensemble de scripts PHP permettant de grer facilement et visuellement la base de donnes MyS'$ sans devoir passer par l"apprentissage du langage S'$ $a pa%e d9acc#eil de P$pMyAdmin se prsente comme ceci +

P#pMy.dmin peut ainsi + k &rer et supprimer des bases de donnes k &rer, modifier et supprimer des tables k 0diter et a)outer des c#amps k 3nsrer des donnes k 1rer de multiples utilisateurs avec des permissions diffrentes

X 10!1A!1 .rer #ne base de donnes MyS60 a ec P$pMyAdmin

suite de l"apprentissage de MyS'$, nous aurons besoin d"une base de donnes s allons crer avec P#pMy.dmin

vrir P$pMyAdmin + 3l faut cliquer sur la petite ic@ne verte en bas droite de votre

neau =ci%contre droite? vous permet alors d*accder peu pr(s tous les services, ris P#pMy.dmin &liquez sur P#pMy.dmin

&rons sur le serveur MyS'$ une base de donnes nomme ,base7,, comme ceci +

2t voici le rsultat +

X 10!1A!? .rer des tables dans #ne base de donnes MyS60 a ec P$pMyAdmin

Dans cette base de donnes, nous allons crer la table liste $a table liste comportera N c#amps +

k un inde! id, un entier qui servira de cl primaire k un c#amp nom qui pourra contenir une c#aAne de -: caract(res k un c#amp email qui pourra contenir une c#aAne de ]: caract(res

,Uombre de colonnes, correspond au nombre de c#amps, ici nous avons demand N c#amps, il y aura donc N colonnes &liquez sur E:c#ter Sur l*cran suivant, dfinissez les caractristiques de vos c#amps comme ceci +

'uand c*est fait, cliquez sur Sauvegarder en bas droite de la page P#pMy.dmin vous demande beaucoup d"informations mais il n"est pas ncessaire de tout remplir $a plupart du temps, les informations les plus utiles seront + k .$amp + permet de dfinir le nom du c#amp =important D? k Type + le type de donnes que va stocber le c#amp =nombre entier, te!te, date ? k TailleL2ale#rs + permet d"indiquer la taille ma!imale du c#amp, utile pour le type B.5&H.5 notamment afin de limiter le nombre de caract(res autoriss k <nde: + active l"inde!ation du c#amp &e mot barbare signifie dans les grandes lignes que votre c#amp sera adapt au! rec#erc#es $e plus souvent, on utilise l"inde! P53M.5d sur les c#amps de type id k A"T4S<5.;EME5T + permet au c#amp de s"incrmenter tout seul c#aque nouvelle entre Sn l"utilise frquemment sur les c#amps de type ,id,

5emplissons donc le formulaire comme ci%dessus Beillons bien coc$er A"T4S<5.;EME5T et dfinir un inde: P;<MA;] sur le c#amp id ;ne fois que c"est fait, cliquez sur le bouton Sauvegarder en bas de la page Botre table est cre D Sn obtient alors l*cran ci%dessous +

X 10!1A!A 0es types de c$amps MyS60 FP$pMyAdminG

Si vous droulez la liste des types de c#amps que vous propose MyS'$, vous constaterez qu*ils sont tr(s nombreu! =voir ci%contre droite? 2n fait, p#pMy.dmin a eu la bonne ide de proposer au tout dbut de cette liste les / types de donnes les plus courants + k <5T + nombre entier k 2A;.HA; + court te!te =entre 7 et 9-- caract(res? k TE\T + long te!te =on peut y stocber un roman sans probl(me? k DATE + date =)our, mois, anne? Uous n"aurons besoin de )ongler qu"entre ces / types, donc ce sont eu! qu"il faut retenir 3ls couvriront YYR de nos besoins Bous pouvez aussi garder en t4te le type D4")0E qui permet de stocber des nombres dcimau! .lors que PHP ne propose que quelques types de donnes comme int, string, bool , MyS'$ propose une quantit tr(s importante de types de donnes $es types de donnes sont classs par catgories + k 5"ME;<. + ce sont les nombres Sn y trouve des types ddis au! petits nombres entiers =83Ud3U8?, au! gros nombres entiers =>313U8?, au! nombres dcimau!, etc k DATE and T<ME + ce sont les dates et les #eures De nombreu! types diffrents permettent de stocber une date, une #eure, ou les deu! la fois k ST;<57 + ce sont les c#aAnes de caract(res $ encore, il y a des types adapts toutes les tailles k SPAT<A0 + cela concerne les bases de donnes spatiales, utile pour ceu! qui font de la cartograp#ie &e ne sera pas notre cas, donc nous n"en parlerons pas ici

X 10!1A!B <nsrer #n enre%istrement de donnes a ec P$pMyAdmin

Slectionnez l*onglet ,<nsrer,, puis remplissez la case , ale#r, pour c#aque c#amp, comme ceci +

&liquez sur ,E:c#ter, pour enregistrer cet lment de la base &liquez sur l*onglet ,A,,ic$er, pour visualiser les c#amps ainsi crs +

X 10!1A!E A8o#ter #n c$amp R #ne table a ec P$pMyAdmin

Slectionnez l"onglet ,Str#ct#re, de la table, puis c#oisissez ,A8o#ter 1 colonne, en fin de table, comme ceci +

&liquez sur ,E:c#ter, pour enregistrer ce nouveau c#amp de la base

10!1B "tiliser MySql dep#is PHP

X 10!1B!1 .rer #n #tilisate#r administrate#r

3l est essentiel de scuriser nos acc(s la base de donnes k ;ser O admin:7 k Mot de passe O monmotdepasse k Droits O tous les droits Suvrez P#pMy.dmin, slectionnez la base de test =base7?, et cliquez sur l*onglet ,Pri ilH%es,

&onservez l*utilisateur ,root, et ,a8o#teQ #n #tilisate#r, entrez le nom, le serveur, le mot de passe comme indiqu Donnez tous les privil(ges sur la base de donnes =base7?, et quant au! privil(ges globau!, c#oisissez ,To#t coc$er,, enfin, cliquez sur ,e:c#ter, en bas droite de l*cran

5evenez sur base7 et cliquez sur l*onglet ,Privil(ges, pour vrifier si vous trouvez maintenant deu! utilisateurs, root, et admin7 que vous venez de crer .ssurez%vous que l*utilisateur admin7 a bien O7rantO N o#i et c*est fini

X 10!1B!' Se connecter R la base de donnes MySql dep#is PHP

$a conne!ion MyS'$ s"effectue soit avec la mt#ode mysqliS =appele disparaAtre plus ou moins longue c#ance? soit avec la mt#ode PD4 =PHP Data Sb)ect? PDS est un socle commun standard toutes les S1>D, cette mt#ode est donc recommande car aussi, elle seule a de l*avenir D % . c#aque e!emple nous vous proposons des e!emples tests avec les deu! mt#odes PHP propose plusieurs moyens de se connecter une base de donnes MyS'$ + k $"e:tension mysqlS + ce sont des ,onctions obsolHtes qui permettent d"accder une base de donnes MyS'$ et donc de communiquer avec MyS'$ $eur nom commence tou)ours par mysqlJ 8outefois, ces fonctions ont vieilli et on recommande de ne pl#s les #tiliser a#8o#rd*$#i k $"e:tension mysqliS + ce sont des fonctions amliores d"acc(s MyS'$ 2lles proposent plus de fonctionnalits et sont plus )our k $"e:tension PD4 + c"est un outil complet qui permet d"accder n"importe quel type de base de donnes Sn peut donc l"utiliser pour se connecter aussi bien MyS'$ que PostgreS'$ ou Sracle

10!1B!' + 1G .onne:ion MyS60 + mt$ode oriente ob8et FPD4G Pour se connecter depuis une page PHP une base de donnes MyS'$, on spcifie plusieurs param(tres + k $*#@te =le serveur sur lequel MyS'$ est install? Par dfaut, ,local#ost, k $e nom de la base de donnes Sbligatoire k $e login utilisateur ou ;sername Par dfaut, ,root, k $e mot de passe Par dfaut, ,, &omme ceci +
<?php

$dbh = neX VP*('m1sKl4host=localhost!dbname=base/'. 'root'. '')! // ou plus prcisment $dbh = neX VP*('m1sKl4host=sKl'hebergeur'com!dbname=mabase'. 'pierre'durand'. 'sBcrBt')! ?$

Script de conne:ion complet a ec PD4 + =-9JmysqlJconnect p#p?


<?php // d#inition des ariables de conne%ion $user = 'root'! $pass = ''! $dsn = 'm1sKl4host=localhost!dbname=base/'! // Conne%ion ; la base de donnes a ec VP* (V:V Pata *b3ect) tr1 I $dbh = neX VP*($dsn. $user. $pass)! O catch (VP*-%ception $e) I die( "-rreur _ 4 "' $e5$get(essage() )! O echo 'Hous Ttes connect au ser eur et ; la base<br$'! ?$

>ien entendu il serait utile d*inclure ce code dans un fic#ier e!terne, que nous vous recommandons de nommer conne:ion!inc!p$p et qu"il suffirait d"appeler ensuite c#aque script Pour appeler cette librairie depuis n*importe quel script, il suffit d*y a)outer + incl#deF,conne!ion inc p#p,G ou dans notre e!emple, incl#deF,-9JmysqlJconnect p#p,G

10!1B!' + 'G .onne:ion MyS60 + mt$ode procd#rale FmysqliG =-7Jconne!ion inc p#p?
<?php $m1ser er = 'localhost'! $m1login = 'root'! $m1pXd = '%%%%'! $m1bdd = 'base/'! /* Conne%ion ; la base de donnes */ $m1sKli = neX m1sKli( $m1ser er. $m1login. $m1pXd. $m1bdd )! /* Hri#ication de la conne%ion */ i# (m1sKli)connect)errno()) I print#("lchec de la conne%ion 4 Ys]n". m1sKli)connect)error())! e%it()! O echo 'Hous Ttes bien connect au ser eur et ; la base<br$'! ?$

$a fonction retourne 85;2 si la conne!ion est russie et <.$S2 sinon 3l est recommand de stocber le rsultat de l"e!cution de la fonction dans une variable et d"interrompre le processus en cas d*erreur $"utilisation de la fonction die=? en cas d"erreur d"e!cution Si la fonction retourne la valeur : =c"est%%dire s"il y a une erreur? la fonction die=? Ztraduisez meurt[ renvoie un message d"erreur $a fonction die=? est quivalente la fonction e!it=?

X 10!1B!- A,,ic$er le conten# d*#ne table dep#is PHP

10!1B!- + 1G 0ire le conten# d9#ne table MyS60 + mt$ode oriente ob8et FPD4G Pour affic#er le contenu d"une table, on se connecte la base, puis on slectionne la table =liste? Sn effectue la requ4te de slection avec "S2$2&8 nom, email <5SM liste" ou "S2$2&8 I <5SM liste" Puis il faut stocber le rsultat de la requ4te =les enregistrements de la table? dans une variable, que l"on peut nommer Kresultat et qui est donc un tableau associatif
$s4l "&E5E6T 7 89%: liste", $resultat $d;h(<4uery*$s4l+,

8outefois, la variable 3res#ltat contient l"ensemble des enregistrements demands dans un tableau et n"est donc pas e!ploitable telle quelle Sn utilise donc la mt#ode =ou fonction? ,etc$FG pour e!traire les enregistrements du tableau +
$ro= $resultat(<fetch*>D%??8ET6@_A%T@+,

k PDS++<28&HJS>M OH retourne un ob)et anonyme avec les noms de proprits correspondant au! noms de colonnes k PDS++<28&HJ.SSS& OH retourne un tableau associatif k PDS++<28&HJ>S8H OH retourne un tableau inde! par les noms 28 les numros de colonnes =valeur par dfaut? Uote + ,etc$allFG e!trait d*un seul coup l*ensemble des donnes et lib(re MySql, et ,etc$FG e!trait les donnes squentiellement $"affic#age s"effectue ensuite par une bo#cle w$ile qui parcourt les lments du tablea# associati, 3row

=hile ($ro= = $resultat5$#etch(VP*44U-,C:)2*,:)) I echo $roXF'id'G'' 5 ''$roXF'nom'G'' 5 ''$roXF'email'G'' 5 '' $roXF'age'G''<br$'! O

2oici le script complet a ec la mt$ode PD4 =-9JmysqlJPDSJlire p#p?


<?php /* Conne%ion ; la base de donnes */ include("89)(1SDN)VP*)connect'php")! // *n rcup=re tout le contenu de la table liste (de base/ of l'on s'est connect) // note. '*' apr=s le S-N-C,. eut dire 'tout slectionner' //a ec 'S-N-C, nom. email UR*( liste' on ne slectionne Kue les champs nom et email dans la table liste $sKl = "S-N-C, * UR*( liste"! $resultat = $dbh5$Kuer1($sKl)! echo '<br$Niste des enregistrements de la base 4<br$'! // *n a##iche chaKue entre une ; une Xhile ($roX = $resultat5$#etch(VP*44U-,C:)2*,:)) I /* print)r($roX)! */ echo $roXF'id'G'' 5 ''$roXF'nom'G'' 5 ''$roXF'email'G'' 5 ''$roXF'age'G'' ans<br$'! O // +e pas oublier de clore la conne%ion ; la #in du script $resultat5$closeCursor()! // Uermeture de la conne%ion $dbh = +ENN! ?$ <html$ <head$ <title$Necture de la table</title$ </head$ <bod1$ <br$ <input t1pe="button" alue="Retour ; la page d'administration" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)admin'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </bod1$ </html$

.e script a,,ic$e to#te la table liste qui contient quatre enregistrements +

10!1B!- + 'G 0ire le conten# d9#ne table MyS60 + mt$ode procd#rale FmysqliG Pour affic#er le contenu d"une table, on se connecte d*abord la base, puis on slectionne la table =liste? Sn effectue la requ4te de slection l"aide de la fonction +
$mys4li(<4uery("S-N-C, %. 1. J UR*( table NW(W, /0") !

Puis il faut stocber le rsultat de la requ4te =les enregistrements de la table? dans une variable, que l"on peut nommer 3res#lt, et qui est donc un tableau associatif +
$result 5):)T B1"+ , $mys4li(<4uery*"&E5E6T id. nom. email 89%: liste

8outefois, la variable 3res#lt contient l"ensemble des enregistrements demands dans un tableau et n"est donc pas e!ploitable telle quelle Sn utilise donc une autre fonction pour e!traire les enregistrements du tableau +
$roX = $result(<fetch_array((6SDNW)&SS*C) !

k MdS'$3JU;M OH tableau! numriques k MdS'$3J.SSS& OH tableau! associatifs k MdS'$3J>S8H OH tableau! associatifs 28 numriques 2nsuite on dcoupe les lignes de rsultat et on les met dans un tableau associatif dans l"ordre oL

elles arrivent avec mysqliS,etc$Sarray=3res#lt, MdS'$3J.SSS&? $"affic#age s"effectue par une boucle w$ile qui va parcourir les lments du tableau 2nfin, 3row est une variable de type tableau associatif
=hile ( $roX = mys4li_fetch_array($result. (6SDNW)&SS*C)) I echo $ro=F'id'G'' 5 ''$ro=F'nom'G'' 5 '' $ro=F'email'G''<br$'! O

0e script complet a ec la mt$ode mysqli de ient + =-9JMyS'$Jlire p#p?


<?php /* Conne%ion ; la base de donnes */ include("8/)conne%ion'inc'php")! /* ReKuTte de slection dans la base liste. puis on stocAe les enregistrements de la table dans la ariable $result'*/ /* Na reKuTte "Select" retourne un 3eu de rsultats */ $Kuer1 = "S-N-C, id. nom. email UR*( liste NW(W, /0"! $result = $m1sKli5$Kuer1($Kuer1)! i# ($result = $m1sKli5$Kuer1($Kuer1)) I print#("Select a retourn Yd lignes']n". $result5$num)roXs)! O echo '<br$<br$Niste des enregistrements de la base 4'! /* tableau numriKue $roX = $result5$#etch)arra1((6SDNW)+E()! */ /* tableau associati# */ $roX = $result5$#etch)arra1((6SDNW)&SS*C)! /* ,raitement de la premi=re ligne */ $id = $roXF"id"G! $nom = $roXF"nom"G! $email = $roXF"email"G! echo "<br$$id 5 $nom 5 $email<br$"! // on dcoupe les lignes de rsultat et on les met dans un tableau associati# dans l'ordre of elles arri ent Xhile ( $roX = m1sKli)#etch)arra1($result. (6SDNW)&SS*C)) I echo $roXF'id'G'' 5 ''$roXF'nom'G'' 5 ''$roXF'email'G''<br$'! O /* tableau associati# -, numriKue $roX = $result5$#etch)arra1((6SDNW)2*,:)! */ /* Nibration du 3eu de rsultats */ $result5$close()! // +e pas oublier de clore la conne%ion ; la #in du script $m1sKli5$close()! ?$

.e script a,,ic$e notre table liste qui contient ce stade trois enregistrements +

X 10!1B!/ <nsrer des donnes R partir d*#n ,orm#laire dep#is PHP

Dans un site dynamique, il est intressant de prvoir la possibilit d"insrer des donnes en ligne $a requ4te 3US258 3U8S permet d"a)outer une entre +
W+S-R, W+,* liste(WP. nom. possesseur. console. pri%. nbre)3oueurs)ma%. commentaires) H&NE-S(''. '2attle#ield /?<9'. 'VatricA'. 'VC'. <8. 80. '9nde guerre mondiale')

<5SE;T <5T4 O on veut insrer une entre liste O dans la table liste Entre parent$Hses O noms des c#amps dans lesquels vous sou#aitez placer des informations Uote + on peut ne pas prciser les noms de c#amps, dans ce cas 3l faut simplement lister les valeurs pour tous les c#amps sans e!ception =3D compris? dans le bon ordre 2A0"ES O valeurs insrer, dans le m4me ordre que les noms des c#amps indiqus 0es nombres =tels que /- et -: ici? n"ont pas besoin d"4tre entours d"apostrop$es Seules les c#aAnes de caract(res les ncessitent

10!1B!/ + 1G <nsrer des donnes dans #ne table MyS60 + mt$ode oriente ob8et FPD4G =-9JmysqlJPDSJinsert p#p?

<?php i# ( isset( $)V*S,F'nom'G )) I /* Conne%ion ; la base de donnes a ec VP* */ include("89)(1SDN)VP*)connect'php")! $nom = $)V*S,F'nom'G! $email = $)V*S,F'email'G! $age = $)V*S,F'age'G! // *n a3oute une entre dans la table liste ; lLaide dLune reKuTte prpare $reK = $dbh5$prepare('W+S-R, W+,* liste(nom. email. age) H&NE-S(4nom. 4email. 4age)')! $reK5$e%ecute(arra1( 'nom' =$ $nom. 'email' =$ $email. 'age' =$ $age ))! echo '<span st1le="color4 red"$Ne // Uermeture de la conne%ion $dbh = +ENN! O ?$ isiteur a bien t a3out _</span$'!

<html$ <head$ <title$Wnsertion d'un enregistrement</title$ </head$ <bod1$ <br$Vour ous inscrire remplisseJ ces cases 4<br$ <#orm method="post" action="89)(1SDN)VP*)insert'php"$ +om 4 <input t1pe="te%t" name="nom"$<br$ -mail 4 <input t1pe="te%t" name="email"$<br$ mge 4 <input t1pe="te%t" name="age"$<br$ <input t1pe="submit" name="submit" alue="Ce alide mon inscription"$<br$ <br$ <input t1pe="button" alue="Retour ; la page d'administration" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)admin'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </#orm$ </bod1$ </html$

;n petit dtour par P#pMy.dmin vous confirmera si l"enregistrement a bien t effectu

10!1B!/ + 'G <nsrer des donnes dans #ne table MyS60 + mt$ode procd#rale FmysqliG =-9JMyS'$Jinsert p#p?
<?php // Na page d'insertion i# ( isset( $)V*S,F'nom'G )) I include("8/)conne%ion'inc'php")! $nom = $)V*S,F'nom'G! $email = $)V*S,F'email'G! $age = $)V*S,F'age'G! // Vrparation de la reKuete $sKl = "W+S-R, W+,* liste (nom. email. age) H&NE-S ('$nom'.'$email'.'$age')"! // -n oi de la reKuTte au ser eur (1SDN m1sKli)Kuer1($m1sKli. $sKl)! echo '<br$+ous a ons bien enregistr otre inscription. merci'<br$'! echo '<br$<a hre# = "89)(1SDN)lire'php"$<h/$Suite de la isite</h/$</a$<br$'! O ?$ <html$ <head$ <title$Uormulaire d'inscription</title$ </head$ <bod1$ <br$Vour ous inscrire remplisseJ ces cases 4<br$ <#orm method="post" action="89)m1sKl)insert'php"$ +om 4 <input t1pe="te%t" name="nom"$<br$ -mail 4 <input t1pe="te%t" name="email"$<br$ mge 4 <input t1pe="te%t" name="age"$<br$ <input t1pe="submit" name="submit" alue="Ce alide mon inscription"$ </#orm$ </bod1$ </html$

;n petit dtour par P#pMy.dmin vous confirmera si l"enregistrement a bien t effectu

X 10!1B!1 Modi,ier #n enre%istrement dep#is PHP

$a requ4te ;PD.82 vous permet de modifier les enregistrements d"un ou plusieurs c#amps dans votre table

EVP&,- liste S-, email = 'annielg[orange'#r'. age = '<9' Q:-R- WP = '8' n' ou n' EVP&,- liste S-, email = 'annielg[orange'#r'. age = '<9' Q:-R- nom = '&nnie Necullier5\al an'

k "PDATE O on va modifier une entre k liste O Uom de la table k SET O suivi des c#amps modifier, entre apostrop#es ou guillemets, spars par des virgules $es autres c#amps =non cits? ne seront pas modifis k &HE;E O dire MyS'$ quelle enregistrement il doit modifier =sinon toutes les entres seraient affectes D? + Soit d*apr(s le c#amp 3D soit d*apr(s le c#amp nom attention ce c#amp doit 4tre unique D

10!1B!1 + 1G Modi,ier des donnes dans #ne table MyS60 + mt$ode oriente ob8et FPD4G =-9JMyS'$JPDSJmodif p#p?
<?php $message = ''! $id = ''! $nom = ''! $email = ''! $age = ''! // Na page d'insertion i# ( isset( $)V*S,F'nom'G)) I /* Conne%ion ; la base de donnes a ec VP* */ include("89)(1SDN)VP*)connect'php")! $nom = $)V*S,F'nom'G! /* "S-N-C," toile =$ *n slectionne tous les champs "UR*(" la table liste */ $sKl = "S-N-C, * UR*( liste"! $resultat = $dbh5$Kuer1($sKl)! /* echo '<br$Niste des enregistrements de la base 4<br$'!*/ /* *n a##iche chaKue entre une ; une */ Xhile ($roX = $resultat5$#etch(VP*44U-,C:)&SS*C)) I /*print)r($roX)! echo $roXF'id'G'' 5 ''$roXF'nom'G'' 5 ''$roXF'email'G'' 5 ''$roXF'age'G'' ans<br$'!*/ W# ($roXF'nom'G == $nom) /* Si rai on e%cute ce Kui se trou e entre les crochets */ I $id = $roXF'id'G! $nom = $roXF'nom'G! $email = $roXF'email'G! $age = $roXF'age'G! OO /*echo "/) $nom $email $age<br$"!*/

i# ( isset( $)V*S,F'email'G )) I i# ( $)V*S,F'email'G _= '') I $email = $)V*S,F'email'G! // & ec une reKuTte prpare $reK = $dbh5$prepare('EVP&,- liste S-, email = 4email Q:-R- nom = 4nom')! $reK5$e%ecute(arra1('nom' =$ $nom.'email' =$ $email))! OO /* echo "9) $nom $email $age<br$"!*/ i# ( isset( $)V*S,F'age'G )) I i# ( $)V*S,F'age'G _= '') I $age = $)V*S,F'age'G! // & ec une reKuTte prpare $reK = $dbh5$prepare('EVP&,- liste S-, age = 4age Q:-R- nom = 4nom')! $reK5$e%ecute(arra1('nom' =$ $nom.'age' =$ $age))! OO /* echo "B) $nom $email $age<br$"!*/ // Uermeture de la conne%ion $dbh = +ENN! OelseI $message = '<span st1le="color4 red"$ <= entreJ otre nom ici</span$'! O i# ( $nom _= '' ) I $message = '<span st1le="color4 red"$ <= entreJ otre nom ici</span$'! O /* echo "<) $nom $email $age<br$"!*/ ?$ <html$ <head$ <title$(odi#ication d'un enregistrement</title$ </head$ <bod1$ <#orm method="post" action="89)(1SDN)VP*)modi#'php"$ -ntreJ d'abord otre nom ici puis '-n o1er' ( ous modi#iereJ apr=s) 4<br$ +om 4 <input t1pe="te%t" name="nom" alue="<?php print $nom! ?$"$<?php echo '<span st1le="color4 red"$''$message''</span$' ?$<br$ <input t1pe="submit" name="submit" alue="-n o1er"$<br$<br$ (odi#ieJ otre mail puis cliKueJ sur '(odi#ier' 4<br$ -mail4 <input t1pe="te%t" name="email" alue="<?php print $email! ?$"$<br$ (odi#ieJ otre ige puis cliKueJ sur '(odi#ier' 4<br$ mge 4 <input t1pe="te%t" name="age" alue="<?php print $age! ?$"$<br$ <input t1pe="submit" name="submit" alue="(odi#ier"$<br$ <br$<input t1pe="button" alue="Retour ; la page d'administration" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)admin'php' " st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5 Xeight4bold"onclicA$<br$ </#orm$ </bod1$ </html$

P#pMy.dmin vous confirmera que l"enregistrement a bien t modifi

10!1B!1 + 'G Modi,ier des donnes dans #ne table MyS60 + mt$ode procd#rale FmysqliG =-9JMyS'$Jmodif p#p?
<?php $msg = ''! $id = ''! $nom = ''! $email = ''! $age = ''! // Na page d'insertion i# ( isset( $)V*S,F'nom'G)) I /* Conne%ion ; la base de donnes */ reKuire)once('8/)conne%ion'inc'php')! $nom = $)V*S,F'nom'G! /* Na reKuTte "Select" retourne un 3eu de rsultats */ $Kuer1 = "S-N-C, * UR*( liste NW(W, /0"! $result = $m1sKli5$Kuer1($Kuer1)! echo '<br$Hoici l]'enregistrement ; modi#ier 4'! /* tableau associati# */ $roX = $result5$#etch)arra1((6SDNW)&SS*C)! // on dcoupe les lignes de rsultat et on les met dans un tableau associati# dans l'ordre of elles arri ent Xhile ( $roX = m1sKli)#etch)arra1($result. (6SDNW)2*,:)) I W# ($roXF'nom'G == $nom) /* Si rai on e%cute ce Kui se trou e entre les crochets */ I $id = $roXF'id'G! $nom = $roXF'nom'G! $email = $roXF'email'G! $age = $roXF'age'G! echo "<br$$id 5 $nom 5 $email 5 $age ans<br$<br$"! O O // modi#ication de l'email i# ( isset( $)V*S,F'email'G)) I i# ( $)V*S,F'email'G _= '') I $oldemail = $email! $email = $)V*S,F'email'G! i# ( $oldemail _= $email) I $sKl = "EVP&,- liste S-, email = "'"'$email'"'" Q:-R- nom ="'"'$nom'" ! echo $sKl'"<br$"! //en oi de la reKuete au ser eur (1SDN $result=m1sKli)Kuer1($linA. $sKl)! /*test si la reKuete est e%ecute */ i# (m1sKli)a##ected)roXs($linA) === /) I $msg = '<span st1le="color4 red"$email modi#i 4)<br$</span$'! O else I $msg = '<span st1le="color4 red"$-rreur de (odi#ication email _<br$'! $msg '= m1sKli)error($linA)! $msg '= '</span$'! O OOO // modi#ication de l'ige i# ( isset( $)V*S,F'age'G) ) I

i# ( $)V*S,F'age'G _= '') I $oldage = $age! $age = $)V*S,F'age'G! i# ( $oldage _= $age) I $sKl = "EVP&,- liste S-, age = "'"'$age'"'" Q:-R- nom ="'"'$nom'" ! //en oi de la reKuete au ser eur (1SDN $result=m1sKli)Kuer1($linA. $sKl)! /*test si la reKuete est e%ecute */ i# (m1sKli)a##ected)roXs($linA) === /) I $msg '= '<span st1le="color4 red"$ige modi#i 4)<br$</span$'! O else I $msg = '<span st1le="color4 red"$-rreur de (odi#ication ige _<br$'! $msg '= m1sKli)error($linA)! $msg '= '</span$'! O OOO ! echo $msg! O ?$ <html$ <head$ <title$(odi#ication</title$ </head$ <bod1$ Vour modi#ier otre mail ou otre ige entreJ d'abord otre nom puis otre email ou otre ige 4<br$ <#orm method="post" action="89)m1sKl)modi#'php"$ -ntreJ d'abord otre nom ici puis '-n o1er' ( ous modi#iereJ apr=s) 4<br$ +om 4 <input t1pe="te%t" name="nom" alue="<?php print $nom! ?$"$<?php echo '<br$<span st1le="color4 red"$''$msg''</span$' ?$ <input t1pe="submit" name="submit" alue="-n o1er"$<br$<br$ (odi#ieJ otre mail puis cliKueJ sur '(odi#ier' 4<br$ -mail4 <input t1pe="te%t" name="email" alue="<?php print $email! ?$"$<br$ (odi#ieJ otre ige puis cliKueJ sur '(odi#ier' 4<br$ mge 4 <input t1pe="te%t" name="age" alue="<?php print $age! ?$"$<br$ <input t1pe="submit" name="submit" alue="(odi#ier"$<br$ </#orm$ </bod1$ </html$

X 10!1B!? S#pprimer #n enre%istrement dep#is PHP

$a clause &HE;E vous permet de c#oisir l"enregistrement que vous sou#aitez supprimer, si vous n"utilisez pas cette clause, la table sera compl(tement vide de son contenu $"instruction DE0ETE est donc manipuler avec attention D

10!1B!? + 1G S#pprimer #n enre%istrement d9#ne table MyS60 + mt$ode oriente ob8et FPD4G =-9JMyS'$JPDSJsuppr p#p?
<?php $nom = ''! $message = ''! i# ( isset( $)V*S,F'nom'G )) I /* Conne%ion ; la base de donnes a ec VP* */ include("89)(1SDN)VP*)connect'php")! $nom = $)V*S,F'nom'G! // *n a3oute une entre dans la table liste ; lLaide dLune reKuTte prpare $reK = $dbh5$prepare('P-N-,- UR*( liste Q:-R- nom = 4nom')! $reK5$e%ecute(arra1('nom' =$ $nom))! echo '<span st1le="color4 red"$ Ne isiteur '' $nom '' a bien t supprim _ </span$'! /* Uermeture de la conne%ion $dbh = +ENN!*/ O else I $message = ' <= entreJ le nom ici'! O i# ( $nom _= '' ) I $message = ' <= entreJ le nom ici'! O ?$ <html$ <head$ <title$Suppression d'un enregistrement</title$ </head$ <bod1$ <#orm method="post" action="89)(1SDN)VP*)suppr'php"$ -ntreJ ici le nom ; supprimer puis cliKueJ sur 'Supprimer' 4<br$ +om 4 <input t1pe="te%t" name="nom" alue="<?php print $nom! ?$"$<?php echo '<span st1le="color4 red"$''$message''</span$' ?$<br$ <input t1pe="submit" name="submit" alue="Supprimer"$<br$ <br$<input t1pe="button" alue="Retour ; la page d'administration" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)admin'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5 Xeight4bold"onclicA$<br$ </#orm$ </bod1$ </html$

2oici la pa%e $tml aprHs s#ppression d9#n isite#r +

10!1B!? + 'G S#pprimer #n enre%istrement d9#ne table MyS60 + mt$ode procd#rale FmysqliG =-9JMyS'$J suppr p#p?
<?php $nom = ''! $message = ''! i# ( isset( $)V*S,F'nom'G )) I //conne%ion ; la base de donnes reKuire)once('8/)conne%ion'inc'php')! $nom = $)V*S,F'nom'G! //preparation de la reKuete $sKl = "P-N-,- UR*( liste Q:-R- nom="'"'$nom'" ! //en oi de la reKuete au ser eur (1SDN $result=m1sKli)Kuer1($linA. $sKl)! /*test si la reKuete est e%ecute */ i# (m1sKli)a##ected)roXs($linA) === /) I $msg = '<span st1le="color4 red"$Supprim 4)</span$'! O else I $msg = '<span st1le="color4 red"$-rreur de suppression_<br$'! $msg '= m1sKli)error($linA)! $msg '= '</span$'! O ! echo $msg! O ?$ <html$ <head$ <title$Suppression d'un enregistrement</title$ </head$ <bod1$ <#orm method="post" action="89)(1SDN)suppr'php"$ -ntreJ ici le nom ; supprimer puis cliKueJ sur 'Supprimer' 4<br$

+om 4 <input t1pe="te%t" name="nom" alue="<?php print $nom! ?$"$<?php echo '<span st1le="color4 red"$''$message''</span$' ?$<br$ <input t1pe="submit" name="submit" alue="Supprimer ce isiteur"$<br$ </#orm$ </bod1$ </html$

X 10!1B!A Trier #ne table dep#is PHP

8rions la table par noms d*utilisateurs en ordre ascendant 4;DE; )] vous permet de c#oisir un ordre pour l*affic#age, en prcisant AS. vous aurez une sortie en ordre croissant, et avec DES. en ordre dcroissant

10!1B!A + 1G Trier par noms #ne table MyS60 + mt$ode oriente ob8et FPD4G =-9JMyS'$JPDSJtriJnom p#p?
<?php /* Conne%ion ; la base de donnes */ include("89)(1SDN)VP*)connect'php")! // on a chercher tous les noms de la table Ku'on trie par ordre croissant $resultat=$dbh5$Kuer1("S-N-C, nom UR*( liste *RP-R 26 nom &SC")! // on eut Kue le rsultat soit rcuprable sous #orme d'ob3et $resultat5$setUetch(ode(VP*44U-,C:)*2C)! // on rcup=re la liste des noms Xhile( $ligne = $resultat5$#etch() ) I // on a##iche les noms echo '+om = ''$ligne5$nom''<br /$'! O // on #erme le curseur des rsultats $resultat5$closeCursor()! ?$ <html$ <head$ <title$,ri par nom des enregistrements</title$ </head$ <bod1$ <br$ <input t1pe="button" alue="Retour ; la page d'administration" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)admin'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </bod1$ </html$

Bous pourrez de m4me crer facilement des scripts pur trier votre table par id, par email, par age, etc vous de )ouer D

X 10!1B!B "n script d9administration po#r %rer la table

&e script est )uste un simple tableau de liens, matrialiss par des boutons bien aligns et styliss =-9JMyS'$JPDSJadmin p#p?
<html$ <head$ <title$&dministration de la base de donnes</title$ </head$ <bod1$ <h/$&dministration de la base de donnes</h/$ <p$ <table Xidth=700 border=0$ <tr$ <td Xidth=<00 border=0$ <input t1pe="button" st1le="Xidth4 /?7p%! height4 98p%" alue="&##ichage de toute la base" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)lire'php'" st1le="bacAground5 color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </td$ <td Xidth=<00 border=0$ <input t1pe="button" st1le="Xidth4 /?7p%! height4 98p%" alue=",rier par id et a##icher" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)tri)id'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </td$ </tr$ <tr$ <td Xidth=<00 border=0$ <input t1pe="button" st1le="Xidth4 /?7p%! height4 98p%" alue="Wnsrer un enregistrement" name="NeNien/" onclicA="sel#'location'hre#='89)m1sKl)VP*)insert'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </td$ <td Xidth=<00 border=0$ <input t1pe="button" st1le="Xidth4 /?7p%! height4 98p%" alue=",rier par nom et a##icher" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)tri)nom'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </td$

</tr$ <tr$ <td Xidth=<00 border=0$ <input t1pe="button" st1le="Xidth4 /?7p%! height4 98p%" alue="(odi#ier un enregistrement" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)modi#'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </td$ <td Xidth=<00 border=0$ <input t1pe="button" st1le="Xidth4 /?7p%! height4 98p%" alue=",rier par email et a##icher" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)tri)email'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </td$ </tr$ <tr$ <td Xidth=<00 border=0$ <input t1pe="button" st1le="Xidth4 /?7p%! height4 98p%" alue="Supprimer un enregistrement" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)suppr'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </td$ <td Xidth=<00 border=0$ <input t1pe="button" st1le="Xidth4 /?7p%! height4 98p%" alue=",rier par ige et a##icher" name="NeNien/" onclicA="sel#'location'hre#='89)(1SDN)VP*)tri)age'php'" st1le="bacAground5color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ <br$ </td$ </tr$ </table$ </bod1$ </html$

10!1E .rer #n systHme d9a#t$enti,ication sc#ris W mt$ode oriente ob8et FPD4G

Sn veut crer un e!tranet administrable distance par une interface en PHP &e site doit 4tre #autement scuris et accessible uniquement au! utilisateurs identifis =figurant dans une liste? $es sessions PHP permettront de garder trace de l*identification donne par les visiteurs et valide par l*application 3l y a de#: sol#tions + 1G ;tiliser les contr@les d*acc(s du serveur web + ceci ncessite de pouvoir modifier la configuration d*.pac#e via un fic#ier #taccess 'G ;tiliser une aut#entification gre par l*application PHP dans le cadre d*une session 5o#s

pr,rons la seconde sol#tion! $*arc#itecture du syst(me comprend trois fic#iers + a#t$!p$p + est le formulaire pour s*identifier eri,!p$p + valide les donnes soumises et l*ensemble nomPmot de passe qui identifient le visiteur sec#re!p$p + est plac en #aut de c#aque page scuriser 3l vrifie si le visiteur bien acc(s la ressource demande

.vec P#pMy.dmin, crez d"abord une base de donnes OsiteSs#rO et dans cette base, crez une table O#sersO contenant les c$amps login, nom, prenom, pass, email Boici la structure de la base +

Boici la liste des personnes enregistres dans la base +

X 10!1E!1 0e ,orm#laire po#r s9identi,ier : a#t$!p$p + mt$ode oriente ob8et FPD4G

Si l*on faisait simple, le formulaire d*identification n*aurait besoin que de 9 c#amps, le nom =pseudonyme? et le mot de passe 3ci nous avons prvu les c#amps login, nom, prenom, pass, email E:emple + =-NJaut# p#p?
<html$ <head$ <title$Wdenti#ication</title$ </head$ <_55 Vremier #ichier = authenti#ication du isiteur //55$ <bod1$ <h9$Wdenti#ieJ5 ous pour accder ; ce site scuris</h9$ <table Xidth=@70 border=0$ <#orm method="post" action="CD_2erifEphp"$ <tr$ <td Xidth=/@0 border=0$<input t1pe="te%t" name="login" alue="Nogin ou pseudon1me"$</td$ <td Xidth=<00 border=0$Nogin 4 SaisisseJ ici otre pseudon1me</td$ </tr$ <tr$

<td Xidth=/@0 border=0$<input t1pe="te%t" name="nom" alue=" otre +om ici"$</td$ <td Xidth=<00 border=0$+om 4 SaisisseJ ici otre +om</td$ </tr$ <tr$ <td Xidth=/@0 border=0$<input t1pe="te%t" name="prenom" alue=" otre Vrnom ici"$</td$ <td Xidth=<00 border=0$Vrnom 4 SaisisseJ ici otre Vrnom</td$ </tr$ <tr$ <td Xidth=/@0 border=0$<input t1pe="passXord" name="motdepasse"$</td$ <td Xidth=<00 border=0$(ot de passe 4 SaisisseJ ici otre mot de passe</td$ </tr$ <tr$ <td Xidth=/@0 border=0$<input t1pe="te%t" name="email" alue=" otre)email[ici"$</td$ <td Xidth=<00 border=0$-5(ail 4 SaisisseJ ici otre adresse email</td$ </tr$ <tr$ <td Xidth=/@0 border=0$<input t1pe="te%t" name="email)9" alue=" otre)email[ici"$</td$ <td Xidth=<00 border=0$-5(ail 4 Con#irmeJ la saisie de otre email ici</td$ </tr$ <tr$ <td Xidth=/@0 border=0$<input t1pe="submit" st1le="Xidth4 /80p%! height4 9<p%" name="conne%ion" alue="Ce m'identi#ie"$ </#orm$</td$ <td Xidth=<00 border=0$<input t1pe="button" st1le="Xidth4 980p%! height4 9<p%" alue="Vas encore inscrit ? 5 CliKueJ WCW" name="NeNien/" onclicA="sel#'location'hre#='CD_auth_inscriptEphp'" st1le="bacAground5 color4Zececec" st1le="color4Xhite! #ont5Xeight4bold"onclicA$ </td$ </tr$ </table$ </bod1$ </html$

X 10!1E!' le ,orm#laire po#r s9inscrire : 1-Sa#t$Sinscript!p$p + mt$ode oriente ob8et FPD4G

&e script vrifie si l*ensemble nom Q mot de passe correspond bien un utilisateur identifi =figurant dans la table MySql? =-NJaut#Jinscript p#p?
<?php i# ( isset( $)V*S,F'login'G )) I /* Conne%ion ; la base de donnes a ec VP* */ include("8B)(1SDN)VP*)connect'php")! $login = $)V*S,F'login'G! $nom = $)V*S,F'nom'G! $prenom = $)V*S,F'prenom'G! $motdepasse = $)V*S,F'motdepasse'G!

$email = $)V*S,F'email'G! $email)9 = $)V*S,F'email)9'G! W# ($email _= $email)9) I /* Si email n'est pas correct email n'est pas gal ; email)9 */ echo 'Hotre email semble incorrect. merci de le recti#ier' ' ! echo '<a hre# = "8B)auth'php"$ retour</a$'! /* Si email est correct on e%cute ce Kui suit */ O else I // *n a3oute une entre dans la table users ; lLaide dLune reKuTte prpare $reK = $dbh5$prepare('W+S-R, W+,* users(login. nom. prenom. pass. email) H&NE-S(4login. 4nom. 4prenom. 4pass. 4email)')! $reK5$e%ecute(arra1( 'login' =$ $login. 'nom' =$ $nom. 'prenom' =$ $prenom. 'pass' =$ $motdepasse. 'email' =$ $email ))! echo '<span st1le="color4 red"$Cher isiteur. ous Ttes maintenant inscrit _ 5 Sou eneJ5 ous bien ; l]'a enir de otre login et de otre mot de passe pour ce site' (erci'</span$'! echo '<br$<a hre# = "8B) eri#'php"$<h/$Suite de la isite</h/$</a$<br$'! // Uermeture de la conne%ion $dbh = +ENN! OO ?$ <html$ <head$ <title$Wnscription</title$ </head$ <_55 Wnscription du isiteur //55$ <bod1$ <h9$Wdenti#ieJ5 ous pour accder ; ce site scuris</h9$ <table Xidth=@70 border=0$ <#orm method="post" action="8B)auth)inscript'php"$ <tr$ <td Xidth=/@0 border=0$<input t1pe="te%t" name="login" alue="Nogin ou pseudon1me"$</td$ <td Xidth=<00 border=0$Nogin 4 SaisisseJ ici otre pseudon1me</td$ </tr$ <tr$ <td Xidth=/@0 border=0$<input t1pe="te%t" name="nom" alue=" otre +om ici"$</td$ <td Xidth=<00 border=0$+om 4 SaisisseJ ici otre +om</td$ </tr$ <tr$ <td Xidth=/@0 border=0$<input t1pe="te%t" name="prenom" alue=" otre Vrnom ici"$</td$ <td Xidth=<00 border=0$Vrnom 4 SaisisseJ ici otre Vrnom</td$ </tr$ <tr$ <td Xidth=/@0 border=0$<input t1pe="passXord" name="motdepasse"$</td$ <td Xidth=<00 border=0$(ot de passe 4 SaisisseJ ici otre mot de passe</td$ </tr$ <tr$

<td Xidth=/@0 border=0$<input t1pe="te%t" name="email" alue=" otre)email[ici"$</td$ <td Xidth=<00 border=0$-5(ail 4 SaisisseJ ici otre adresse email</td$ </tr$ <tr$ <td Xidth=/@0 border=0$<input t1pe="te%t" name="email)9" alue=" otre)email[ici"$</td$ <td Xidth=<00 border=0$-5(ail 4 Con#irmeJ la saisie de otre email ici</td$ </tr$ <tr$ <td Xidth=/@0 border=0$<input t1pe="submit" st1le="Xidth4 /80p%! height4 9<p%" name="conne%ion" alue="Ce m'identi#ie"$</#orm$</td$ <td Xidth=<00 border=0$</td$ </tr$ </table$ </bod1$ </html$

X 10!1E!- la alidation d# nom et d# mot de passe : eri,!p$p + mt$ode oriente ob8et FPD4G

&e script vrifie si l*ensemble nom Q mot de passe correspond bien un utilisateur identifi =figurant dans une liste? $a fonction verifpass=Knom,Kpass? compare le nom et le mot de passe au! donnes d*une base mysql Sn peut aussi, comme recommand plus #aut, rcuprer l*adresse 3P du visiteur + ec#o "Botre adresse 3P est + " 3SSE;2E;U*;EM4TESADD;*V G E:emple + =-NJverif p#p?
<?php function 2erifpass($nom.$motdepasse) I /* Soit une base de donnes nomme "site)sur" et une table nomme "user" contenant les champs sui ants 5 identi#iant = id)user 5 nom d'utilisateur = login 5 mot de passe non cr1pt = pass (dans un e%emple rel. il #aut tou3ours utiliser un mot de passe cr1pt a ec la #onction cr1pt() par e%emple) hashage du mot de passe $pXd = md8($)V*S,F'pXd'G)! */ // Conne%ion (1SDN $dbhote = 'localhost'! $dbuser = 'root'! $dbpass = ''! $dbbase = 'site)sur'! $dsn = "m1sKl4dbname=$dbbase!host=$dbhote" ! $dbh = neX VP*($dsn. $dbuser. $dbpass) !

// Cration de la reKuTte SDN $nom)sKl = $dbh5$Kuote($nom) ! $pass)sKl = $dbh5$Kuote($motdepasse) ! $sKl ="S-N-C, count(*) as nbres UR*( users " ' " Q:-R- login=$nom)sKl &+P pass=$pass)sKl" ! // -%cution de la reKuTte SDN $result = $dbh5$Kuer1($sKl) ! $roX = $result5$#etch() ! $result = null ! // Si un seul utilisateur est trou . c'est bon _ i# ($roXF'nbres'G == /) I return ,RE- ! O else I return U&NS- ! OO /* [[[[[[[[ 8in de la fonction 2erifpass*+ [[[[[[[[ */ // Wnitialisation de la session session)start()! $message = ''! // Si on a reMu les donnes du #ormulaire 8B)auth'php ou 8B)auth)inscript'php i# (isset( $)V*S,F'login'G) aa isset( $)V*S,F'motdepasse'G) aa isset( $)V*S,F'email'G ) ) I // *n les rcup=re $message = 'Hotre adresse WV est 4 ' ' $)S-RH-RF'R-(*,-)&PPR'G ' '<br$'! $nom = $)V*S,F'login'G! $motdepasse = $)V*S,F'motdepasse'G! $email = $)V*S,F'email'G! // Hri#ions si le mot de passe est alide et dans la base de donnes ; l'aide de la #onction eri#pass() i# ( eri#pass( $nom. $motdepasse )) I // si le mot de passe est alide le isiteur est identi#i // on change alors d'identi#iant de session pour plus de scurit session)regenerate)id()! // *n sau egarde alors le nom du isiteur dans la session (par scurit. pas son mot de passe.) $)S-SSW*+F'nom'G = $nom ! $message '= '<br$Hous Ttes correctement identi#i'! $message '= '<br$<a hre# = "8B)secure'php"$<h/$Suite de la isite</h/$</a$<br$'! O else I // Sinon on a ertit le isiteur $message '= '<br$-rreur login ou mot de passe '! $message '= '<a hre# = "8B)auth'php"$ retour</a$'! O O else I // Sinon un des champs 'login'. 'motdepasse'. ou 'email' n'est pas rempli $message '= '<br$En des champs login. mot de passe. ou email est ide '! $message '= '<a hre# = "8B)auth'php"$ retour</a$'! O ?$ <html$ <head$

<title$Halidation nom et mot de passe</title$ </head$ <bod1$ <p$ <?php echo $message ?$ </p$ </bod1$ </html$

X 10!1E!/ le script de protection de la pa%e : sec#re!p$p + mt$ode oriente ob8et FPD4G

&e script vrifie si le visiteur bien acc(s la ressource demande Sn a)oute en #aut de c#aque page scuriser + incl#deF*sec#re!p$p*G G qui y fait appel =secure p#p?
<?php // Wnitialisation de la session session)start()! // *n ri#ie si le isiteur est identi#i i# ( _isset( $)S-SSW*+F'nom'G )) I /* si la ariable $)S-SSW*+ n'e%iste pas. l'utilisateur n'est pas identi#i. on le redirige donc ers la page d'authenti#ication */ header('Nocation4 8B)auth'php')! // Vuis on arrTte l'e%cution du script e%it()! O ?$ <html$ <head$ <title$-space scuris</title$ </head$ <bod1$ <h/$-space scuris</h/$ <p$Hous ne pou eJ ''''</p$ </bod1$ </html$

10!'0 .rer #n site marc$and sc#ris W mt$ode procd#rale FmysqliG

Sn veut crer un e!tranet administrable distance par une interface en PHP &e site doit 4tre #autement scuris et accessible uniquement au! administrateurs identifis =figurant dans une liste? $es sessions PHP permettront de garder trace de l*identification donne par les administrateurs et valide par l*application

10!'0!A .onne:ion et men# W mt$ode procd#rale FmysqliG

X 10!'0!A1 le script de conne:ion + mt$ode procd#rale FmysqliG

=--J conne!ion inc p#p?


<?php $m1ser er = 'localhost'! $m1login = 'root'! $m1pXd = ''! $m1bdd = 'site)sur'! /* Conne%ion ; la base de donnes */ $linA = m1sKli)connect( $m1ser er. $m1login. $m1pXd. $m1bdd )! $m1sKli = neX m1sKli( $m1ser er. $m1login. $m1pXd. $m1bdd )! /* Hri#ication de la conne%ion */ i# (m1sKli)connect)errno()) I print#("lchec de la conne%ion 4 Ys]n". m1sKli)connect)error())! e%it()! O echo 'Hous Ttes connect au ser eur et ; la base<br$'! ?$

X 10!'0!A' le script d9a#t$enti,ication + mt$ode procd#rale FmysqliG

=--Jaut# p#p?
<?php $email = ''! $m1pXd = ''! $message = ''! $nb)result = 0! i# ( isset( $)V*S,F'email'G )) I i# ($)V*S,F'email'G) I reKuire)once('88)conne%ion'inc'php')! $email = $)V*S,F'email'G!

/* hashage du mot de passe $m1pXd = md8($)V*S,F'm1pXd'G)! */ $m1pXd = $)V*S,F'm1pXd'G! $rKt = "S-N-C, nom. prenom UR*( users Q:-R- email = '$email' &+P pass = '$m1pXd'"! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ($result = m1sKli)Kuer1($linA. $rKt)) I /* Ptermine le nombre de lignes du 3eu de rsultats */ $nb)result = m1sKli)num)roXs($result)! print#("Ne 3eu de rsultats a Yd lignes']n". $nb)result)! O /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ($nb)result = /) I /* Si le nombre d'enregistrements === / alors authenti#ication *k */ session)start()! $)S-SSW*+F' alide'G = /! Xhile ($roX = $result5$#etch)assoc()) I print# ("Ys (Ys)]n". $roXF"nom"G. $roXF"prenom"G)! $)S-SSW*+F'nom'G = $roXF'nom'G! $)S-SSW*+F'prenom'G = $roXF'prenom'G! O header('Nocation4 http4//localhost/88)menu'php')! e%it()! O else I /* &uthenti#ication pas *k */ $message = '<span st1le="color4 red"$(au ais login ou mot de passe</span$'! O /* Uerme le 3eu de rsultats */ m1sKli)#ree)result($result)! OO ?$ <html$ <head$ <title$&uthenti#ication</title$ </head$ <bod1$ <h/$&uthenti#ication</h/$ <#orm method="post" action="88)auth'php"$ -(ail 4 <input t1pe="te%t" name="email" alue="<?php echo $email!?$"$ <br$ pXd 4 <input t1pe="passXord" name="m1pXd" alue="<?php echo $m1pXd!?$"$ <br$ <input t1pe="submit" name="login" alue="login"$ </#orm$ <?php echo $message! ?$ </bod1$ </html$

X 10!'0!A- Modi,ier le mot de passe + mt$ode procd#rale FmysqliG

=--JmodifJpassword p#p?

<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 88)auth'php')! e%it()! O reKuire)once('88)conne%ion'inc'php')! $message = ''! $login = ''! i# ( isset( $)V*S,F'login'G )) I $login = $)V*S,F'login'G! echo "<br$login 4 ". $login! $sKl = "S-N-C, pass UR*( users Q:-R- login = '$login'"! // $sKl = "S-N-C, * UR*( users Q:-R- login = '$id'"! echo "<br$". $sKl! $result = m1sKli)Kuer1($linA. $sKl)! $nb)result = m1sKli)num)roXs($result)! // Hri#ication de l'e%istance du compte echo '<br$$nb)result = '. $nb)result! i# ($nb)result == /) I $roX = m1sKli)#etch)arra1($result)! // Hri#ication Kue l'ancien mot de passe est bon i# ($roXF'pass'G == $)V*S,F'old)pXd'G) I echo '<br$&ncien passXord correct _'! // Hri#ication Kue les nou eau% mots de passe sont bons i# ($)V*S,F'neX)pXd'G == $)V*S,F'neX)pXd9'G) I echo '<br$+ou eau% passXords corrects _'! $rKt = 'EVP&,- users S-, pass = ]'''$)V*S,F'neX)pXd'G'']' Q:-R- login = ]'''$)V*S,F'login'G'']''! m1sKli)Kuer1($linA.$rKt)! i# (m1sKli)a##ected)roXs($linA) == /) I $message = '<br$<span st1le="color4 red"$*k 4 mot de passe mis ; 3our'</span$'! unset($)V*S,)! O else I $message = '<br$<span st1le="color4 red"$-chec mise ; 3our. erreur inconnue _</span$'! O O else I $message = '<br$<span st1le="color4 red"$Nes nou eau% mots de passe ne correspondent pas _</span$'! O O else I $message = '<br$<span st1le="color4 red"$&ncien mot de passe erron _</span$'! O O else I $message = '<br$<span st1le="color4 red"$Ce login n]'e%iste pas _ </span$'! unset($)V*S,F'login'G)! O O ?$ <html$ <head$

<title$(odi#ication du mot de passe</title$ </head$ <bod1$ <#orm method="post" action="88)modi#)passXord'php"$ login 4 <input t1pe="te%t" name="login" alue="<?php echo $login! ?$"$ <br$ ancien mot de passe 4 <input t1pe="passXord" name="old)pXd"$ <br$ nou eau mot de passe 4<input t1pe="passXord" name="neX)pXd"$ <br$ nou eau mot de passe(9) 4<input t1pe="passXord" name="neX)pXd9"$ <br$ <input t1pe="submit" name="bouton" alue=" alider"$ </#orm$ <h9$<?php echo $message! ?$</h9$ <br$<br$ <h9$<a hre#="88)menu'php"$Retour (enu principal</a$</h9$ </bod1$ </html$

X 10!'0!A/ la pa%e d9administration + mt$ode procd#rale FmysqliG

=--Jmenu p#p?
<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 http4//localhost/88)auth'php')! e%it()! O echo '2on3our '. $)S-SSW*+F'prenom'G. ' '. $)S-SSW*+F'nom'G! echo '<h/$&P(W+WS,R&,W*+</h/$'! ?$ <html$ <head$ <title$Vage d'administration</title$ </head$ <bod1$<br$ <a hre#="http4//localhost/88)a##)utilisateur'php/?msg=&ucun message"$Niste des utilisateurs</a$<br$ <a hre#="http4//localhost/88)a3out)utilisateur'php"$&3outer un utilisateur</a$<br$ <a hre#="http4//localhost/88)modi#)passXord'php"$(odi#ier un mot de passe</a$<br$ <br$<br$ <a hre#="http4//localhost/88)a##)article'php"$Niste des articles</a$<br$ <a hre#="http4//localhost/88)a3out)article'php"$&3outer un article</a$<br$ <a hre#="http4//localhost/88)stat)article'php"$StatistiKues sur les articles</a$<br$ <br$

<a hre#="http4//localhost/88)site'php"$<h9$Retour ; ce site Xeb</h9$</a$<br$ <a hre#="88)logout'php"$Pconne%ion</a$<br$ </bod1$ </html$

X 10!'0!A1 la Dconne:ion + mt$ode procd#rale FmysqliG

=--Jlogout p#p?
<?php // Wnitialisation de la session' // Si ous utiliseJ un autre nom // session)name("autrenom") session)start()! // Ptruit toutes les $)S-SSW*+ = arra1()! // // // i# O ariables de session

Si ous ouleJ dtruire compl=tement la session. e##aceJ galement le cooAie de session' +ote 4 cela dtruira la session et pas seulement les donnes de session _ (isset($)C**kW-Fsession)name()G)) I setcooAie(session)name(). ''. time()5<9000. '/')!

// Uinalement. on dtruit la session' session)destro1()! header('Nocation4 http4//localhost/88)auth'php')! e%it()! ?$

X 10!'0!A? la pa%e d# site web F#ltra+simpli,ieG + mt$ode procd#rale FmysqliG

=--Jsite p#p?
<?php session)start()! // si utilisateur pas authenti#i. le rediriger d'authenti#ication i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 88)auth'php')! e%it()! O echo '<h/$-space scuris</h/$'! ers la page

echo '2on3our '. $)S-SSW*+F'nom'G. '. tu es. comme tou3ours. le plus beau 45)'! ?$ <html$ <head$ <title$Vage du site Xeb</title$ </head$ <bod1$<br$ <p$<a hre#="http4//localhost/88)logout'php"$Pconne%ion</a$</p$ </bod1$ </html$

10!'0!) 7rer l9#tilisate#r W mt$ode procd#rale FmysqliG

X 10!'0!)1 A,,ic$a%e des #tilisate#rs + mt$ode procd#rale FmysqliG

=--JaffJutilisateur p#p?
<?php $nb)result = 0! session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 http4//localhost/88)auth'php')! e%it()! O reKuire)once('88)conne%ion'inc'php')! $sKl = 'S-N-C, * UR*( users'! i# ($result = m1sKli)Kuer1($linA. $sKl)) I /* Ptermine le nombre de lignes du 3eu de rsultats */ $nb)result = m1sKli)num)roXs($result)! print#("Wl 1 a Yd utilisateurs r#rencs']n". $nb)result)! O i# ($nb)result _= 0) I /*Si le nombre d'enregistrements _= 0 alors liste utilisateurs *k */ echo $)\-,F'msg'G.'<br$'! /* Compteur pour l'a##ichage a ec couleurs alternes */ $i = 0! echo '<h9$NWS,- P-S E,WNWS&,-ERS</h9$'! echo '<table$'! echo '<tr$<td$P-,&WN E,WNWS&,-ER</td$<td$-UU&C-R</td$<td$(*PWUW-R</td$</tr$'! Xhile ($roX = $result5$#etch)assoc()) I /* \estion de l'a##ichage a ec couleurs alternes */ i# ($i Y 9) $bgcolor='Xhite'! else

$bgcolor='ZdBdaed'! $iRR! $login = $roXF'login'G! echo "<tr bgcolor='"'$bgcolor'"'$<td$<a hre#='http4//localhost/88)detail)utilisateur'php?id="'$roXF'login'G'"'$"' $roXF'email'G'"</a$</td$"! echo "<td$<a hre#='http4//localhost/88)e##ace)utilisateur'php?id="' $roXF'login'G'"'$e##acer</a$</td$"! echo "<td$<a hre#='http4//localhost/88)modi#)utilisateur'php?id="' $roXF'login'G'"'$modi#ier</a$"! echo "</td$</tr$"! O echo '</table$'! O else I /* Niste utilisateurs pas *k */ $message = '<span st1le="color4 red"$&ucun enregistrement dans la base</span$'! O ?$ <html$ <head$ <title$&##ichage utilisateurs</title$ </head$ <bod1$ <br$<br$ <h9$<a hre#="http4//localhost/88)menu'php"$Retour (enu principal</a$</h9$ </bod1$ </html$

X 10!'0!)' Dtail d9#n #tilisate#r + mt$ode procd#rale FmysqliG

=--JdetailJutilisateur p#p?
<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 88)auth'php')! e%it()! O reKuire)once('88)conne%ion'inc'php')! $id = $)\-,F'id'G! // echo 'login 4 ''$id''<br$'! /* Si l'id n'est pas renseign alors ren o1er l'utilisateur i# (_$id = $)\-,F'id'G) I header('Nocation4 http4//localhost/88)menu'php')! e%it()! O $sKl = "S-N-C, * UR*( users Q:-R- login = '$id'"! // echo 'ReKuTte sKl 4 ''$sKl''<br$'! $result = m1sKli)Kuer1($linA. $sKl)! Xhile ( $roX = m1sKli)#etch)assoc($result) ) I

ers le menu */

echo '<h9$Ptails sur l]'utilisateur ''$roXF'prenom'G'' '' $roXF'nom'G'' 4</h9$'! echo 'login 4 ''$roXF'login'G''<br$'! echo 'nom 4 ''$roXF'nom'G''<br$'! echo 'prnom 4 ''$roXF'prenom'G''<br$'! echo 'pass 4 ''$roXF'pass'G''<br$'! echo 'email 4 ''$roXF'email'G''<br$<br$'! O ?$ <html$ <head$ <title$Ptail dLun utilisateur</title$ </head$ <bod1$ <a hre#="http4//localhost/88)a##)utilisateur'php/?msg=&ucun message"$Niste des utilisateurs</a$<br$ <h9$<a hre#="http4//localhost/88)menu'php"$Retour (enu principal</a$</h9$ </bod1$ </html$

X 10!'0!)- A8o#ter #n #tilisate#r + mt$ode procd#rale FmysqliG

=--Ja)outJutilisateur p#p?
<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 http4//localhost/88)auth'php')! e%it()! O function is_email($email) I // Hri#ie la s1nta%e d'une adresse mail return preg)match('/hFh[GR[Fa5J&5g05?')5GR]'Fa5J&5gGR$/'. $email)! O /* Uin de #unction is)email() */ $login = ''! $nom = ''! $prenom = ''! $pass = ''! $email = ''! $msg = ''! $msg)login = ''! $msg)pass = ''! $msg)email = ''! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ( isset( $)V*S,F'email'G )) I $login = $)V*S,F'login'G! $nom = $)V*S,F'nom'G! $prenom = $)V*S,F'prenom'G! $pass = $)V*S,F'pass'G! $email = $)V*S,F'email'G! /* UN&\ Kui permet de ri#ier la alidit des champs du #ormulaire */

$ alide)#orm = ,RE-! // Hri#ication du #ormulaire i# ( _$)V*S,F'login'G) I //le login n'est pas renseign $msg)login = '<span st1le="color4 red"$HeuilleJ entreJ otre login SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'pass'G) I //le pasXord n'est pas renseign $msg)pass = '<span st1le="color4 red"$HeuilleJ entreJ otre mot de passe SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _is_email($)V*S,F'email'G) ) I //le mail n'est pas correct $msg)email = '<span st1le="color4 red"$HeuilleJ ri#ier l]'adresse mail SHV</span$<br$'! $ alide)#orm = U&NS-! O /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ( $ alide)#orm === ,RE- ) I reKuire)once('88)conne%ion'inc'php')! $sKl = "W+S-R, W+,* users (login. nom. prenom. pass. email) H&NE-S ('$login'. '$nom'. '$prenom'. '$pass'. '$email')"! $result = m1sKli)Kuer1($linA. $sKl)! i# ( m1sKli)a##ected)roXs($linA)=== / ) I $msg = '<span st1le="color4 red"$Etilisateur enregistr</span$'! header("Nocation4 http4//localhost/88)a##)utilisateur'php? msg=$msg")! e%it()! O else I $msg = '<span st1le="color4 red"$-rreur 4 Etilisateur non enregistr</span$'! O O O echo $msg ! ?$ <html$ <head$ <title$&3outer un utilisateur dans la base</title$ </head$ <bod1$ <h9$&3outer un utilisateur dans la base</h9$ <#orm method="post" action="88)a3out)utilisateur'php"$ Nogin <span st1le="color4 red"$*</span$ <input t1pe="te%t" name="login" alue="<?php echo $login!?$<?php echo $msg)login!?$"$<br$ (ot de passe <span st1le="color4 red"$*</span$4 <input t1pe="passXord" name="pass"$<?php echo $msg)pass!?$<br$ +om 4 <input t1pe="te%t" name="nom" alue="<?php echo $nom!?$"$<br$ Vrnom 4 <input t1pe="te%t" name="prenom" alue="<?php echo $prenom!? $"$<br$ -mail <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="email" alue="<?php echo $email! ?$"$<?php echo $msg)email!?$<br$ <span st1le="color4 red"$* = Ces champs doi ent Ttre renseigns<br$</span$ <input name="-n o1er" t1pe="submit" alue="-n o1er"$

</#orm$ <br$<br$ <h9$<a hre#="http4//localhost/88)menu'php"$Retour (enu principal</a$</h9$ </bod1$ </html$

X 10!'0!)/ Modi,ier #n #tilisate#r + mt$ode procd#rale FmysqliG

=--JmodifJutilisateur p#p?
<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 88)auth'php')! e%it()! O reKuire)once('88)conne%ion'inc'php')! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $id = $)\-,F'id'G! $sKl = "S-N-C, * UR*( users Q:-R- login = '$id'"! // echo '<br$'. $sKl! $result = m1sKli)Kuer1($linA. $sKl)! $roX = m1sKli)#etch)assoc($result)! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $login = $roXF'login'G! $nom = $roXF'nom'G! $prenom = $roXF'prenom'G! $pass = $roXF'pass'G! $email = $roXF'email'G! echo '<br$Ponnes de cette personne 4'! echo '<br$'. $login. ' '. $nom. ' '. $prenom. ' '. $pass. ' '. $email! echo '<br$2on3our '. $)S-SSW*+F'prenom'G. ' '. $)S-SSW*+F'nom'G! $msg)mail = ''! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ( isset( $)V*S,F'email'G )) I $login = $)V*S,F'login'G! $nom = $)V*S,F'nom'G! $prenom = $)V*S,F'prenom'G! $pass = $)V*S,F'pass'G! $email = $)V*S,F'email'G! /* Ne mail est obligatoire */ i# ( $email ) I $sKl = "EVP&,- users S-, login='"'$login'"'. nom='"'$nom'"'. prenom='"'$prenom'"'. email='"'$email'"' Q:-R- login ='"'$login'"'"! echo '<br$'. $sKl! $result = m1sKli)Kuer1($linA. $sKl)! i# ( m1sKli)a##ected)roXs($linA) === /) I $msg = "<br$<span st1le='color4 red'$Etilisateur bien modi#i. $login</span$"! echo '2on3our '. $)S-SSW*+F'prenom'G. ' '. $)S-SSW*+F'nom'G! unset($)S-SSW*+F'id'G)!

msg=$msg")!

header("Nocation4 http4//localhost/88)a##)utilisateur'php?

e%it()! O else I echo "<br$<span st1le='color4 red'$-rreur 4 Etilisateur non modi#i. $login</span$"! O O else I $msg)mail = '<span st1le="color4 red"$-ntrer le mail ici SHV _ </span$'! O O else I /* (ise en session de l'WP */ $)S-SSW*+F'id'G = $id! $sKl = $result = $roX = 'S-N-C, * UR*( users Q:-R- ologino = ''"'$id'"! m1sKli)Kuer1($linA. $sKl)! m1sKli)#etch)assoc($result)!

$login = $roXF'login'G! $nom = $roXF'nom'G! $prenom = $roXF'prenom'G! $pass = $roXF'pass'G! $email = $roXF'email'G! O ?$ <html$ <head$ <title$(odi#ier un utilisateur dans la base</title$ </head$ <bod1$ <h/$(odi#ication de l'utilisateur <?php echo $)\-,F'id'G!?$</h/$ <#orm method="post" action="88)modi#)utilisateur'php?id="<?php echo $login!? $""$ login4 <input t1pe="te%t" name="login" alue="<?php echo $login!?$"$<br$ nom4 <input t1pe="te%t" name="nom" alue="<?php echo $nom!?$"$<br$ prnom4 <input t1pe="te%t" name="prenom" alue="<?php echo $prenom!? $"$<br$ pass4 <input t1pe="te%t" name="pass" alue="<?php echo $pass!?$"$<br$ email*4 <input t1pe="te%t" name="email" alue="<?php echo $email!?$"$<? php echo $msg)mail! ?$<br$ <span st1le="color4 red"$(*) donnes obligatoires</span$<br$<br$ <input name="-n o1er" t1pe="submit" alue="-n o1er"$ </#orm$ <h9$<a hre#="http4//localhost/88)menu'php"$Retour (enu principal</a$</h9$ </bod1$ </html$

X 10!'0!)1 E,,acer #n #tilisate#r + mt$ode procd#rale FmysqliG

=--JeffaceJutilisateur p#p?

<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 http4//localhost/88)auth'php')! e%it()! O reKuire)once('88)conne%ion'inc'php')! $id = $)\-,F'id'G! //preparation de la reKuete $sKl = 'P-N-,- UR*( osite)suro'ouserso Q:-R- ologino = ''"'$id'"! //echo $sKl! $result = m1sKli)Kuer1($linA. $sKl)! i# ( m1sKli)a##ected)roXs($linA) ) I $msg = '<span st1le="color4 red"$<br$Etilisateur e##ac</span$'! header("Nocation4 http4//localhost/88)a##)utilisateur'php?msg=$msg")! e%it()! O else I $msg = '<span st1le="color4 red"$<br$-rreur 4 Etilisateur non e##ac</span$'! header("Nocation4 http4//localhost/88)a##)utilisateur'php?msg=$msg")! e%it()! O ?$

10!'0!. 7rer les articles d# site W mt$ode procd#rale FmysqliG

X 10!'0!.1 A,,ic$a%e des articles + mt$ode procd#rale FmysqliG

=--JaffJ article p#p?


<?php $nb)result = 0! session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 http4//localhost/88)auth'php')! e%it()! O $msg =''! reKuire)once('88)conne%ion'inc'php')! $sKl = 'S-N-C, * UR*( articles'! i# ($result = m1sKli)Kuer1($linA. $sKl)) I /* Ptermine le nombre de lignes du 3eu de rsultats */ $nb)result = m1sKli)num)roXs($result)! print#("Wl 1 a Yd articles r#rencs dans la base']n". $nb)result)! O i# ( isset( $)\-,F'msg'G )) I $msg = $)\-,F'msg'G! echo '<span st1le="color4 red"$''$msg''</span$'!

O i# ($nb)result _= 0) I /*Si le nombre d'enregistrements _= 0 alors liste articles *k */ /* Compteur pour l'a##ichage a ec couleurs alternes */ $i = 0! echo '<h9$NWS,- P-S &R,WCN-S P- N& 2&S-</h9$'! echo '<table$'! echo '<tr$<td$C&,-\*RW-</td$<td$P-,&WN &R,WCN-''' </td$<td$-UU&C-R</td$<td$(*PWUW-R</td$</tr$'! Xhile ($roX = $result5$#etch)assoc()) I /* \estion de l'a##ichage a ec couleurs alternes */ i# ($i Y 9) $bgcolor='Xhite'! else $bgcolor='ZdBdaed'! $iRR! $+omCategorie = $roXF'+omCategorie'G! echo "<tr bgcolor='"'$bgcolor'"'$"! echo "<td$$+omCategorie</td$"! echo "<td$<a hre#='http4//localhost/88)detail)article'php?id="' $roXF'Re#&rticle'G'"'$"'$roXF'+om&rticle'G'"</a$</td$"! echo "<td$<a hre#='http4//localhost/88)e##ace)article'php?id="' $roXF'Re#&rticle'G'"'$e##acer</a$</td$"! echo "<td$<a hre#='http4//localhost/88)modi#)article'php?id="' $roXF'Re#&rticle'G'"'$modi#ier</a$</td$"! echo '<td$'! echo "<a hre#='http4//localhost/88)detail)article'php?id="' $roXF'Re#&rticle'G'"'$"! echo '<img st1le="Xidth4 8?p%! height4 </p%!" src="''/pict/'' $roXF'Wmage&rticle'G''" alt="''$roXF'Re#&rticle'G''" title="'' $roXF'Re#&rticle'G''"$'! echo '</a$'! '</td$'! echo "</a$</td$"! echo "</tr$"! O echo '</table$'! O else I /* liste utilisateurs pas *k */ $message = '<span st1le="color4 red"$&ucun article dans la base</span$'! O /* Xhile ( $roX = m1sKli)#etch)assoc($result) ) I echo 'mod=le4 '! echo '<a hre#="88)detail)produit'php?id=''$roXF'id)produit'G''"$'' $roXF'modele'G''</a$'! echo 'd d<a hre#="88)e##ace)produit'php?id='' $roXF'id)produit'G''"$e##acer</a$'! echo 'd d<a hre#="88)modi#)produit'php?id='' $roXF'id)produit'G''"$modi#</a$'! echo '<br$<br$'! O */ ?$ <html$ <head$ <title$&##ichage des articles de la base</title$ </head$

<bod1$ <h9$<a hre#="http4//localhost/88)menu'php"$Retour (enu principal</a$</h9$ </bod1$ </html$

X 10!'0!.' Dtail d9#n article + mt$ode procd#rale FmysqliG

=--JdetailJ article p#p?


<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 http4//localhost/88)auth'php')! e%it()! O reKuire)once('88)conne%ion'inc'php')! $id = $)\-,F'id'G! // echo 'login 4 ''$id''<br$'! /* Si l'id n'est pas renseign alors ren o1er l'utilisateur ers le menu */ i# (_$id = $)\-,F'id'G) I header('Nocation4 http4//localhost/88)menu'php')! e%it()! O $sKl = "S-N-C, * UR*( articles Q:-R- Re#&rticle = '$id'"! // echo 'ReKuTte sKl 4 ''$sKl''<br$'! $result = m1sKli)Kuer1($linA. $sKl)! Xhile ( $roX = m1sKli)#etch)assoc($result) ) I echo '<br$''$roXF'+oCategorie'G''<sup$e</sup$ Catgorie'! echo ' 4 ''$roXF'+omCategorie'G'' 4 ''$roXF'PescripCategorie'G''<br$'! echo '<h9$Ptail article 4</h9$'! // $Xpict = /0 * $roXF'Qpict'G! // $hpict = /0 * $roXF':pict'G! i# ($roXF'-nStocA'G _= 0) I $message = '&rticle en stocA li rable rapidement<br$'! O else I $message = '&rticle disponible sur commande<br$'! O echo '&rticle 4 "''$roXF'+om&rticle'G''" '! echo 'R#' 4 ''$roXF'Re#&rticle'G''<br$'! echo '<img src="''/pict/''$roXF'Wmage&rticle'G''" alt="'' $roXF'Re#&rticle'G''" title="''$roXF'Re#&rticle'G''"$'! echo '<br$<h9$Pescripti# &rticle 4 </h9$''$roXF'Pescrip&rticle'G''<br$'! echo '<br$<span st1le="color4 red"$<b$Vri% de Hente 4 '' $roXF'Vri%Hente'G'' ^uros</b$</span$<br$'! echo $message! echo '<br$<br$'! O ?$ <html$ <head$ <title$Ptail dLun article de la base</title$

</head$ <bod1$ <a hre#="http4//localhost/88)a##)article'php/?msg=&ucun message"$Retour Niste des articles</a$<br$ <h9$<a hre#="http4//localhost/88)menu'php"$Retour (enu principal</a$</h9$ </bod1$ </html$

X 10!'0!.- A8o#ter #n article + mt$ode procd#rale FmysqliG

=--Ja)outJ article p#p?


<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 http4//localhost/88)auth'php')! e%it()! O $Re#&rticle = ''! $+oCategorie = ''! $+omCategorie = ''! $PescripCategorie = ''! $Wmage&rticle = ''! $CheminWmage = ''! $Qpict = ''! $:pict = ''! $+om&rticle = ''! $Pescrip&rticle = ''! $Vri%HenteCentimesd-uros= ''! $Vri%Hente = ''! $-nStocA = ''! $SousCategorie = ''! $(otCle = ''! $CategorieNien,ableau = ''! $+omSousCategorie = ''! $PescripSousCategorie = ''! $+omUichierVage:tml = ''! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $msg = ''! $msg)Re#&rticle = ''! $msg)+oCategorie = ''! $msg)+omCategorie = ''! $msg)PescripCategorie = ''! $msg)Wmage&rticle = ''! $msg)CheminWmage = ''! $msg)Qpict = ''! $msg):pict = ''! $msg)+om&rticle = ''! $msg)Pescrip&rticle = ''! $msg)Vri%HenteCentimesd-uros= ''! $msg)Vri%Hente = ''! $msg)-nStocA = ''!

$msg)SousCategorie = ''! $msg)(otCle = ''! $msg)CategorieNien,ableau = ''! $msg)+omSousCategorie = ''! $msg)PescripSousCategorie = ''! $msg)+omUichierVage:tml = ''! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ( isset( $)V*S,F'Re#&rticle'G )) I /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $Re#&rticle = $)V*S,F'Re#&rticle'G! $+oCategorie = $)V*S,F'+oCategorie'G! $+omCategorie = $)V*S,F'+omCategorie'G! $+omCategorie = addslashes($+omCategorie)! $PescripCategorie = $)V*S,F'PescripCategorie'G! $PescripCategorie = addslashes($PescripCategorie)! $Wmage&rticle = $)V*S,F'Wmage&rticle'G! $Qpict = $)V*S,F'Qpict'G! $:pict = $)V*S,F':pict'G! $+om&rticle = $)V*S,F'+om&rticle'G! $+om&rticle = addslashes($+om&rticle)! $Pescrip&rticle = $)V*S,F'Pescrip&rticle'G! $Pescrip&rticle = addslashes($Pescrip&rticle)! $Vri%HenteCentimesd-uros= $)V*S,F'Vri%HenteCentimesd-uros'G! $Vri%Hente = $)V*S,F'Vri%Hente'G! $-nStocA = $)V*S,F'-nStocA'G! $SousCategorie = $)V*S,F'SousCategorie'G! $(otCle = $)V*S,F'(otCle'G! $CategorieNien,ableau = $)V*S,F'CategorieNien,ableau'G! $+omSousCategorie = $)V*S,F'+omSousCategorie'G! $+omSousCategorie = addslashes($+omSousCategorie)! $PescripSousCategorie = $)V*S,F'PescripSousCategorie'G! $PescripSousCategorie = addslashes($PescripSousCategorie)! $+omUichierVage:tml = $)V*S,F'+omUichierVage:tml'G! /* UN&\ Kui permet de ri#ier la alidit des champs du #ormulaire */ $ alide)#orm = ,RE-! // Hri#ication du #ormulaire i# ( _$)V*S,F'Re#&rticle'G) I // la R#rence de l'&rticle n'est pas renseigne $msg)Re#&rticle = '<span st1le="color4 red"$-ntreJ ici la R#rence de l]'&rticle SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'+oCategorie'G) I // le +p de Catgorie n'est pas renseign $msg)+oCategorie = '<span st1le="color4 red"$-ntreJ ici le +p de Catgorie SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'+omCategorie'G) I // le +om de Catgorie n'est pas renseign $msg)+omCategorie = '<span st1le="color4 red"$-ntreJ ici le +om de Catgorie SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'PescripCategorie'G) I // le Pescripti# de Catgorie n'est pas renseign $msg)PescripCategorie = '<span st1le="color4 red"$-ntreJ ici le Pescripti# de Catgorie SHV</span$<br$'! $ alide)#orm = U&NS-!

O i# ( _$)V*S,F'Wmage&rticle'G) I // l'image correspondant ; l'article n'est pas prcise $msg)Wmage&rticle = '<span st1le="color4 red"$-ntreJ ici le nom d]'image correspondant ; l]'article SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'Qpict'G) I // la Nargeur de l'image petit #ormat n'est pas renseigne $msg)Qpict = '<span st1le="color4 red"$-ntreJ ici la Nargeur de l]'image petit #ormat SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F':pict'G) I // la :auteur de l'image petit #ormat n'est pas renseigne $msg):pict = '<span st1le="color4 red"$-ntreJ ici la :auteur de l]'image petit #ormat SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'+om&rticle'G) I // le +om de l'&rticle n'est pas renseign $msg)+om&rticle = '<span st1le="color4 red"$-ntreJ ici le +om de l]'&rticle SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'Pescrip&rticle'G) I // le Pescripti# de l'&rticle n'est pas renseign $msg)Pescrip&rticle = '<span st1le="color4 red"$-ntreJ ici le Pescripti# de l]'&rticle SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'Vri%HenteCentimesd-uros'G) I // le Vri% de Hente en Centimes d'-uros n'est pas renseign $msg)Vri%HenteCentimesd-uros = '<span st1le="color4 red"$-ntreJ ici le Vri% de Hente en Centimes d]'-uros SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'Vri%Hente'G) I // le Vri% de Hente en -uros n'est pas renseign $msg)Vri%Hente = '<span st1le="color4 red"$-ntreJ ici le Vri% de Hente en -uros SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'-nStocA'G) I // le +ombre d'articles en StocA n'est pas renseign $msg)-nStocA = '<span st1le="color4 red"$-ntreJ ici un +ombre d]'articles en StocA (non nul) SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'SousCategorie'G) I // le +p de la Sous Catgorie n'est pas renseign $msg)SousCategorie = '<span st1le="color4 red"$-ntreJ ici le +p de la Sous Catgorie SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'(otCle'G) I // le (ot Cl n'est pas renseign $msg)(otCle = '<span st1le="color4 red"$-ntreJ ici le (ot Cl caractrisant au mieu% l]'&rticle SHV</span$<br$'!

$ alide)#orm = U&NS-! O i# ( _$)V*S,F'CategorieNien,ableau'G) I // la Catgorie du Nien dans son ,ableau n'est pas renseign $msg)CategorieNien,ableau = '<span st1le="color4 red"$-ntreJ ici la Catgorie du Nien dans son ,ableau SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'+omSousCategorie'G) I // le +om de la sous Catgorie n'est pas renseign $msg)+omSousCategorie = '<span st1le="color4 red"$-ntreJ ici le +om de la sous Catgorie SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'PescripSousCategorie'G) I // le Pescripti# de la sous Catgorie n'est pas renseign $msg)PescripSousCategorie = '<span st1le="color4 red"$-ntreJ ici le Pescripti# de la sous Catgorie SHV</span$<br$'! $ alide)#orm = U&NS-! O i# ( _$)V*S,F'+omUichierVage:tml'G) I // le +om du Uichier de la Vage :tml n'est pas renseign $msg)+omUichierVage:tml = '<span st1le="color4 red"$-ntreJ ici le +om du Uichier de la Vage :tml SHV</span$<br$'! $ alide)#orm = U&NS-! O /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ( $ alide)#orm === ,RE- ) I reKuire)once('88)conne%ion'inc'php')! $sKl = "W+S-R, W+,* articles ( Re#&rticle. +oCategorie. +omCategorie. PescripCategorie. Wmage&rticle. Qpict. :pict. +om&rticle. Pescrip&rticle. Vri%HenteCentimesd-uros. Vri%Hente. -nStocA. SousCategorie. (otCle. CategorieNien,ableau. +omSousCategorie. PescripSousCategorie. +omUichierVage:tml ) H&NE-S ( '$Re#&rticle'. '$+oCategorie'. '$+omCategorie'. '$PescripCategorie'. '$Wmage&rticle'. '$Qpict'. '$:pict'. '$+om&rticle'.

'$Pescrip&rticle'. '$Vri%HenteCentimesd-uros'. '$Vri%Hente'. '$-nStocA'. '$SousCategorie'. '$(otCle'. '$CategorieNien,ableau'. '$+omSousCategorie'. '$PescripSousCategorie'. '$+omUichierVage:tml' )"! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ /* -ndroit of sont stocAes les images */ $+omWmage = $)UWN-SF'CheminWmage'GF'name'G! echo '$)UWN-SF]'CheminWmage]'GF]'name]'G = '. $+omWmage. '<br$'! $repertoire)image = 'C4/Xamp/XXX/pict/'! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $result = m1sKli)Kuer1($linA. $sKl)! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ( m1sKli)a##ected)roXs($linA) === / ) I $#ichier)tmp = $)UWN-SF'CheminWmage'GF'tmp)name'G! echo '$#ichier)tmp='. $#ichier)tmp. '<br$'! $#ichier)de# = $repertoire)image'$+omWmage! echo '$#ichier)de#='. $#ichier)de#. '<br$'! i# (mo e)uploaded)#ile( $#ichier)tmp . $#ichier)de# )) I $msg = '<span st1le="color4 red"$&rticle enregistr</span$'! header("Nocation4 http4//localhost/88)a##)article'php?msg=$msg")! e%it()! OelseI /* Ne #ichier n'est pas tlcharg*/ $msg = '-rreur de chargement de l]'image'! O OelseI $msg = '<span st1le="color4 red"$-rreur 4 &rticle non enregistr</span$'! O /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ O O echo $msg ! ?$ <html$ <head$ <title$&3outer un article dans la base</title$ </head$ <bod1$ <h9$&3outer un article dans la base</h9$ <#orm method="post" action="88)a3out)article'php" enct1pe="multipart/#orm5 data"$ R# &rticle <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="Re#&rticle" alue="<?php echo $Re#&rticle!? $"$<?php echo $msg)Re#&rticle!?$<br$ +p Catgorie <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="+oCategorie" alue="<?php echo $+oCategorie!? $"$<?php echo $msg)+oCategorie!?$<br$ +om Catgorie <span st1le="color4 red"$*</span$4

<input t1pe="te%t" name="+omCategorie" alue="<?php echo $+omCategorie!?$"$<?php echo $msg)+omCategorie!?$<br$ Pescripti# Catgorie <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="PescripCategorie" alue="<?php echo $PescripCategorie!?$"$<?php echo $msg)PescripCategorie!?$<br$ +om Wmage &rticle <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="Wmage&rticle" alue="<?php echo $Wmage&rticle!?$"$<?php echo $msg)Wmage&rticle!?$<br$ Chemin d'acc=s Wmage &rticle <span st1le="color4 red"$*</span$4 <input t1pe="#ile" name="CheminWmage" alue="<?php echo $CheminWmage!? $"$<?php echo $msg)CheminWmage!?$<br$ Nargeur image petit #ormat <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="Qpict" alue="<?php echo $Qpict!?$"$<?php echo $msg)Qpict!?$<br$ :auteur image petit #ormat <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name=":pict" alue="<?php echo $:pict!?$"$<?php echo $msg):pict!?$<br$ +om &rticle <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="+om&rticle" alue="<?php echo $+om&rticle!? $"$<?php echo $msg)+om&rticle!?$<br$ Pescripti# &rticle 4 <span st1le="color4 red"$* </span$ <br$<te%tarea name="Pescrip&rticle" roXs="/0" cols="80"$<?php echo $Pescrip&rticle!?$</te%tarea$ <?php echo $msg)Pescrip&rticle!?$<br$ Vri% de Hente en Centimes d'-uros <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="Vri%HenteCentimesd-uros" alue="<?php echo $Vri%HenteCentimesd-uros!?$"$ <?php echo $msg)Vri%HenteCentimesd-uros!?$<br$ Vri% de Hente en -uros <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="Vri%Hente" alue="<?php echo $Vri%Hente!? $"$<?php echo $msg)Vri%Hente!?$<br$ +ombre d'articles en StocA <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="-nStocA" alue="<?php echo $-nStocA!?$"$<span st1le="color4 red"$ +on nul SHV</span$ <?php echo $msg)-nStocA!?$<br$ +p Sous Catgorie <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="SousCategorie" alue="<?php echo $SousCategorie!?$"$<?php echo $msg)SousCategorie!?$<br$ (ot Cl <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="(otCle" alue="<?php echo $(otCle!?$"$<?php echo $msg)(otCle!?$<br$ Catgorie du Nien dans son ,ableau <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="CategorieNien,ableau" alue="<?php echo $CategorieNien,ableau!?$"$<?php echo $msg)CategorieNien,ableau!?$<br$ +om sous Catgorie <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="+omSousCategorie" alue="<?php echo $+omSousCategorie!?$"$ <?php echo $msg)+omSousCategorie!?$<br$ Pescripti# sous Catgorie <span st1le="color4 red"$*</span$ <input t1pe="te%t" name="PescripSousCategorie" alue="<?php echo $PescripSousCategorie!?$"$ <?php echo $msg)PescripSousCategorie!?$<br$ +om du Uichier de la Vage :tml <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="+omUichierVage:tml" alue="<?php echo $+omUichierVage:tml!?$"$ <?php echo $msg)+omUichierVage:tml!?$<br$

<span st1le="color4 red"$* = ,ous les champs doi ent Ttre renseigns<br$</span$ <input name="-n o1er" t1pe="submit" alue="-n o1er"$ </#orm$ <br$<br$ <h9$<a hre#="http4//localhost/88)menu'php"$Retour (enu principal</a$</h9$ </bod1$ </html$

X 10!'0!./ Modi,ier #n article + mt$ode procd#rale FmysqliG

=--JmodifJ article p#p?


<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 http4//localhost/88)auth'php')! e%it()! O reKuire)once('88)conne%ion'inc'php')! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $Re#&rticle = ''! $+oCategorie = ''! $+omCategorie = ''! $PescripCategorie = ''! $Wmage&rticle = ''! $CheminWmage = ''! $Qpict = ''! $:pict = ''! $+om&rticle = ''! $Pescrip&rticle = ''! $Vri%HenteCentimesd-uros= ''! $Vri%Hente = ''! $-nStocA = ''! $SousCategorie = ''! $(otCle = ''! $CategorieNien,ableau = ''! $+omSousCategorie = ''! $PescripSousCategorie = ''! $+omUichierVage:tml = ''! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $msg = ''! $msg)Re#&rticle = ''! $msg)+oCategorie = ''! $msg)+omCategorie = ''! $msg)PescripCategorie = ''! $msg)Wmage&rticle = ''! $msg)CheminWmage = ''! $msg)Qpict = ''! $msg):pict = ''! $msg)+om&rticle = ''! $msg)Pescrip&rticle = ''!

$msg)Vri%HenteCentimesd-uros= ''! $msg)Vri%Hente = ''! $msg)-nStocA = ''! $msg)SousCategorie = ''! $msg)(otCle = ''! $msg)CategorieNien,ableau = ''! $msg)+omSousCategorie = ''! $msg)PescripSousCategorie = ''! $msg)+omUichierVage:tml = ''! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ( isset( $)\-,F'id'G )) I $Re#&rticle = $)\-,F'id'G! $*ldRe#&rticle = $Re#&rticle! echo '<span st1le="color4 red"$/) ligne 8B Re#&rticle = '. $Re#&rticle. '<br$/) ligne 8B *ldRe#&rticle = '. $*ldRe#&rticle. '</span$'! i# ( _isset( $)V*S,F'Re#&rticle'G )) I /* NorsKue le #ormulaire n'a pas t modi#i */ $sKl = "S-N-C, * UR*( articles Q:-R- oRe#&rticleo = '$*ldRe#&rticle'"! echo '<br$ligne8@ sKl #ormulaire ide 4 '. $sKl! $result = m1sKli)Kuer1($linA. $sKl)! $roX = m1sKli)#etch)assoc($result)! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $Re#&rticle = $roXF'Re#&rticle'G! $+oCategorie = $roXF'+oCategorie'G! $+omCategorie = $roXF'+omCategorie'G! $PescripCategorie = $roXF'PescripCategorie'G! $Wmage&rticle = $roXF'Wmage&rticle'G! $Qpict = $roXF'Qpict'G! $:pict = $roXF':pict'G! $+om&rticle = $roXF'+om&rticle'G! $Pescrip&rticle = $roXF'Pescrip&rticle'G! $Vri%HenteCentimesd-uros = $roXF'Vri%HenteCentimesd-uros'G! $Vri%Hente = $roXF'Vri%Hente'G! $-nStocA = $roXF'-nStocA'G! $SousCategorie = $roXF'SousCategorie'G! $(otCle = $roXF'(otCle'G! $CategorieNien,ableau = $roXF'CategorieNien,ableau'G! $+omSousCategorie = $roXF'+omSousCategorie'G! $PescripSousCategorie = $roXF'PescripSousCategorie'G! $+omUichierVage:tml = $roXF'+omUichierVage:tml'G! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ echo '<br$ligne >? 5 Ponnes de cet article 4'! echo '<br$'. $Re#&rticle. ' 5 '. $+om&rticle. ' 5 Wllustration 4 '. $Wmage&rticle. ' 5 Vri% de Hente 4 '. $Vri%Hente. ' ^ '! O /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ /* (ise en session de l'WP */ $)S-SSW*+F'id'G = $*ldRe#&rticle! $Re#&rticle = ''! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $repertoire)image = 'C4/Xamp/XXX/pict/'! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ( isset( $)V*S,F'Re#&rticle'G )) I /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $Re#&rticle = $)V*S,F'Re#&rticle'G! $+oCategorie = $)V*S,F'+oCategorie'G! $+omCategorie = $)V*S,F'+omCategorie'G!

$+omCategorie = addslashes($+omCategorie)! $PescripCategorie = $)V*S,F'PescripCategorie'G! $PescripCategorie = addslashes($PescripCategorie)! $Wmage&rticle = $)V*S,F'Wmage&rticle'G! $Qpict = $)V*S,F'Qpict'G! $:pict = $)V*S,F':pict'G! $+om&rticle = $)V*S,F'+om&rticle'G! $+om&rticle = addslashes($+om&rticle)! $Pescrip&rticle = $)V*S,F'Pescrip&rticle'G! $Pescrip&rticle = addslashes($Pescrip&rticle)! $Vri%HenteCentimesd-uros= $)V*S,F'Vri%HenteCentimesd-uros'G! $Vri%Hente = $)V*S,F'Vri%Hente'G! $-nStocA = $)V*S,F'-nStocA'G! $SousCategorie = $)V*S,F'SousCategorie'G! $(otCle = $)V*S,F'(otCle'G! $CategorieNien,ableau = $)V*S,F'CategorieNien,ableau'G! $+omSousCategorie = $)V*S,F'+omSousCategorie'G! $+omSousCategorie = addslashes($+omSousCategorie)! $PescripSousCategorie = $)V*S,F'PescripSousCategorie'G! $PescripSousCategorie = addslashes($PescripSousCategorie)! $+omUichierVage:tml = $)V*S,F'+omUichierVage:tml'G! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ /* Na r#rence article est obligatoire */ i# ($Re#&rticle) I $sKl = "EVP&,- articles S-, Re#&rticle='"'$Re#&rticle'"'. +oCategorie='"'$+oCategorie'"'. +omCategorie='"'$+omCategorie'"'. PescripCategorie='"'$PescripCategorie'"'. Wmage&rticle='"'$Wmage&rticle'"'. Qpict='"'$Qpict'"'. :pict='"'$:pict'"'. +om&rticle='"'$+om&rticle'"'. Pescrip&rticle='"'$Pescrip&rticle'"'. Vri%HenteCentimesd-uros='"'$Vri%HenteCentimesd-uros'"'. Vri%Hente='"'$Vri%Hente'"'. -nStocA='"'$-nStocA'"'. SousCategorie='"'$SousCategorie'"'. (otCle='"'$(otCle'"'. CategorieNien,ableau='"'$CategorieNien,ableau'"'. +omSousCategorie='"'$+omSousCategorie'"'. PescripSousCategorie='"'$PescripSousCategorie'"'. +omUichierVage:tml='"'$+omUichierVage:tml'"' Q:-R- Re#&rticle = $*ldRe#&rticle"! echo '<br$ligne/B7 sKl 4 '. $sKl! $result = m1sKli)Kuer1($linA. $sKl)! $roX = m1sKli)#etch)assoc($result)! $Re#&rticle = $roXF'Re#&rticle'G! $+om&rticle = $roXF'+om&rticle'G! echo '<br$ligne/<B Re#&rticle 4 '. $Re#&rticle! echo '<br$ligne/<< +om&rticle 4 '. $+om&rticle! echo '<br$ligne/<8 m1sKli)a##ected)roXs($linA) = '. m1sKli)a##ected)roXs($linA)! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ i# ( m1sKli)a##ected)roXs($linA) === / ) I $#ichier)tmp = $)UWN-SF'CheminWmage'GF'tmp)name'G! echo '$#ichier)tmp='. $#ichier)tmp. '<br$'!

$#ichier)de# = $repertoire)image'$Wmage&rticle! echo '$#ichier)de#='. $#ichier)de#. '<br$'! i# (mo e)uploaded)#ile( $#ichier)tmp . $#ichier)de# )) $msg = '<span st1le="color4 red"$<br$&rticle

correctement modi#i</span$'!

unset($)S-SSW*+F'id'G)! header("Nocation4 http4//localhost/88)a##)article'php?msg=$msg")! e%it()! O else I /* Ne #ichier n'est pas tlcharg */ $msg = '-rreur de chargement de l]'image'! O O else I $msg = '<span st1le="color4 red"$<br$-rreur 4 &rticle non modi#i</span$'! O O else I $msg)Re#&rticle = '-ntreJ la r#rence article SHV _'! O /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ O else I /* rcupration de l'WP */ $Re#&rticle = $)S-SSW*+F'id'G! /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ $sKl9 = "S-N-C, * UR*( articles Q:-R- oRe#&rticleo = '$Re#&rticle'"! echo '<br$ligne/>B sKl9 4 '. $sKl9! $result = m1sKli)Kuer1($linA. $sKl9)! $roX = m1sKli)#etch)assoc($result)! /* Renseignement des champs a ant modi#ication */ $Re#&rticle = $roXF'Re#&rticle'G! $+oCategorie = $roXF'+oCategorie'G! $+omCategorie = $roXF'+omCategorie'G! $PescripCategorie = $roXF'PescripCategorie'G! $Wmage&rticle = $roXF'Wmage&rticle'G! $CheminWmage = $repertoire)image'$Wmage&rticle! echo '<br$ligne /7B $CheminWmage = '. $CheminWmage! $Qpict = $roXF'Qpict'G! $:pict = $roXF':pict'G! $+om&rticle = $roXF'+om&rticle'G! $Pescrip&rticle = $roXF'Pescrip&rticle'G! $Vri%HenteCentimesd-uros = $roXF'Vri%HenteCentimesd-uros'G! $Vri%Hente = $roXF'Vri%Hente'G! $-nStocA = $roXF'-nStocA'G! $SousCategorie = $roXF'SousCategorie'G! $(otCle = $roXF'(otCle'G! $CategorieNien,ableau = $roXF'CategorieNien,ableau'G! $+omSousCategorie = $roXF'+omSousCategorie'G! $PescripSousCategorie = $roXF'PescripSousCategorie'G! $+omUichierVage:tml = $roXF'+omUichierVage:tml'G! O /* [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ */ O else I $msg = '<span st1le="color4 red"$<br$-rreur 4 ligne 900 Re#&rticle non transmis par la mthode \-,</span$'! O

echo $msg ! echo '<span st1le="color4 red"$<br$9) ligne 90< neX Re#&rticle = '. $Re#&rticle. '</span$'! ?$ <html$ <head$ <title$(odi#ication un article dans la base</title$ </head$ <bod1$ <h9$(odi#ication de l'article <?php echo $Re#&rticle!?$ dans la base</h9$ Hoici les anciennes aleurs ; modi#ier ou ; conser er 4<br$<br$ <#orm method="post" action="88)modi#)article'php?id='<?php echo $*ldRe#&rticle!?$'" enct1pe="multipart/#orm5data"$ R# &rticle <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="Re#&rticle" alue="<?php echo $Re#&rticle!?$"$<?php echo $msg)Re#&rticle!?$<br$ +p Catgorie <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="+oCategorie" alue="<?php echo $+oCategorie!?$"$<?php echo $msg)+oCategorie!?$<br$ +om Catgorie <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="+omCategorie" alue="<?php echo $+omCategorie!?$"$<?php echo $msg)+omCategorie!? $<br$ Pescripti# Catgorie <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="PescripCategorie" alue="<?php echo $PescripCategorie!?$"$<?php echo $msg)PescripCategorie!?$<br$ +om Wmage &rticle <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="Wmage&rticle" alue="<?php echo $Wmage&rticle!?$"$<?php echo $msg)Wmage&rticle!? $<br$ Nargeur image petit #ormat <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="Qpict" alue="<?php echo $Qpict!?$"$<?php echo $msg)Qpict!?$<br$ :auteur image petit #ormat <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name=":pict" alue="<?php echo $:pict!?$"$<?php echo $msg):pict!?$<br$ +om &rticle <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="+om&rticle" alue="<?php echo $+om&rticle!?$"$<?php echo $msg)+om&rticle!?$<br$ Pescripti# &rticle 4 <span st1le="color4 red"$* </span$<br$<te%tarea name="Pescrip&rticle" roXs="/0" cols="80"$ <?php echo $Pescrip&rticle!?$</te%tarea$<?php echo $msg)Pescrip&rticle!?$<br$ Vri% de Hente en Centimes d'-uros <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="Vri%HenteCentimesd-uros" alue="<?php echo $Vri%HenteCentimesd-uros!?$"$<?php echo $msg)Vri%HenteCentimesd-uros!?$<br$ Vri% de Hente en -uros <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="Vri%Hente" alue="<?php echo $Vri%Hente!?$"$<?php echo $msg)Vri%Hente!?$<br$ +ombre d'articles en StocA <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="-nStocA" alue="<?php echo $-nStocA!?$"$<?php echo $msg)-nStocA!?$<br$ +p Sous Catgorie <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="SousCategorie"

alue="<?php echo $SousCategorie!?$"$<?php echo $msg)SousCategorie!? $<br$ (ot Cl <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="(otCle" alue="<?php echo $(otCle!?$"$<?php echo $msg)(otCle!?$<br$ Catgorie du Nien dans son ,ableau <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="CategorieNien,ableau" alue="<?php echo $CategorieNien,ableau!?$"$<?php echo $msg)CategorieNien,ableau!?$<br$ +om sous Catgorie <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="+omSousCategorie" alue="<?php echo $+omSousCategorie!?$"$<?php echo $msg)+omSousCategorie!?$<br$ Pescripti# sous Catgorie <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="PescripSousCategorie" alue="<?php echo $PescripSousCategorie!?$"$<?php echo $msg)PescripSousCategorie!?$<br$ +om du Uichier de la Vage :tml <span st1le="color4 red"$*</span$4 <input t1pe="te%t" name="+omUichierVage:tml" alue="<?php echo $+omUichierVage:tml!?$"$<?php echo $msg)+omUichierVage:tml!?$<br$ <b$Chemin d'acc=s Wmage &rticle</b$ <span st1le="color4 red"$*</span$4 <input t1pe="#ile" name="CheminWmage"$ <?php echo $msg)CheminWmage!?$<br$ <span st1le="color4 red"$RechercheJ peut5Ttre dans <?php echo $CheminWmage!?$ ou ailleurs sur otre machine'</span$<br$ <span st1le="color4 red"$* = ,ous les champs doi ent Ttre renseigns<br$</span$ <input name="-n o1er" t1pe="submit" alue="-n o1er les modi#ications"$ </#orm$ <h9$<a hre#="http4//localhost/88)menu'php"$Retour (enu principal</a$</h9$ </bod1$ </html$

X 10!'0!.1 S#pprimer #n article + mt$ode procd#rale FmysqliG

=--JeffaceJ article p#p?


<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 88)auth'php')! e%it()! O reKuire)once('88)conne%ion'inc'php')! $id = $)\-,F'id'G! $sKl = 'P-N-,- UR*( osite)suro'oarticleso Q:-R- oRe#&rticleo = ''"'$id'"! echo $sKl! $result = m1sKli)Kuer1($linA. $sKl)! i# ( m1sKli)a##ected)roXs($linA) === /) I /* Creation du message con#irmation e##acement d'un &rticle */

$msg = '/ &rticle e##ac _<br$VenseJ aussi ; retirer l]'image ''$id'''3pg du rpertoire pict'! header("Nocation4 http4//localhost/88)a##)article'php?msg=$msg")! e%it()! O else I echo "-rreur d'e##acement"! O ?$

X 10!'0!.?a Statistiq#es s#r les articles + mt$ode procd#rale FmysqliG

=--JstatJ article p#p?


<?php session)start()! i# ( _$)S-SSW*+F' alide'G ) I header('Nocation4 88)auth'php')! e%it()! O echo '<hB$StatistiKue des entes</hB$'! echo '<a hre#="88)stat)article)graph'php"$<img src="pict/\raphiKues'gi#" alt="\raphiKues" title="StatistiKues et \raphiKues"$</a$'! ?$ <html$ <head$ <title$StatistiKues sur les articles (accueil)</title$ </head$ <bod1$ <h9$<a hre#="http4//localhost/88)menu'php"$Retour (enu principal</a$</h9$ </bod1$ </html$

X 10!'0!.?b Statistiq#es s#r les articles a ec la bibliot$Hq#e Artic$ow FmysqliG

3l faut pour cela tlc#arger la bibliot#(que Artic$ow et l*installer dans un rpertoire que vous nommerez Artic$ow+p$p1 et que vous copierez dans votre rpertoire racine www =--JstatJarticleJgrap#?
<?php /* * ,his XorA is hereb1 released into the Vublic Pomain' * ,o ieX a cop1 o# the public domain dedication. * isit http4//creati ecommons'org/licenses/publicdomain/ or send a letter to * Creati e Commons. 88? +athan &bbott Qa1. Stan#ord. Cali#ornia ?<B08. ES&' * */ reKuire)once "C4/Xamp/XXX/&rtichoX5php8/NineVlot'class'php"! $graph = neX \raph(@00. <00)!

$graph5$set&nti&liasing(,RE-)! $group = neX Vlot\roup! $group5$grid5$set,1pe(Nine44P&S:-P)! $group5$setVadding(<0. +ENN. 90. +ENN)! $group5$a%is5$le#t5$setNabel+umber(7)! $group5$a%is5$le#t5$setNabelVrecision(/)! $group5$a%is5$le#t5$set,icASt1le(,icA44*E,)! // $% = arra1(9. <. 7. /@. B9. <7. 8@. @0. @9)! /* ******************** */ /* \nration des donnes */ #or ($cpt=/! $cpt < /B! $cptRR) I $stat)mois)passeFG = rand(0.80)! $stat)mois)courantFG = rand(0.80)! O $% = $stat)mois)passe! /* ************************ */ $plot = neX NineVlot($%)! $plot5$setColor(neX *range())! $plot5$setUillColor(neX Night*range(70))! $plot5$marA5$set,1pe((arA44CWRCN-)! $plot5$marA5$setUill(neX (idRed)! $plot5$marA5$setSiJe(8)! /* ******************************************** */ date)de#ault)timeJone)set('E,C')! $this)month = date('U')! $past)month = date('U'.time()5(B/ * 9< * @0 * @0))! /* ******************************************** */ $group5$legend5$add($plot. "$this)month ". Negend44(&Rk)! $group5$add($plot)! // $% = arra1(+ENN. +ENN. +ENN. /0. /9. /<. /7. 9@. <9)! $% = $stat)mois)courant! $plot = neX NineVlot($%)! $plot5$setColor(neX Color(/90. /90. B0. /0))! $plot5$setUillColor(neX Color(/90. /90. @0. ?0))! $plot5$marA5$set,1pe((arA44SDE&R-)! $plot5$marA5$setUill(neX ParA\reen)! $plot5$marA5$setSiJe(>)! $group5$add($plot)! /* #unction set6ear($ alue) I return $ alue R 9000! O $group5$a%is5$bottom5$label5$setCallbacAUunction('set6ear')! */ #unction set(onth($ alue) I return $ alue R/! O $group5$a%is5$bottom5$label5$setCallbacAUunction('set(onth')! /* #unction setk($ alue) I return round($ alue)''k'! O $group5$a%is5$le#t5$label5$setCallbacAUunction('setk')! #unction set^($ alue) I return round($ alue)'chr(/97)! O $group5$a%is5$le#t5$label5$setCallbacAUunction('set^')!

*/ $group5$legend5$add($plot. "$past)month". Negend44(&Rk)! $group5$legend5$setVosition(0'<8. 0'98)! $group5$legend5$shadoX5$smooth(,RE-)! $graph5$add($group)! $graph5$draX()! ?$

10!'1 .oncl#sion

Uous ne pouvons que reprendre ce qui avait t signal en introduction &e tutoriel a dlibrment t conXu comme une prsentation lmentaire des fonctionnalits des scripts PHP et de sa possibilit de conne!ion avec une base de donnes $a mise en luvre d"un site dynamique ncessitera bien videmment des lments supplmentaires que vous trouverez en librairie ou sur le 6eb

You might also like