Upload
tarik-el-maniani
View
32
Download
1
Embed Size (px)
Citation preview
Crationd'uneapplicationWEBavecPHP/MySQL
1
Crationd'uneapplicationWEBavecPHP/MySQL
CreruneapplicationWEBavecPHP/MySQL
ParPhilippeBousquet
Copyright(c)20032008PhilippeBousquet.
2
Crationd'uneapplicationWEBavecPHP/MySQL
Celivrelectroniqueestunerditiond'unarticledeprparationd'uneconfrencequej'avaiseffectuaulyceCaslerTalenceen2003/2004danslecadredesconfrencesdel'ABUL.
CeLivreestdistribuselonlestermesdelaGNUFreeDocumentationLicense.Copyright(c)20032008PhilippeBOUSQUET
3
Crationd'uneapplicationWEBavecPHP/MySQL
TabledesmatiresI. Introduction 5II. Lemodlededonnes 6III. Crationdelabasededonnes 11IV.Maquettagedel'application 21V. LeXHTML 23VI.LespagesduforumenXHTML 36VII.LamiseenformeparCSS 41VIII.Programmationdel'application 61IX.LelangagePHP 62X. L'applicationmyForum 81XI.Rfrences 104
4
Crationd'uneapplicationWEBavecPHP/MySQL
I.Introduction
Autraversdecelivre,nousallonsvoir lesdiffrentestapespourcreruneapplicationWEB, pour cela nous nous proposons de crer un forumde discussion bas sur lestechnologiessuivantes:
MySQLPourlestockageetlagestiondesdonnes
XHTMLetCSSPourlerendudenospagesHTML
PHPPourlaprogrammationdespartiesdynamiquesdenotreapplication
5
Crationd'uneapplicationWEBavecPHP/MySQL
II.Lemodlededonnes
Avantdeselancerdanslaprogrammation,ilconvientdebiendterminerl'ensembledesdonnes ainsi que les liaisons qu'elles ont entre elles. En effet la programmation nereprsentequ'peuprs20%dans lacrationd'uneapplication, lerestetantpartagentrel'Etudedecequel'onveutraliseretlestestsfinaux.
Dfinitiondesfonctionnalitsdel'applicationNousdevonsdansunpremiertempsdoncbiendfinircequenotreapplicationestcensefaire.Unforumdediscussionestenfaitunmcanismepermettantdesutilisateursdediscutersurdessujetsdiverstraversdesmessagescrits.
Lesutilisateursdoiventpouvoircrerdenouveauxsujetsdediscussions,ilsdoiventpouvoirlirelessujetsdesautresutilisateursetbienentendupouvoiryrpondre.
OrganisationgnraledesdonnesUnefois les fonctionnalitsfiges, nousdevonsorganisernosdonnesafindepouvoirconstituernotrebasededonnes.C'estcelleciquiseralecurdenotreapplication,doncnousdevonsyconsacrerunegrandeattentionpourquecellecinesoitpasmalconue,cequirendraitnotreapplicationmoinsfonctionnelle.
Dansl'tapeprcdentenousavonsvuapparaitretroisnotionsdistinctes:
L'utilisateurc'estunepersonnequimettraetliradesmessages. Lesujet ils'agitdupointdedpartdeladiscussion,ilregroupelesmessagesle
concernant. Lemessage c'est l'objetquipermetauxutilisateursdes'exprimersurunsujet
donn.
Doncnousvoyonsiciquenotreapplicationdevraaumoinsgrercestroisentits.Doncnousdevronscrertroistablespourconstituernotrebasededonnes.
Cependantpourquenotreapplicationsoitmoinsrbarbative,danslesensouauboutd'unmomentlesutilisateursrisquentdeseperdredanslajungledessujets,nousallonsintgrerunenouvellenotion:Lacatgorie.
Eneffetnousallonsdciderderegroupernossujetsparcatgories,ceaurapoureffetquenosutilisateur,aulieudelancerunediscussiondanslevide,nousallonsleurproposerdescatgoriesdanslesquellesilspourrontcrerleurssujetsdediscussions.
6
Crationd'uneapplicationWEBavecPHP/MySQL
Parexemple:
Utilisateur :darken
Catgorie :technique
Sujet :envoyerdesmailsavecOO
Message : "Il yabiendansoutils / options/programmesauxiliaireslapossibilitdechoisirunclientdemessageriepardfaut.Maisjen'arrivepassavoircommentenvoyerdesmails....."
NousauronsdoncquatreTablesdansnotrebasededonnes:
utilisateurs:quirassembleralesinfossurlesutilisateurs categorie:quilistelensembledescatgoriesduforum sujets:contiendralessujetsdesdiffrentesdiscussions messages:contiendratouslesmessagesmisparlesutilisateurs
OrganisationgnraledesdonnesMaintenantquenousavonsdterminquellestablesconstituerontnotrebasededonnes,ilnousfautdfinirlesinformations(champs)quecontiendrontchacunedestables.
TableUtilisateursCettetablecontientlesutilisateursayantaccsauforum,chaqueutilisateurdevradansunpremier temps, passer par uneprocdured'inscriptionafindepouvoir utiliser le forum.Nousauronsdoncbesoinsdesinformationssuivantes:
codeutilisateur:ils'agitdel'identifiantdel'utilisateur,celuicidoittreunique
motdepasse:ncessaireaulogindel'utilisateur
email :cetteinformationestutilepourrenvoyerlemotdepasse l'utilisateurquil'auraitoubli
nom et prenom : cesdeux informationsnesont pasvraiment utilesmais il esttoujoursintressantdelespossder
7
Crationd'uneapplicationWEBavecPHP/MySQL
TableCategoriesCettetablecontientlesthmesdediscussionsduforum,chaquesujetdediscussionseraenglobdansl'undesthmesprsententable.Cettetableneseradisponiblequ'enlectureseule,c'estdirequec'estleDBAquiajouteralesthmesventuelsdanslatable,iln'yaurapasdemisejourparprogramme.
Peud'informationssontncessairespouridentifierunthme:
unnumeroidentifiant:ils'agitd'unnumroautoincrmentquipermetd'identifierunthme,cenumroestunique
unnom : Il s'agitdunomduthme,parexemple:Devel(pourunthmesur ledveloppement)
unedescription:cetteinformationpermetd'expliqueruntantsoitpeulethme,parexemple:"Discussionssurledveloppementdelogiciellibres"
TableSujetsCettetablecontient l'ensembledessujetsdu forum,Elledoit possder les informationssuivantes:
un numero d'identifiant : il s'agit d'un numro autoincrment qui permetd'identifierunsujet,cenumroestunique
untitre:titrequidcritlesujet
datecreation:ladatedecrationdusujet
heuredecreation:l'heuredecrationdusujet
Cependant un sujet est cr par un utilisateur, il est intressant de connaitre cetteinformation,doncnousajoutons:
codeutilisateur:c'estlecodedel'utilisateurayantcrlesujet,ildoitexisterdanslatableusers.
Deplusnousavonsprcis qu'unsujet tait enrapport avecunecatgoriedonccetteinformationdoittregalementdanslatable:
identifiant catgorie : s'est l'identifiant de la catgorie laquelle le sujet estrattach,lacatgoriedoitexisterdanslatablethmes.
8
Crationd'uneapplicationWEBavecPHP/MySQL
TableMessagesCettetablecontientl'ensembledesmessagesduforum,Elledoitpossderlesinformationssuivantes:
un numero d'identifiant : il s'agit d'un numro autoincrment qui permetd'identifierunmessage,cenumroestunique
untitre:titrequidcritlemessage
untexte:ils'agitducorpsdumessage
datecreation:ladatedecrationdumessage
heuredecreation:l'heuredecrationdumessage
Cependant unmessageest cr parunutilisateur, il est ncessairedeconnaitrecetteinformation,doncnousajoutons:
codeutilisateur :c'estlecodedel'utilisateurayantcrlemessage,ildoitexisterdanslatableusers.
Deplus nousavonsprcis qu'un messagetait en rapport avecunsujet donccetteinformationdoittregalementdanslatable:
identifiantsujet:s'estl'identifiantdusujetauquellemessageestrattach,lesujetdoitexisterdanslatablesujets.
9
Crationd'uneapplicationWEBavecPHP/MySQL
LastructurecompltedelabasededonnesNousavonsdoncdfinit,defaonthoriquelastructuredenotrebasededonnes,voicileschmagnral:
10
Crationd'uneapplicationWEBavecPHP/MySQL
III.Crationdelabasededonnes
Maintenant quenousavonsdfinis lesdiffrentesdonnesquenotreapplicationdevragrer,nousallonscrerphysiquementnotrebasededonnes.
PourcelanousallonsutiliserleSGBDMySQL,quiestl'undesplusconnudanslemondeduWEBetdulogiciellibre.
Afindefaciliter,lamanipulationdeMySQL,nousallonsutiliserPhpMyAdmin.
Cetoutil,critenPHP,permetdegrersesbasesdedonnessansavoirbesoind'unegrandeconnaissancedeMySQL.Deplusdufait qu'il estcrit enPHP(doncsurvotreserveurHTTP)vouspouvezsurtoutgrervosbasesdistance.
PrparationetconfigurationIln'estpasrecommandd'utiliserle"compte"administrateurMySQL(root)pourmanipulerunebasededonnesdoncnousallons dans le client MySQL, crer unutilisateur quipermettradegrernotrebasededonnes(crationdetable,ajoutd'enregistrements,...).
Premirement,ilfautseconnecterMySQLentantquerootvialeclientMySQL,danslebutdecrernotrebaseetd'ajouterl'utilisateur(quipermettradegrerlabasesousPhpMyAdmin):
[darken@localhostdarken]$mysqlurootpEnterpassword:WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis1toserverversion:4.0.15
Type'help;'or'\h'forhelp.Type'\c'toclearthebuffer.
mysql>
Ilfautmaintenantcrernotrebasededonnes:
mysql>createdatabasemyforum;QueryOK,1rowaffected(0.00sec)
Nousallonsmaintenantcrerl'utilisateurquiseraleDBAdenotrebasededonnes,nousallonsdoncnouspositionnersurlabasemyforum,puisdonnerl'utilisateurwwwadmintouteslesautorisationssurcettebase:
mysql>grantallprivilegesonmyforum.*towwwadmin@localhost;QueryOK,0rowsaffected(0.82sec)
mysql>grantallprivilegesonmyforum.*towwwadmin;QueryOK,0rowsaffected(0.82sec)
11
Crationd'uneapplicationWEBavecPHP/MySQL
NouspouvonsdoncmaintenantquitterleclientMySQL:
mysql>quitBye[darken@localhostdarken]$
Donnonsmaintenantunmotdepassepourl'utilisateurwwwadmin:
[darken@localhostdarken]$mysqladminpuwwwadminpassword'azerty'Enterpassword:[darken@localhostdarken]$
VrifionsmaintenantquelaconfigurationdePhpMyAdmin,afinquelorsquel'onseconnecteMySQLviaPhpMyAdminildemandeunnomd'utilisateuretunmotdepasse.danslefichier/var/www/html/phpMyAdmin/config.inc.phpRemplacerlaligne:
$cfg['Servers'][$i]['auth_type']='config';
Par:
$cfg['Servers'][$i]['auth_type']='http';
OnpeutmaintenantceconnecterPhpMyAdminviavotrenavigateurprfr:http://localhost/phpMyAdmin:
12
Crationd'uneapplicationWEBavecPHP/MySQL
CrationdenostablesMaintenantquel'onestconnectMySQLsousPhpMyAdmin,nousallonsdonccrernostablesdansnotrebaseMyForum:pourcelaslectionnonslabase"myforum".
Nousarrivonssuruncranquinousproposedecrerunenouvelletable,eneffetpourl'instantc'estlaseuleactionquenouspouvonseffectuercarnotrebaseestvide.
13
Crationd'uneapplicationWEBavecPHP/MySQL
Nousallonsdonccrerlatable"users"quicontiendralesinformationssurlesutilisateurs.
Indiquonslenomdelatable("users")etlenombredechampsqu'ellecontiendra(5).
Nousvoyonsdonc5lignesquicorrespondentnoscinqchampsquenousvoulonsdcrire,pourcelailfautfournirplusieursinformations:
Field:ils'agitdunomdeschamps
Type:ils'agitdutypededonnesquesechampcontiendra(caractres,nombres,dates...)
Lalongueurduchamp:Parexempleuncodepostalcontient5caractres.
Desattributsparticuliers(nonsigns,binaire,...)jeconseilledenelesutiliserquesivousenavezvraimentbesoin.
Null:permetdedfinirsilechamppeunepastrerenseign.
Default:quipermetdedfinirlavaleurpardfautduchamp.
Extra:permetdedfinirdesnombresautoincrments.
Primary:dterminesilechampestlacldelatable.
14
Crationd'uneapplicationWEBavecPHP/MySQL
Index:permetdedterminersilechampfaitpartidel'indexsecondaire.
Unique:Permetd'indiquequelavaleurduchampdoittreuniquedanslatable.
MySQLpermetdegrerunemultitudedetypesdiffrents:chainesdecaractres,entiers,flottants,dates,...Voiciuntableauprsentantlestypeslespluscourantsetquinousservironspournostables:
Type DescriptionVARCHAR Chainedecaractreslongueurvariable(1255)TINYINT Entierentre127et128TEXT Textede165535caractresDATE DateauformatAAAAMMJJINT Entierde21474836482147483647
BIGINT Entierde92233720368547758089223372036854775807
FLOAT PermetdestockerdesnombredcimauxDOUBLE PermetdestockerdesnombredcimauxDECIMAL PermetdestockerdesnombredcimauxTIME PermetdestockeruneheureauformatHH:MM:SSBLOB Permetdestockerdesobjetsbinairesdegrandetaille
Nousallonsdonccrernotretableaveclastructuresuivante:
id_user:varchar(15)
passwd:varchar(15)
name:varchar(50)
firstname:varchar(50)
email:varchar(255)
15
Crationd'uneapplicationWEBavecPHP/MySQL
Lorsquel'onsoumetleformulaire,onobtientenrponselemessage"Tableusershasbeencreated"quiindiquequel'actions'estbiendroule.
OnobtientgalementlarequteSQLquivientd'treexcute,ceciestunebonnechoselorsquel'onneconnatpasleSQLetquel'ondsirel'apprendre.
16
Crationd'uneapplicationWEBavecPHP/MySQL
ExcutionderequtesNousvenonsdecrer notre table grce l'interface fournit par phpMyAdmin, onpeutgalementlancernosrequtesdirectementgrcel'ongletSQL.
Eneffetnousallonscrer latablethmedecettefaon.Cettetableestdelastructuresuivante:
`id_theme`quiestunnombreautoincrment
`name`quiestunechainedecaractre
`description`quiestgalementunechainedecaractre.
Nousallonsdoncutiliserlarequtesuivante:
CREATETABLEthemes(id_themeTINYINTUNSIGNEDNOTNULLAUTO_INCREMENT,nameVARCHAR(20)NOTNULL,descriptionVARCHAR(255)NOTNULL,PRIMARYKEY(id_theme));
17
Crationd'uneapplicationWEBavecPHP/MySQL
Ilfautdoncmaintenantcrerlesautrestablesafind'obtenirlastructurecompltedenotrebasededonnes:
CREATETABLEsubjects(id_subjectINTUNSIGNEDNOTNULLauto_increment,titleVARCHAR(255)NOTNULL,dateDATENOTNULL,timeTIMENOTNULL,id_userVARCHAR(15)NOTNULL,id_themeTINYINTUNSIGNEDNOTNULL,PRIMARYKEY(id_subject),KEYid_user(id_user),KEYid_theme(id_theme));
18
Crationd'uneapplicationWEBavecPHP/MySQL
CREATETABLEmessages(id_messageBIGINTUNSIGNEDNOTNULLauto_increment,titleVARCHAR(255)NOTNULL,textTEXTNOTNULL,dateDATENOTNULL,timeTIMENOTNULL,id_userVARCHAR(15)NOTNULL,id_subjectINTUNSIGNEDNOTNULL,PRIMARYKEY(id_message),KEYid_user(id_user),KEYid_subject(id_subject));
19
Crationd'uneapplicationWEBavecPHP/MySQL
SauvegarderlastructureUnefois,notrestructurecre,ilestbondelasauvegarder.PhpMyAdminpermetd'exporterlastructureainsiquelesdonnesd'unebasededonnes.
20
Crationd'uneapplicationWEBavecPHP/MySQL
IV.Maquettagedel'application
AvantdeprogrammerlespagesduforumenPHPaveclesaccslabasededonnesMySQL, nous allons passer par une phase de maquettage de l'application.Ils'agitdecrerlespagesavecdesvaleursstatiquesdanslebutderaliserl'interfaceetlanavigationentrepages.
Pournotreforumdediscussion,nousauronsbesoindespagessuivantes:
Login:cettepageestlapremirepagequel'utilisateurverra,ildevras'authentifierpourutiliserleforum
Inscription:cettepagepermetunnouvelutilisateurdes'inscrire,elleestaccessiblepartirdelapagelogin
Listethmes:cettepages'affichelorsquel'utilisateurseseraauthentifi,elleaffichelalistedesthmesdisponiblessurleforum
Listesujets:cettepageaffichel'ensembledessujetsdediscussionsappartenantunthme.
Listemessages:cettepageaffichelefildediscussiond'unsujet. Ecrituremessage:cettepageestappelelorsquel'utilisateurveutrpondresurun
sujetou,crerunnouveausujetdediscussion.
21
Crationd'uneapplicationWEBavecPHP/MySQL
PourralisercespagesnousallonsutiliserlestechnologiesXHTMLpourlecontenudespagesetCSSpourlamiseenformedecellesci.
22
Crationd'uneapplicationWEBavecPHP/MySQL
V.LeXHTML
Ils'agitdustandardenvigueurdatantdu26janvier2000.LeXHTML1.0estbassurlelangageXML.Ils'agituniquementduHTML4lasauceXML.DoncsivoussavezcrireduHTML4,voussavezcrireduXHTML1.0Voustrouverezl'ensembledesspcificationsduXHTML1.0l'adressesuivante:http://www.w3.org/TR/xhtml1
ParmilespointslesplusimportantsdeXMLparrapportSGML: Chaquelmentouvertdoittreferm lesbalisessonttoujoursorthographiesenminuscule lesvaleursdesattributssonttoujoursrenseignesetentreguillemets
LestypesdedocumentsIl existe, commepour le HTML4.01, trois typesdedocuments dfinissant le standardXHTML:
LetypeStrict
Ils'agitdutypequ'ilfautchoisirchaquefoisquecelaestpossible,eneffetilpermetdesparercompltementlecontenudelaprsentation.
Ilinterdit lesbalisesHTMLdetypeouleseffetsdeprsentationdevanttredcrituniquementl'aidedeCSS.
Pour implmenter ce type le document doit imprativement commencer par les lignessuivantes:
........
23
Crationd'uneapplicationWEBavecPHP/MySQL
LetypeTransitional
Ilpermetdemlangercontenuetprsentationetonpeutl'utilisersil'utilisationdeCSSn'estpaspossibleousatisfaisante(casolesvisiteursciblsnedisposentquedenavigateursanciensetlerenducompteplusquel'information,etc.).
Pour implmenter ce type le document doit imprativement commencer par les lignessuivantes:
........
LetypeFrameset
CetypeestutilisersivoussouhaitezutiliserdescadresdanslaprsentationdevospagesHTML.
Pourimplmentercetypeledocumentdoitimprativementcommencerparlalignesuivante:
........
24
Crationd'uneapplicationWEBavecPHP/MySQL
L'enttedudocument:L'lmentHEADrassembledesinformationssurledocumentcourant,tellesquesontitre,desmotsclefspouvanttreutilisspardesrobotsderecherche,et touteautredonneconsidrecommevenantpartducontenududocument.Leslmentssitusl'intrieurdeladclarationHEADnedevrontpastrevisualisesdanslecasd'agentsutilisateursconformes,saufmentionparticulire.
Labalise
ToutdocumentHTMLdoitcomporterunetunseullmentTITLEdanssasectionHEAD.Lesagentsutilisateursutilisentlecontenudel'lmenttitrepourdonnerl'utilisateuruneinformationconcisesurlecontenuprobabledudocument,parexemple,enl'crivantdanslabarredetitredefentre,ouenlecitantparsynthsevocale.
Lestitrespeuventcontenirdesentitscaractres(pourlescaractresaccentus,lescaractresspciaux,etc.),maisnepourrontconteniraucuneautrebalise.Voiciunexempledetitrededocument:
myForum:Login
Lesbalises
Cetypedebalisen'estpasobligatoiremaispermetdedonnerdiversesinformationstellesquel'encodagedelapage,lenomdel'auteur,lesmotscls(pourlesmoteursderecherches),unedescriptionducontenudelapage...
Lesbalises
Labaliselinkpermetd'effectuerdesliensversdesressourcesexternesafindedfinirparexemplelesrelationsentrepages,maisaussidedfinirlefichierdestyleCSSutiliser(quenousverronsplustard).
Crationd'uneapplicationWEBavecPHP/MySQL
EnttepourMyForum
Pournotreapplicationnousallonsutiliserlecodesuivant:
myForum:Login
Bienentendunousallonschangerletitrepourchaquepage.
Lecontenudelapage:Lecorpsd'undocumentcontientsoncontenueffectif.Cecontenupourratrereprsentparunagentutilisateurd'unemultitudedefaons.Parexemple,pourlesnavigateursvisuels,vouspourrezconsidrerlecorpscommeuncadredanslequellecontenuapparat:texte,images,couleurs,dessins,etc.Pourlesagentsutilisateursaudio,lemmecontenupourratre"parl".
Balisesdegroupeset
LeslmentsDIVetSPAN,enconjonctionaveclesattributsidetclass,proposentunmcanismegnriquepourrenforcerlastructurationd'undocument.CesontlesdeuxseulslmentsduHTMLquin'ajoutentaucuneinformationdeprsentationleurcontenu.Decefait,ilestpossibledelesutiliserassocisdesidentificateursetdesassignationsdeclassepourpouvoirformaterl'apparencedezonesdetexteparapplicationultrieuredefeuillesdestyle.
Balisesd'enttes,,,,,
Unlmentdetitragedcritbrivementlethmedelasectionqu'ilintroduit.Lesinformationsdetitragepourronttrercoltesparlesagentsutilisateurspour,parexemple,construireunetabledesmatiresautomatiquespourcedocument.
LeHTMLdfinitsixniveauxdetitragedepuisH1affichcommeleplusimposantjusqu'H6leplusdiscret.Lesnavigateursvisuelsutiliserontdespolicesplusoumoinsgrossespourrendrecompteduniveaudetitre.
Niveau1Niveau6
26
Crationd'uneapplicationWEBavecPHP/MySQL
Lersultatobtenu:
Niveau1Niveau6
Labalisedelienoud'ancre
L'lmentApeuttreutilispourdfiniruneancre,unlienoulesdeux.
L'exemplequisuitspcifieunlien:
Pourplusd'informationsurduW3C,consultezlesiteWebduW3C
Celiendsignela"homepage"duWorldWideWebConsortium.Lorsqu'unutilisateuractiveceliendansunagentutilisateur,cedernierirarcuprerlaressourcepointe,etdansnotrecas,undocumentHTML.
L'exemplesuivantillustreunedfinitiond'ancre.Supposezquenousdfinissionsuneancrenomme"ancreune".
...texteprcdentl'ancre...l'endroitdel'ancreune...texteaprsl'ancre...
Cettedfinitionassigneunnomd'ancrelazoneentiredudocumentquicontientletexte"l'endroitdel'ancreune".Normalement,lecontenudeslmentsAneserontpasaffichdiffremmentquelanormalelorsquel'lmentAnesertqu'dfiniruneancre.
Unefoisl'ancredfinie,nousaimerionspouvoirnousyrfrerdepuisundocument(lemmeouunautre).LesURLquidsignentlesancresseterminentparun"#"suividunomdel'ancre.Voiciquelquesexemplesd'URLainsiconstitues:
UneURLabsolue:http://www.mycompany.com/one.html#anchorone UneURLrelative:../one.html#anchorone Lorsquelel'ancreestsituedanslemmedocument:#anchorone
27
Crationd'uneapplicationWEBavecPHP/MySQL
Texteprformats
L'lmentPREindiqueauxagentsutilisateursvisuelsqueletextequiyestinclusest"prformat".
Lesagentsutilisateursvisuelsdoiventtraiterletexteprformatcommesuit:
Ilsdoiventlaisserlesespacesblancsintacts. Ilsdevrontcrireletexteavecunepoliceespacementfixe. Leretourautomatiquelalignepourraytredsactiv. Letraitementdeladirectionnalitdoitresteroprationnel.
L'exemplesuivantmontreuntexteprformat:
Bonjour,j'aimeraisraliserunforumenPHPavecMySQL,Maisjenesaispasdutoutparoucommencer.
Quelqu'unauraitiluneide?
Voicilerendudevotrenavigateur:
Bonjour,j'aimeraisraliserunforumenPHPavecMySQL,Maisjenesaispasdutoutparoucommencer.
Quelqu'unauraitiluneide?
LestableauxL'lment TABLEcontient tous lesautreslmentsqui spcifient le titre, les lignes, lecontenu,etleformatd'untableau.
...Lerestedutableau...
Titresdetableaux:
Lorsqueprsent,letextedel'lmentCAPTIONdcrirausuellementlanaturedutableau.L'lmentCAPTIONdoitvenirimmdiatementaprslabalisededbutdel'lmentTABLE.
Listedesthemesduforum...Lerestedutableau...
28
Crationd'uneapplicationWEBavecPHP/MySQL
Groupesdelignes:,,
Untableaudoitconteniraumoinsungroupedelignes.Chaquegroupedelignesestdivisentroisparties:entte,corps,etpitement.Lesenttesetpitementsdetableauxsontoptionnels.L'lmentTHEADdfinitl'entte,l'lmentTFOOTdfinitlepitement,etl'lmentTBODYdfinitlecorpsdetableau.
Lorsqu'ilexiste,chacundesinstancesd'lmentsTHEAD,TFOOT,etTBODYDOITconteniraumoinsuneligne(voirTR).
L'exemplesuivantillustrel'ordreetlastructuredesenttes,piedsetcorpsdetableaux.
...informationd'entte......informationdepitement......premirelignedublocdedonnes......deuximelignedublocdedonnes...
Lignesdetableau:
L'lmentTRagitcommeuncontaineraccueillantdescellulesd'uneligned'untableau.
Cellulesdetableau:et
LeslmentsTHcontiennentlesenttesdecolonnes(oudeligne),tandisqueleslmentsTDdfinissentdescellulesdedonnes.Cettedistinctionpermetauxagentsutilisateursdereprsenterdiffremmentlesenttesetlescellulesdedonnes,mmeenl'absencedefeuillesdestyle.
Lescellulespeuventtrevides(c.d.,neconteniraucunedonnes).
29
Crationd'uneapplicationWEBavecPHP/MySQL
Example:
MyForum:ListedesthmesThmeDescriptionSujetsDateDbutantsAideauxdbutantsousLinux152003122112:45DevelQestionsrelativesaudveloppement22003122110:42
Lesobjetsexternes
Lesimages
Cettebalisepermetd'intgrerdesimagesdansundocumentXHTML.Aujourd'hui,laplupartdesnavigateursWebsupportentlesimages,cependantLynx(lenavigateurleplusutilisparlesaveuglesetlesmalvoyants)nelessupportentpas,eneffetunaveuglenepeuenaucuncasapprcierlecontenud'uneimage,saufsionluidcritsoncontenu.
Danscetteoptiquelabalisedonnelapossibilitdafficheruntextealternatifpourlesnavigateursn'arrivantpasafficherlesimages:
30
Crationd'uneapplicationWEBavecPHP/MySQL
Lesobjetsexternes
DanslesanciennesversionsduHTMLintgrerdesscriptsexternes(AppletJava,ObjetActiveX,...),n'taitpastoujoursunechoseaise.Aujourd'huiuneseulebalisepermetd'implmentercetypederessource,labalise.
Cellecipermetenplusdeproposerunesolutionalternativelorsquelenavigateurnepeutafficherl'objet(pluginnonactiv,...):
LesFormulairesL'lmentFORMfaitofficedecontainerpourdescontrles.Ilspcifie:
Leprogrammequitraiteraleformulaireunefoiscompltetdmentsoumis(l'attributaction).
Lamthodeparlaquellelesdonnesdposesparl'utilisateurseronttransmisesauserveur(l'attributmethod,valeurs'get'ou'post').
Unformulairepeutcontenirdutexteetdesbalises(paragraphes,listes,etc.)ainsiquelescontrlesdtaillsciaprs.Laportedel'attributnameassocichacundescontrlessitul'intrieurd'unlmentFORMestlimitecetlmentFORM.
31
Crationd'uneapplicationWEBavecPHP/MySQL
Labalise
L'lmentLABELpeuttreutilispourattacheruneinformationunautrecontrle(l'exceptiondeslmentsLABELeuxmmes).Leslabelspourronttreaffichsparlesagentsutilisateursd'unemultitudedefaons(ex.,visuellement,auditivementpardessynthtiseursvocaux,etc.)
Codeuser:Motdepasse:
NotezqueleslmentsLABELsontassocisauxlmentsINPUTvial'attributid.
Labalise
Lanatured'uncontrledfiniparunlmentINPUTdpenddelavaleurdesonattributtype.
TypesdechampsdesaisieL'attributtypedel'lmentINPUTdterminequelcontrledoittrecr.
textCetypecreunchampdetextemonoligne.Lavaleurmiselorsdelasoumissionduformulaireestletexteentr.
passwordCommeletype"text",maisletexteentrestvisualisl'crandesortequelescaractresnepuissenttrereconnus(parexempleunesried'toiles).Cecontrleestutilispourl'entrededonnessensiblestellesquedesmotsdepasse.Lavaleurmiselorsdelasoumissionduformulaireestletextetap(etnonpasletexteaffich(!)).
32
Crationd'uneapplicationWEBavecPHP/MySQL
checkboxUnecasecocherestunesortedecommutateurbipolaire.Lorsqu'elleestcoche,lacaseestdite"active".Lorsqu'elleestvide,lacaseest"inactive".Lavaleurdelacasecochern'estmisequesicettedernireestactive.Plusieurscasescocherdummeformulairepourrontpartagerlemmenom.Aumomentdelasoumission,toutecasecocher"active"ycompriscellesdenomsemblablemetunepairenom/valeurdanslaquellelenomseraidentique.Cecipermettraauxutilisateursdechoisirdesvaleursmultiplespourunepropritunique.
radioUnboutonradioestaussiuncommutateurbipolaire.Lorsqu'ilestmarqu,leboutonradioestdit"actif".Lorsqu'ilestvide,ilestrput"inactive".Lavaleurduboutonradion'estmisequesicedernierestactif.Plusieursboutonsradiodummeformulairepourrontpartagerlemmenom.Cependant,seull'und'entreeuxpourratreactiflafois.Lorsquel'undesboutonsradioestmarqu,touslesautresportantlemmenomsontautomatiquementdslectionns.Pourcetensembledeboutonsradio,ilnepeutdonctremisqu'uneseulepairenom/valeur.
submitCreunboutondesoumission.Lorsquel'utilisateurcliquesurcebouton,lecontenuduformulaireestsoumisauprogrammespcifiparlalocalisationdfinieparl'attributactiondel'lmentFORMenglobant.Unformulairepeutcontenirplusieursboutonsdesoumission.Cependant,seulelapairenom/valeurduboutondesoumissionactionnseraenvoyedansleformulaire.
imageCreunboutondesoumissiongraphique.Lavaleurdel'attributsrcspcifiel'URLdel'imagequiserviradereprsentationgraphiquedubouton.Certainsutilisateursnepourrontvisualisercetteimage.Nousrecommandonsfortementd'adjoindreladfinitiond'unattributaltvalantpouralternativetextuelledel'image.
resetCreunboutonderinitialisation.Lorsqueceboutonestactivparl'utilisateur,lesvaleursdetouslescontrlesduformulairesontremisesleurvaleurinitiale,tellequementionnedansl'attributvalue.Lecouplenom/valeurd'unboutonderinitialisationn'estjamaisenvoylorsdelasoumissiond'unformulaire.
hiddenCreunlmentquinedoitpastrereprsentparl'agentutilisateur.Cependant,lecouplenom/valeurdecetlmentserajointauxdonnesenvoyeslorsdelasoumissionduformulaire.Cetypedecontrleseraengnralutilispourenregistrerdesdonnesd'changesclient/serveurquiseraientautrementperduesdufaitdelanaturevolatiledesprocessusHTTP.
33
Crationd'uneapplicationWEBavecPHP/MySQL
fileDemandel'utilisateurdedsignerunfichier.Lorsqueleformulaireestsoumis,lecontenudecefichierseratransmisauserveurcommeunevaleurden'importequelautrecontrle.
Labalise
L'lmentTEXTAREAcreunezonedesaisiedetextemultilignes(paroppositionauchampdetexteINPUTd'uneseuleligne).Lecontenudecetlmentfournitletexteinitialquiestprsentdanslazonedesaisie.
Titre:Message:Entrezicivotretexte...
Lesbaliseset
L'lmentSELECTcreunelisted'optionspouvanttreslectionnesparl'utilisateur.ChaquelmentSELECTdoitconteniraumoinsunedfinitiond'option.Chaqueoptionestspcifieparuneinstancedel'lmentOPTION.
Lesagentsutilisateurssebaserontsurlecontenudel'lmentOPTIONpourafficherlelibelldel'optiondanslaliste.
PhilippeBOUSQUETAlexAkiraTatianaChistopheLiloune
34
Crationd'uneapplicationWEBavecPHP/MySQL
VrifierlavaliditdespagesAprsl'critureoulagnrationdepagesHTMLilfautquelespagessoientvalides.Ilnesuffitpasdevrifierlerendudespagessurdiffrentsnavigateurs,cettevalidationdoittrefaiteauprsdesvalidateursderfrenceduW3C:
ServicedevalidationHTML:http://validator.w3.org/(fourniparleW3C)
LynxviewerestunservicequipermetdevrifierlerendudepagesWeb,tellesqu'ellesapparaissentdanslenavigateurenmodetexteLynx.Lynxesttrsutilisparlesnonvoyantsetlesmalvoyantsainsiquesurcertainesconfigurationsinformatiquesnedisposantpasd'interfacegraphiquevolue.
35
Crationd'uneapplicationWEBavecPHP/MySQL
VI.LespagesduforumenXHTML
Pournotreforum,nousavonsdoncbesoinsdesixpagesXHTML,quenousallonsdcrire.
Lapaged'identificationCeciestlapaged'entreduforum;toutepersonnevoulantutiliserleforumdoitsesigner(etdoncdoittreinscrite).Cettepagecontientdoncunformulaire,avecdeuxchampssaisissables:
Codeuser:reprsentantlepseudodel'utilisateur Motdepasse:sonmotdepasseluipermettantdeseconnecter.
Ilyadeuxboutons: Seconnecter:quipermetd'effectuerlaconnexionproprementdit,etd'accderau
forum J'aiperdumonmotdepasse:quipermetderenvoyerl'utilisateursonmotdepasse
paremail.Pourlespersonnesquinesontpasencoreinscrites,ilyagalementunlienverslapaged'inscription.
Lapaged'inscriptionCettepageesttoutsimplementleformulairepermettantunepersonnedes'inscriresurleforum.Ceformulaireestcomposde6champssaisissablesetobligatoires:
LeNomdel'utilisateur LePrnomdel'utilisateur L'emaildel'utilisateur(pourpouvoirluirenvoyersonmotdepasse) Lecodeuser:l'utilisateurdevrachoisirunpseudoquiluiservirapourseconnecter. Lemotdepasse:l'utilisateurdevrachoisirunmotdepassequiluiservirapourse
connecter. Laconfirmation:l'utilisateurdevraressaisirsonmotdepasseici(vrifierl'galit
aveclechampprcdent)Ilyadeuxboutons:
S'inscrire:quipermetd'enregistrerlesdonnesdel'utilisateur,depluscelaeffectuelaconnexionauforum
Rtablir:quipermetderinitialiserleformulaire.
36
Crationd'uneapplicationWEBavecPHP/MySQL
LalistedesthmesCettepagelistelesthmesdisponiblessurleforum,elleestconstituedeslmentssuivants:
Labarredenavigation:laseuleoptionproposeestQuitter,quirenvoiverslapaged'identification.
Letableaudressantlalistedesthmes: Nomduthme(lienverslapagedessujets) Descriptionduthme(lienverslapagedessujets) Lenombredesujetsposts Ladateduderniermessage
LalistedessujetsCettepagelistelessujetspostspourunthmedonnsurleforum,elleestconstituedeslmentssuivants:
Labarredenavigation: Quitter,quirenvoiverslapaged'identification. Thmes,quirenvoiverslapagedelistedesthmesduforum
Letableaudressantlalistedessujets: Auteurdusujet Titredusujet(lienverslapagedesmessages) Lenombrederponsesausujet Ladateduderniermessageconcernantlesujet
UnboutonNouveau:quipermetdeposterunnouveausujet(lienversEditionMessage).
LesmessagesconcernantunsujetCettepageafficheladiscussionconcernantunsujet,elleestconstituedeslmentssuivants:
Labarredenavigation: Quitter,quirenvoiverslapaged'identification. Thmes,quirenvoiverslapagedelistedesthmesduforum Sujets,quirenvoiverslapagedessujetsconcernantlethmeencours
Letableaudressantladiscussion,etcecidansl'ordred'arriv: Auteurdumessage Titredumessage Datedumessage Textedumessage
UnboutonRpondre:quipermetd'ajouterunmessagedansladiscussion(lienversEditionMessage).
37
Crationd'uneapplicationWEBavecPHP/MySQL
L'ditiond'unmessageCettepagepermetlacrationdunsujetoud'effectuerunerponsesurunsujetdonn,elleestconstituedeslmentssuivants:
Labarredenavigation: Quitter,quirenvoiverslapaged'identification. Thmes,quirenvoiverslapagedelistedesthmesduforum Sujets,quirenvoiverslapagedessujetsconcernantlethmeencours Messages,quirenvoiverslapageaffichantladiscussionencours(dansle
casoul'onrpondunmessage) Unformulairecomposdedeuxchampssaisissables:
Untitredemessage(pralimentavec"RE:titresujet"danslecasd'unerponse)
Unezonedetexte,oul'utilisateursaisirasonmessage. Deuxboutons:
UnboutonEnvoyerquipermetd'enregistreunmessageetderevenirverlapagedeladiscussion.
UnboutonRtablirquipermetderinitialiserleformulaire. Letableaudressantladiscussion,dansl'ordreinversed'arrive:
Auteurdumessage Titredumessage Datedumessage Textedumessage
UnepageXHTMLvalideVoiciparexemplelecodesourceXHTMLdelapaged'ditiond'unmessageauformatXHTML(pagevalidparlevalidateurduW3C),sansmiseenformeparticulire.
MyForumv0.1
38
Crationd'uneapplicationWEBavecPHP/MySQL
MyForumv0.1Darken>>Quitter::Thmes::Sujets::MessagesMaisjenesaispasdutoutparoucommencer.Quelqu'unaurraitiluneide....Copyright20032004PhilippeBOUSQUETCelogicielestsouslicenceGnuGenralPublicLicense
39
Crationd'uneapplicationWEBavecPHP/MySQL
Etvoicilersultatdansvotrenavigateurinternet:
40
Crationd'uneapplicationWEBavecPHP/MySQL
VII.LamiseenformeparCSS
Lors la cration de nouveaux sites web, la sparation du contenu structur de saprsentationestuneaubainepourlesdveloppeursWeb.Eneffet,ilestpossibledecrerdesfeuillesdestylequis'appliquerontunouplusieursdocuments,permettantainsidechangerl'apparenced'unsiteenchangeantsimplementlafeuilledestyle.
Il faut essayer desparer aumaximumlecontenude laprsentation. Pour cela il estprfrabled'crire,degnrer,desdocumentssuivantslaDTDXHTML1.0StrictpluttquelaDTDXHTML1.0Transitional.
LemodledesbotesChaquebotepossdeuneairedecontenu(ex.untexte,uneimage,etc.)entoureenoptionparuneaired'espacement,uneairedebordureetuneairedemarge;Leschmasuivantillustrelesrelationsentrecesairesetlaterminologieemployepourlesdsigner:
Onpeutsubdiviserlamarge,labordureetl'espacementselonqu'ils'agisseductgauche,droite,hautoubas(ex.dansleschma,"MG"mispourmargegauche[ndt.marginleft],"ED"mispourespacementdroit[ndt.paddingright],"BH"mispourbordurehaute[ndt.bordertop],etc.).
41
Crationd'uneapplicationWEBavecPHP/MySQL
Lespropritsdemarge:'margintop','marginright','marginbottom','marginleft'et'margin'
Cespropritsspcifientlalargeurdel'airedelamarged'unebote.Lapropritraccourcie'margin'spcifielavaleurdelamargepourlesquatrectslafois,lesautrespropritsfixantcelledeleurctrespectif.
Lespropritsdfiniesiciserfrentautypedevaleur,celuiciaccepteunedesvaleurssuivantes:
:Spcifieunelargeurfixe;:Lepourcentageestcalculparrapportlalargeurdublocconteneurdelabotegnre.Ceciestvraiaussipourlesproprits'margintop'et'marginbottom',saufdansuncontextedepageolepourcentageserfrelahauteurdelabotedelapage.auto
Lespropritsd'espacement:'paddingtop','paddingright','paddingbottom','paddingleft'et'padding'
Cespropritsspcifientlalargeurdel'aired'espacementd'unebote.Lapropritraccourcie'padding'spcifielavaleurdel'espacementpourlesquatrectslafois,lesautrespropritsfixantcelledeleurctrespectif.
Lespropritsdfiniesiciserfrentautypedevaleur,celuiciaccepteunedesvaleurssuivantes:
:Spcifieunelargeurfixe.:Lepourcentageestcalculparrapportlalargeurdublocconteneurdelabotegnre.Demmepourlesproprits'paddingtop'et'paddingbottom'.
ladiffrencedespropritsdemarge,lesvaleursd'espacementnepeuventpastrengatives.Lesvaleursdepourcentagedespropritsd'espacement,toutcommecellesdespropritsdemarge,serfrentlalargeurdublocconteneurdelabotegnre.
42
Crationd'uneapplicationWEBavecPHP/MySQL
Lespropritsdebordure
Cespropritsspcifientl'paisseur,lacouleuretlestyledel'airedebordured'unebote.Cellescis'appliquenttousleslments.
L'paisseurdebordure:lesproprits'bordertopwidth','borderrightwidth','borderbottomwidth','borderleftwidth'et'borderwidth'
Cespropritsspcifientl'paisseurdel'airedebordure.Lespropritsdfiniesiciserfrentautypedevaleur,celuiciacceptel'unedesvaleurssuivantes:
thin:Uneborduremince.medium:Uneborduremoyenne.thick:Unebordurepaisse.:L'paisseurdelabordureaunevaleurexplicite.Cettevaleurexplicitenepeuttrengative.
L'interprtationdestroispremiresvaleursdpenddel'agentutilisateur.Cependant,celuicidoitrespecterlesdirectivessuivantes
Lacouleurdebordure:lesproprits'bordertopcolor','borderrightcolor','borderbottomcolor','borderleftcolor'et'bordercolor'
Cespropritsspcifientlacouleurdesborduresd'unebote.Voicilasignificationdesvaleurs:
:Spcifielavaleurd'unecouleur;transparent:Labordureesttransparent(toutenayantunepaisseur).
43
Crationd'uneapplicationWEBavecPHP/MySQL
Lestyledebordure:lesproprits'bordertopstyle','borderrightstyle','borderbottomstyle','borderleftstyle'et'borderstyle'
Cespropritsspcifientledessindesborduresd'unebote(entraitplein,traitdouble,traitpointill,etc.).Lespropritsdfiniesiciserfrentautypedevaleur,celuiciacceptel'unedesvaleurssuivantes:
none:Aucunebordure.Cettevaleurforcelavaleurcalculedelaproprit'borderwidth'0;hidden:Idem'none',saufpourlarsolutiondesconflitsdeborduredeslmentsdetable;dotted:Labordureestuneligneenpointill;dashed:Labordureestuneligneentirets;solid:Labordureestuneligneentraitplein.double:Labordureestunelignedouble,dedeuxtraitspleins.Lasommedeceslignesetdel'espaceentreellesestgalelavaleurde'borderwidth'.groove:Laborduredonnel'impressionqu'elleestgravedanslecanevas;ridge:l'opposde'groove',laborduresemblesortirducanevas;inset:Laborduredonnel'impressionquelaboteentireestincrustedanslecanevas;outset:l'opposde'inset',laborduredonnel'impressionquelaboteentireestextrudeducanevas
Lalargeurducontenu:laproprit'width'
Cettepropritspcifielalargeurducontenudesbotesgnresparleslmentsdetypebloc.Lesvaleursontlessignificationssuivantes::Spcifieunelargeurfixe;:Spcifieunelargeurenpourcentage.Lepourcentageestcalculenfonctiondelalargeurdublocconteneurdelabotegnre;auto
Laproprit'width'n'admetpasdevaleursngatives.
Lahauteurducontenu:laproprit'height'
Cettepropritspcifielahauteurducontenudesbotesgnresparleslmentsdetypebloc.Lessignificationsdesvaleurssont::Spcifieunehauteurfixe;:Spcifieunehauteurenpourcentage.Celuiciestcalculenfonctiondublocconteneurdelabotegnre.Silahauteurdublocconteneurn'estpasspcifieexplicitement(c..d.,cellecidpendantdelahauteurducontenu),savaleurestconsidrecommetant'auto';
44
Crationd'uneapplicationWEBavecPHP/MySQL
auto
Laproprit'height'n'admetpasdevaleurngative.
LescouleursetarriresplansChaquebotepossdeuneairedecontenu(ex.untexte,uneimage,etc.)entoureenoptionparuneaired'espacement,uneairedebordureetuneairedemarge;Leschma
Lacouleurd'avantplan:laproprit'color'
Cettepropritdcritlacouleurd'avantplanducontenudetexted'unlment.Voiciplusieursfaonsd'indiquerlacouleurrouge:
Exemple(s):
em{color:red}/*nomdecouleurprdfini*/em{color:rgb(255,0,0)}/*couleursenRGBallantde0255*/em{color:#FF0000}/*CouleurHTMLRGBHexadcimal*/
L'arrireplan
Lesauteurspeuventspcifierl'arrirepland'unlment(c..d.lasurfaceoceluiestrendu)commetantunecouleuroubienuneimage.Selonlemodledelabote,l'arrireplancorrespondauxairesducontenu,del'espacementetdebordure.Lescouleursetstylesdeborduresontspcifiesparlespropritsdebordure.Lesmargestanttransparentes,l'arrireplanduparentesttoujoursvisibleautraversdecellesci.
Bienquelespropritsd'arrireplannes'hritentpas,l'arrireplandelaboteduparenttransparatrapardfaut,dufaitdelavaleurinitiale'transparent'delaproprit'backgroundcolor'.
L'arrireplandelabotegnreparl'lmentracinerecouvrelatotalitducanevas.
DanslecasdedocumentsHTML,onrecommandeauxauteursdespcifierunarrireplanl'lmentBODY,pluttqu'l'lmentHTML.Lesagentsutilisateursdevraientsuivrelesrglesdeprsancesuivantespourremplirlefondducanevas:quandlavaleurdelaproprit'background'pourl'lmentHTMLdiffrede'transparent',alorsutiliserlavaleurspcifie,autrementutilisercellespcifieparlaproprit'background'del'lmentBODY.Lerendun'estpasdfinisilavaleurfinalereste'transparent'.
Lesproprits:'backgroundcolor','backgroundimage','backgroundrepeat','backgroundattachment','backgroundposition'et'background'
45
Crationd'uneapplicationWEBavecPHP/MySQL
'backgroundcolor'Valeur:|transparent|inheritInitiale:transparent
Cettepropritdonnelacouleurd'arrirepland'unlment,avecunevaleurde,oubienaveclemotcl'transparent',celuicilaissantventuellementvoirlescouleurssituesplusendessous.
'backgroundimage'Valeur:|none|inheritInitiale:noneS'applique:tousleslments
Cettepropritspcifiel'imaged'arrirepland'unlment.Enmmetempsqu'uneimage,lesauteursdevraientaussispcifierunecouleurd'arrireplan,cettecouleurtantemployeenremplacementd'uneimageindisponible.Celleci,unefoisdisponible,vientsesuperposersurlefondcolor.Lacouleurdufondtantainsivisibleautraversdeszonestransparentesdel'image.
'backgroundrepeat'Valeur:repeat|repeatx|repeaty|norepeat|inheritInitiale:repeat
Quandonspcifieuneimaged'arrireplan,cettepropritindiquesil'imageestrpte(appose)etlamaniredelarptition.Lamosaquedefondrsultantecorrespondauxairesdecontenu,d'espacementetdeborduredelabotedel'lmentenquestion.Lessignificationsdesvaleurssont:
Unexemplairedel'imaged'arrireplanestplacaucentre,puisd'autresexemplairesdecellesciseplacentlesunesaudessus,lesautresendessous,produisantunebandeverticalederrirel'lment.
'backgroundattachment'Valeur:scroll|fixed|inheritInitiale:scroll
Quandonspcifieuneimaged'arrireplan,cettepropritindiquesil'imageestfixeparrapportl'espacedevisualisation(pourlavaleur'fixed'),ousicellecidfileenmmetempsqueledocument(pourlavaleur'scroll').
'backgroundposition'Valeur:[[|]{1,2}|[[top|center|bottom]||[left|center|right]]]|inheritInitiale:0%0%
46
Crationd'uneapplicationWEBavecPHP/MySQL
Quandonspcifieuneimaged'arrireplan,cettepropritindiquelapositioninitialedecelleci.Quandl'imaged'arrireplanestfixeparrapportl'espacedevisualisation(voirlaproprit'backgroundattachment'),cetteimageseplacerelativementceluici,etnonparrapportl'aired'espacementdel'lment.
LespolicesChaquebotepossdeuneairedecontenu(ex.untexte,uneimage,etc.)entoureenoptionparuneaired'espacement,uneairedebordureetuneairedemarge;Leschma
Lafamilledepolices:laproprit'fontfamily'
Cettepropritdonneuneliste,parordredepriorit,denomsdefamillesdepoliceset/oudenomsdefamillesgnriques.Pourcontournercertainesdifficults,unepoliceseulenecontenantpasncessairementtouslesglyphespourlerendudechacundescaractresd'undocument,oudespolicestantabsentesdecertainssystmes,ainsilapropritpermetauxauteursdespcifierunelistedepolices,cellescidemmestyleettaille,quisontessayessuccessivementpourvrifierlacorrespondanced'unglypheavecuncaractredonn.Onappellecettelisteunjeudepolices.
Lafamilledepolicesgnriqueserautilisesiune,ouplusieurs,despolicesd'unjeudepolicesn'taientpasdisponibles.Bienquecertainespolicesfournissentunglyphedesubstitutionpourindiquerun"caractremanquant",celuiciprenanttypiquementl'aspectd'uncarr,onnedevraitpasconsidrerceglyphecommeunecorrespondancevalide.
Ilexistedeuxtypesdenomsdefamilledepolices:
Lenomd'unefamilledepoliceschoisi.Dansl'exempleprcdent,"Baskerville","HeisiMinchoW3"et"Symbol"sontdesnomsdefamilledepolices.Cellesdontl'intitulcontientdesblancsdevraienttrecritesentreguillemets.Sionometlesguillemets,chacundescaractresblancsavantetaprslenomdelapolicesontignorsetchaquesquencedeblancs,dansceluici,estconvertieenunseulespace;Ondfinitlesfamillesgnriquessuivantes:'serif','sansserif','cursive','fantasy'et'monospace'.Voirlepassagetraitantdesfamillesdepolicesgnriquespourleurdescription.Lesnomsdefamilledepolicesgnriquessontdesmotscls,onnedoitpaslesmettreentreguillemets.Onrecommandeauxauteursdeciterunefamilledepolicesgnriquecommedernirealternative,pourunemeilleureefficacit.
47
Crationd'uneapplicationWEBavecPHP/MySQL
Lestyledepolice:lesproprits'fontstyle','fontvariant','fontweight'et'fontstretch'
'fontstyle'Valeur:normal|italic|oblique|inheritInitiale:normal
Laproprit'fontstyle'slectionne,parmilespolicesd'unefamilledepolices,cellesavecundessinnormal(aussiappel"roman"ou"upright"),italiqueetoblique.Lessignificationsdesvaleurssont:
normalSpcifieunepoliceditenormaledanslabasededonnesdepolicedel'agentutilisateur;oblique:Spcifieunepolicediteobliquedanslabasededonnesdepolicedel'agentutilisateur.LespolicesdontlenomcontientlesmotsOblique,SlantedouInclinesonttypiquementtiquetes'oblique'danslabasededonnesdepolicedel'agentutilisateur.Cellesaveccelabelayantpuavoirtobtenueslectroniquementeninclinantunepolicenormale;italic:Spcifieunepolicediteitaliquedanslabasededonnesdepolicedel'agentutilisateur,ou,s'iln'yenapas,uneavecunlabel'oblique'.LespolicesdontlenomcontientlesmotsItalic,CursiveouKursivseronttypiquementtiquetes'italic'.Exemple(s):
'fontvariant'Valeur:normal|smallcaps|inheritInitiale:normal
Dansunepoliceenpetitescapitales,lesglyphesdeslettresminusculesontunaspectsimilaireauxlettresmajuscules,cependantavecunetaillerduiteetdesproportionslgrementdiffrentes.Laproprit'fontvariant'appellecegenredepolicebicamrale(quiadeuxcasses,commelescritureslatines).Cellecineproduitaucuneffetvisiblepourlescrituresmonocamrales(quin'ontqu'uneseulecasse,commelaplupartdessystmesd'crituremondiaux).Lessignificationsdesvaleurssont:
normal:Spcifieunepolicequin'estpastiquetecommetantenpetitescapitales;smallcaps:Spcifieunepolicetiquetecommetantenpetitescapitales.S'iln'yapasunetellepolice,lesagentsutilisateursdevraienteneffectuerlasimulation,parexempleenslectionnantunepolicenormaleetyremplaantleslettresminusculespardesmajusculesmisesl'chelle.Endernierressort,leslettresmajusculesinchangesd'unepolicenormalepeuventsesubstituerauxglyphesenpetitescapitales,ainsiletexteapparatraitentirementenmajuscule.
48
Crationd'uneapplicationWEBavecPHP/MySQL
'fontweight'Valeur:normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inheritInitiale:normalS'applique:tousleslmentsHrite:ouiPourcentage:sansobjetMdias:visuel
Laproprit'fontweight'spcifielagraissedelapolice.
'fontstretch'Valeur:normal|wider|narrower|ultracondensed|extracondensed|condensed|semicondensed|semiexpanded|expanded|extraexpanded|ultraexpanded|inherit
Laproprit'fontstretch'slectionnelesdessinsnormal,comprimoulargidansunefamilledepolices.Lesvaleursdesmotsclsabsolus,duplustroitauplusespac,sont:ultracondensedextracondensedcondensedsemicondensednormalsemiexpandedexpandedextraexpandedultraexpanded
Lemotclrelatif'wider'spcifielavaleurd'expansionsuprieurecellehrite(sanseffetsilavaleurhriteestdj'ultraexpanded'),l'inversedumotclrelatif'narrower'celuicispcifiantlavaleurdecontractioninfrieurecellehrite(sanseffetsilavaleurhriteestdj'ultracondensed').
49
Crationd'uneapplicationWEBavecPHP/MySQL
Latailledepolice:laproprit'fontsize'
'fontsize'Valeur:||||inheritInitiale:medium
Cettepropritdcritlatailled'unepolicespcifieexplicitement.Cellecicorrespondaucarrem,unconceptissudelatypographie.Noterquecertainsglyphespeuventdborderdeleurcarrem.Lessignificationsdesvaleurssont:
Unmotclserfreuneentredelatabledestaillesdepolice,cellecitantdresseetmiseenuvreparl'agentutilisateur.Lesvaleurspossibles:[xxsmall|xsmall|small|medium|large|xlarge|xxlarge]
Pouruncrandemoniteur,onsuggreunfacteurd'chellede1.2entrelesvaleursconscutivesdelatable;silavaleur'medium'correspond12pt,lavaleur'large'devraitcorrespondre14.4pt.Lesfacteursd'chellepeuventdiffrerselonlesmdiasconsidrs.Parailleurs,l'agentutilisateurdevraitprendreencomptelaqualitetladisponibilitdespolicesaumomentducalculdecettetable.Cellecipeutaussidiffrerd'unefamilledepolicesuneautre.
Unmotcls'entendparrapportlatabledestaillesdepoliceetparrapportlatailledelapolicedel'lmentparent.Lesvaleurspossibles:[larger|smaller]
Parexemple,quandl'lmentparentaunetailledepolicedevaleur'medium',l'lmentenquestionayantunevaleur'larger',latailledepolicersultantedeceluicicorrespondra'large'.Silatailledepolicedel'lmentparentaunevaleurtroploigned'unedesvaleursdelatable,l'agentutilisateurestlibred'effectueruneinterpolationentrelesdeuxvaleursquilacirconscriventouunarrondilavaleurlaplusproche.L'agentutilisateurpeutdevoirprocderuneextrapolationdesvaleursdelatablequandunevaleurnumriquesortduchampdesmotscls.Unevaleurdelongueurspcifieunetailledepoliceabsolue(indpendantedelatabledestaillesdepolicedel'agentutilisateur).Lesvaleursngativesnesontpasadmises;Unevaleurenpourcentagespcifieunetailledepoliceabsolueparrapportcelledel'lmentparent.Leuremploi,demmepourlesvaleursexprimesen'em',conduitdesfeuillesdestyleplusfiables,enpleinaccordavecleprincipedelacascade.Lavaleurrelle,pourcetteproprit,peutdiffrerdelavaleurcalcule,laproprit'fontsizeadjust'ayantunevaleurnumriqueetcertainestaillesdepolicetantindisponibles.
50
Crationd'uneapplicationWEBavecPHP/MySQL
Letexte
L'alina:laproprit'textindent'
'textindent'Valeur:||inheritInitiale:0
Cettepropritspcifieunalinapourlapremirelignedutextedansunbloc.Plusprcisment,celuidelapremirebotedelapremirerangedanslapremirebotedelignedecebloc.Cetteboteestindentepartirdubordgauche(oudroit,pourunemiseenpagededroitegauche)delabotedeligne.Lesagentsutilisateursdevraientreprsentercetteindentationcommeunespacevide.
L'alignement:laproprit'textalign'
'textalign'Valeur:left|right|center|justify||inheritInitiale:selonl'agentutilisateuretselonlesensd'criture
Cettepropritdcritl'alignementd'uncontenuenlignedansunlmentdetypebloc.
Lessignificationsdesvaleurssont:left,right,centeretjustifyRespectivement,l'alignementgauche,droite,centretjustifid'untexte;
Spcifieunechanesurlaquellelescellulesd'unetablevonts'aligner(voirlepassagesurl'alignementhorizontaldansunecolonnepourledtailetpourunexemple).Cettevaleurnes'appliquequ'auxcellulesd'unetable.Appliqueunautrelment,celleciseraconsidrecommetant'left'ou'right',enfonctiondelavaleurdelaproprit'direction',respectivement'ltr'ou'rtl'.Unpavdetexteconsisteenunempilementdebotesdeligne.Pourlesvaleurs'left','right'et'center',cettepropritindiquelafaondontlesbotesenligne,danschacunedesbotesdeligne,s'alignentparrapportauxctsgaucheetdroitedecesbotesdeligne;l'alignementn'estpaseffectuparrapportl'espacedevisualisation.Pourlavaleur'justify',l'agentutilisateurpeut,enplusdesajustementsdeposition,tirerlesbotesdeligne.Voirgalementlesproprits'letterspacing'et'wordspacing').
51
Crationd'uneapplicationWEBavecPHP/MySQL
Ladcoration:laproprit'textdecoration'
'textdecoration'Valeur:none|[underline||overline||linethrough||blink]|inheritInitiale:noneS'applique:tousleslments
Cettepropritdcritlesdcorationsquisontajoutesautexted'unlment.Quandlapropritestappliqueunlmentdetypebloc,elleagitsurtouslesdescendantsdetypeenlignedeceluici.Quandelleestappliqueunlmentdetypeenligne,ouagitsurceluici,cettepropritinfluencetouteslesbotesgnresparcetlment.Quandleslmentssontvidesousanscontenutextuel(ex.l'lmentIMGenHTML),lesagentsutilisateursdoiventignorercetteproprit.
Lessignificationsdesvaleurssont:
none:Aucunedcoration;underline:Chaquelignedetexteestsouligne;overline:Chaquelignedetextereoituntraitaudessus;linethrough:Chaquelignedetexteestrayeensonmilieu;blink:Letexteclignote(unealternanceentrevisibleetinvisible).Lesagentsutilisateursconformesnesontpastenusdereconnatrecettevaleur.
Cettepropritn'estpashrite,cependantlesbotesquidescendentd'unebotedeblocdonnedevraientrecevoirlammedcorationquecelleci(ex.toutesdevraienttresoulignes).Lacouleurdeladcorationdevraittreconserve,mmesilavaleurdelaproprit'color'deslmentsdescendantstaitdiffrente.
52
Crationd'uneapplicationWEBavecPHP/MySQL
Divers
Lepositionnementdesflottants:laproprit'float'
'float'Valeur:left|right|none|inheritInitiale:noneS'applique:tousleslments,saufceuxpositionnsetceuxdontlecontenuestgnr
Cettepropritspcifieleflottementd'unebotegauche,droiteoupasdutout.Onpeutl'employerpourdeslmentsgnrantdesbotesquinesontpasenpositionabsolue.
Voicilasignificationdesvaleursquecelleciadmet:left:L'lmentgnreunebotedeblocquiflottegauche.Lecontenus'coulesursonflancdroitencommenantenhaut(enfonctiondelavaleurdelaproprit'clear').Enignorantlavaleurdelaproprit'display',saufsicettevaleurest'none';right:Identique'left',maiseninversantlagauchedeladroite;none:Laboteneflottepas.
53
Crationd'uneapplicationWEBavecPHP/MySQL
Lecontrledufluxautourdesflottants:laproprit'clear'
'clear'Valeur:none|left|right|both|inheritInitiale:noneS'applique:ceuxdeslmentsdetypebloc
Cettepropritindiquequelsctsd'uneoudesbotesd'unlmentnedoiventpastreadjacentsuneboteflottanteprcdente.(Ilpeutarriverquel'lmentluimmeaitdesdescendantsflottants,laproprit'clear'n'aalorsaucuneffetsureux).
Cettepropritnepeuts'appliquerquauxlmentsdetypebloc(dontlesflottants).Danslecasdesbotescompactesetenenfilade,laproprits'appliquelabotedeblocfinalelaquellecellesciappartiennent.
Voicilasignificationdesvaleursadmisesparlapropritquandonl'appliqueauxbotesdeblocnonflottantes:left:Lamargehautedelabotegnreestaugmentejusteassezpourquelebordhautdesaborduresoitsouslebordexternebasd'uneboteflottantgaucheissued'unlmentprcdentdudocumentsource;right:Reprendreleprcdenteninversantgaucheetdroite;both:Labotegnresedplacesouschacunedesbotesflottantesquisontissuesd'lmentsprcdentsdudocumentsource;none:Labotenesubitaucunecontraintedepositionvisvisdesflottants.
54
Crationd'uneapplicationWEBavecPHP/MySQL
Laproprit'display'
'display'Valeur:inline|block|listitem|........|none|inheritInitiale:inlineS'applique:tousleslments
Lesvaleursdecettepropritontlesenssuivant:block:induitunlmentgnrerunebotedeblocprincipale;inline:induitunlmentgnreruneouplusieursbotesenligne;listitem:induitunlment(ex.l'lmentLIenHTML)gnrerunebotedeblocprincipaleetuneboteenlignepourunitemdeliste;Consulterlapartietraitantdeslistespourdesinformationsetdesexemplesdemiseenformedecellesci;none:cettevaleurfaitqu'aucuneboten'estgnreparl'lmentdanslastructuredeformatage(c..d.,cetlmentn'apasd'influencesurlamiseenformedudocument).Leslmentsquiendescendentnegnrentpasdebotesnonplus;onnepeutplusmodifierleurcomportementaveclaproprit'display'.
Ilestnoterqu'unevaleur'none'necrepasdeboteinvisible,ellenecrepasdebotedutout.CSScomprenddesmcanismespermettantlagnrationdebotesdanslastructuredeformatage,botesquiinfluencentlamiseenformemaisquinesontpasvisibles.
Lavisibilit:laproprit'visibility'
'visibility'Valeur:visible|hidden|collapse|inheritInitiale:visibleS'applique:tousleslments
Laproprit'visibility'spcifielerendu,ounon,desbotesgnresparunlmentdonn.Cesbotes,bienqu'invisibles,influencenttoujourslamiseenformedudocument(utiliserlaproprit'display'aveclavaleur'none'pourprohiberlagnrationd'unebote,etainsitoutesinfluencessurlamiseenforme).
Lesvaleursontlessignificationssuivantes:visible:Labotegnreestvisible;hidden:Labotegnreestinvisible(entirementtransparente),maiscelleciinfluenanttoujourslamiseenforme
55
Crationd'uneapplicationWEBavecPHP/MySQL
Ledbordement:laproprit'overflow'
'overflow'Valeur:visible|hidden|scroll|auto|inheritInitiale:visibleS'applique:ceuxdeslmentsdetypeblocetceuxremplacs
Cettepropritspcifiesilecontenud'unlmentdetypeblocdoittrerognquandceluicidbordedelabotedecetlment(quisecomportecommeunblocconteneur).
Lessignificationsdesvaleurssont:visible:Lecontenuneserapasrogn,etceluicipeuttrereprsenthorsdelabotedubloc;hidden:Lecontenuserarognetaucunmcanismededfilementnedevraittrefournipourvoirlapartiequiauratrogne.Onspcifielatailleetlaformedureliquatdurognageaveclaproprit'clip';scroll:Lecontenuserarognet,sidisponible,l'agentutilisateurfournitunmcanismededfilementvisiblel'cran(telqu'unebarrededfilementouundispositifpanoramique),celuicidevraitapparatrepourunebotedonne,quelecontenudecellecisoitrognounon.Cecipourviterl'inconvnientquereprsenteraitdesbarresdedfilementapparaissantetdisparaissantdansunenvironnementdynamique.Quandcettevaleurestspcifieconjointementavecuntypedemdia'print,lapartieducontenuayantdbordedevraitaussitreimprime;auto:L'interprtationdecettevaleurdpenddel'agentutilisateur,cependant,celuicidevraitfournirunmcanismededfilementquandlesbotesdbordent.
Mmequandlavaleurdelaproprit'overflow'est'visible',ilpeutarriverquelecontenusoitrognparlesystmed'exploitation,pourtenirdanslafentredudocumentdel'agentutilisateur.
ValidersafeuilledestyleCSSAprsl'critureoulagnrationdefeuillesdestylesCSS,onpeutvrifierlavaliditdecellescigrceunservicedevalidationduW3C.
ServicedevalidationCSS:http://jigsaw.w3.org/cssvalidator/(fourniparleW3C)
56
Crationd'uneapplicationWEBavecPHP/MySQL
Exemple:MyForumavecCSSVoiciunexempledefeuilledestyleCSS(default.css):
*{fontfamily:Verdana,Arial,sansserif;}*.left{textalign:left;}*.center{textalign:center;}*.right{textalign:right;}body{background:#FFFFFF;color:#000000;}
a:link{color:#800060;background:transparent;textdecoration:none;}a:visited{color:#800060;background:transparent;textdecoration:none;}a:hover{color:#FFFFFF;background:#800060;textdecoration:none;}div.header{borderbottom:1px#800050solid;}div.headerh1{fontsize:30pt;color:#800050;}hr{display:none;}img.icon{float:left;}div.main{margin:20px;}div.err{textalign:center;fontsize:12pt;fontweight:bold;
57
Crationd'uneapplicationWEBavecPHP/MySQL
color:#FF0000;}div.box{marginleft:20%;marginright:20%;margintop:15px;marginbottom:15px;background:#800050;color:#FFFFFF;}div.boxh1{fontsize:14pt;textalign:center;color:#FFFFFF;}div.field{margintop:10px;width:70%;textalign:right;fontsize:8pt;fontweight:bold;}div.field2{margintop:10px;marginleft:10%;textalign:left;fontsize:8pt;fontweight:bold;}div.buttons{margintop:10px;paddingtop:10px;bordertop:1pxwhitesolid;textalign:center;fontsize:8pt;fontweight:bold;}input.button{margin:5px;background:#C00060;color:#ffffff;bordercolor:#C00060;}div.pwd{background:#C0C0C0;fontsize:12pt;fontweight:bold;marginbottom:20px;}table{margintop:15px;marginleft:10%;width:80%;bordercollapse:collapse;borderspacing:0;border:1px#C00060solid;background:#800050;color:#FFFFFF;}caption{margin:15px;
58
Crationd'uneapplicationWEBavecPHP/MySQL
textalign:center;color:#800050;fontsize:14pt;fontweight:bold;}table.oldcaption{display:none;}tablea:link{color:#FFFFFF;background:transparent;textdecoration:none;}tablea:visited{color:#FFFFFF;background:transparent;textdecoration:none;}tablea:hover{color:#FFFF00;background:transparent;textdecoration:none;}td{bordertop:1px#C00060solid;fontsize:8pt;}th{bordertop:1px#C00060solid;background:#C00060;textalign:left;fontsize:8pt;fontweight:bold;}textarea{fontsize:8pt;}div.footer{bordertop:1px#800050solid;fontsize:8pt;}
59
Crationd'uneapplicationWEBavecPHP/MySQL
Voicigalementcequeceladonnelorsquel'onappliquelafeuilledestylelapageXHTMLdveloppeprcdemment:
PourappliquerlafeuilleCSSilfautrajouterlalignesuivantedanslapartiedelasourceXHTML:
60
Crationd'uneapplicationWEBavecPHP/MySQL
VIII.Programmationdel'application
Unefois lemodlededonnesdfinitet lemaquettagedel'applicationralis,onpeutremplacer le contenu statique de nos page web par de la programmation PHP,NousallonsdoncvoirdansunpremiertempslesbasesdulangagePHP,puis,dansundeuximetemps laprogrammationquenousallonsimplmenterdansnospagesHTMLpourrendrenotreforumOprationnel.
61
Crationd'uneapplicationWEBavecPHP/MySQL
IX.LelangagePHP
PHPestunlangagedescriptsmultiplatesformes,embarqudansdesdocumentsHTML.PlussimplementPHPvousoffreunmoyendeplacerdesinstructionsdansvosdocumentsHTMLenvuedecrerdescontenusdynamiques.
Cesinstructionssont luesetanalysesparleserveurweb.Ellesneparviennent jamaisjusqu'aunavigateur qui affiche la page. Leserveur web remplace le codePHPpar lecontenuquelecodeavaitpourbutdegnrer.
LesbasesdulangagePHPestunvritablelangagedeprogrammation.SyntaxiquementiltientduPerletduC.Ils'agit d'un langage interprt, c'est dire que les fichiers crits dans ce langage nencessitentpasdecompilationsoudetraitementspcifiquedelapartd'uneapplicationtierce.CequevouscodezenPHPestdirectementutilisablesurvotreserveurWeb.
Commentaires
L'utilitdeplacerdescommentairesjudicieuxdansvotrecodesourcen'estaujourd'huiplusdmontrer,eneffetilpermetdeprciserlesalgorithmesutilisdansunlangagehumain,cequisimplifiegrandementlamaintenanceouledbogageduprogramme.LePHPfournittroistypesdecommentaires:
/*CommentairedetypeC*///CommentairedetypeC++#CommentairedetypeShellouPerl
62
Crationd'uneapplicationWEBavecPHP/MySQL
Variables
LePHPestunlangagenontyp.Enclair,celasignifiequ'unevariablepeutcontenirindiffremmentunevaleurnumriqueouunechainedecaractres.paropposition,leslangagestypscommeleCobligentdfinirunevariabled'uncertaintypeenfonctiondecequ'ellevacontenir.LesvariablesenPHPsontprfixsparlecaractre'$'.LelangagePHPpermetdemanipulertroisgenresdevariables:
Lesvariablesscalaires:$toto=5
Lestableaux:$tab[0]="philippe"
Lestableauxassociatifs:
$age["philippe"]=27
Typesdedonnes
PHPfournittroistypesdedonnesprimaires:nombresentiers,nombresdcimauxetchanes.
EntiersLaplagedesentiersdansPHPestquivalentelaportedutypelongdulangageC.Surlesplateformes32bits,lesvaleursentiresvontde2147483648+2147483647.PHPconvertitautomatiquementlesvaleurssuprieuresennombredcimaux.Unentierpeuttreexprimendcimal(base10),hexadcimal(base16)ouenoctal(base8).Parexemple:
$decimal=16;$hex=0x10;$octal=020;
NombresdcimauxLaplagedesnombresdcimauxdansPHPestquivalentelaportdutypedoubleenC.Lesvaleurs,surlaplupartdesplateformes,vontde1.7E3081.7E+308.Unnombredcimalpeuttreexprimsousformedenombrenormalavecunpointdcimalouennotationscientifique.Parexemple:
$var=0.017;$var=17.0E3;
63
Crationd'uneapplicationWEBavecPHP/MySQL
ChanesUnechaneestunesquencedecaractres.Unechanepeuttredlimitpardesguillemetssimplesoudoubles:
'Bonjourtous'"C'estcoollePHP"
Leschainesplacesentredoublesguillemetssontsujettesauxsubstitutionsdevariablesetautraitementdessquencesd'chappement,alorsquecellesplacesentreguillemetssimplesnelesontpas:
$a="jour!";/*affiche:Bonjour!*/echo"Bon\t$a";/*affiche:Bon\t$a*/echo'Bon\t$a';
Tableaudessquencesd'chappements\n Nouvelleligne\t Tabulation\r Retourchariot\\ Antislash\$ Signedollar
ValeursBoolennesChaquevaleurpossdedansPHPunevaleurboolenneditedevrit(trueoufalse)quiluiestassoci.C'esttypiquementutilisdanslesstructuresdecontrle,tellesqueif/elseoufor.
Expressions
L'expressionestlapierrematressedulangage.Toutcequipossdeunevaleurpeuttreconsidrcommeuneexpression,voiciquelquesexemples:
55+5$a$a==5sqrt(9)
64
Crationd'uneapplicationWEBavecPHP/MySQL
Oprateurs
Lesexpressionssontcombinesetmanipulesl'aided'oprateurs.Letableaucidessousdresselalistedesoprateursdisponiblesainsiqueleurprioritetleurassociativit.CesoprateursdevraientvousparatrefamiliersivousavezuneexprienceduC,JavaoudePerl:
Oprateurs Priorit Associativit!,~,++,,@,(oprateursdetranstypage)
16 Droite
*,/,% 15 Gauche+,,. 14 Gauche 13 Gauche 12 Nonassociatif==,!= 11 Nonassociatif& 10 Gauche^ 9 Gauche| 8 Gauche&& 7 Gauche|| 6 Gauche?:(oprateurconditionnel) 5 Gauche=,+=,=,*=,/=,%=,^=,.=,&=,|= 4 GaucheAnd 3 GaucheXor 2 GaucheOr 1 Gauche
65
Crationd'uneapplicationWEBavecPHP/MySQL
Structuresdecontrles
LesstructuresdecontrledePHPsonttrssimilairescellesutilisesparlelangageC.EllessontutilisespourcontrlerunfluxlogiquedansunscriptPHP.
IfL'instructionifestuneconditionstandardquel'ontrouvedanslaplupartdeslangages.Elleforcel'excutiond'uncodeparticuliersil'expressionsurlaquelleelleagitesttrue.
if(expr){instructions}elseif(expr){instructions}else{instructions}
SwitchL'instructionswitchpeuttreutiliselaplaced'unelongueinstructionif.L'expressiondechaqueinstructioncaseestcomparel'expressionswitchet,siellescorrespondent,lecodesuivantcetteinstructionestexcute.
switch(expr){caseexpr:instructionsbreak;default:instructionsbreak;}
WhileL'instructionwhileestuneconstructiondebouclequiexcuteducodedefaonrptitiveaussilongtempsqu'uneexpressionparticulireestvraie.L'expressionestvrifieavantchaquedmarragedelaboucle.
while(expr){instructions}
Onpeutarrterlefonctionnementd'uneboucleparl'instructionbreak.Onpeutgalementsauterlerestedesinstructionsetrecommencerl'itrationparlemotclcontinue.
66
Crationd'uneapplicationWEBavecPHP/MySQL
Do/whileL'instructiondo/whileestsimilairel'instructionwhile,exceptionfaitequel'expressionestvrifieenfind'itrationaulieududbut:
do{instructions}while(expr)
Foruneboucleforoffreuneconstructionpluscomplexequelasimplebouclewhile.Ellecontienttroisexpressions:
Lapremireestl'expressiondedmarrage,ellen'estexcuterqu'endbutdelapremireitration,onl'utiliseengnralpourinitialiseruncompteur.
Lasecondeestuneexpressionconditionnellequicontrlel'itrationdelaboucle.Cetteexpressionestvrifieendbutdechaqueitration.
Latroisimeexpressionestvalueenfindechaqueitration.Elleestengnralutilisepourincrmenteruncompteurdeboucle.
for(start_expr;cond_expr;iter_expr){instructions}
Fonctions
Unefonctionestunesquenced'instructionsdecode,doted'unnom,quipeutaccepterdesparamtresetquiretourneunevaleur.Unappeldefonctionestuneexpressionayantunevaleur;cettevaleurestlavaleurretourneparlafonction.PHPproposeungrandnombredefonctionsinternes.PHPprendgalementenchargelesfonctionsdfiniesparl'utilisateur.Pourdfinirunefonctiononutiliselemotclfunction:
functionbonjour($prenom){return"Bonjour$prenom!";}
Aprsavoirdfinitunefonction,onl'appellel'aided'argumentsappropris:
echobonjour("Philippe");
Onpeutgalementdfinirdesfonctionsavecdesparamtresoptionnels.Ilfautpourceladonnerunevaleurpardfautauparamtreoptionnel:
functionbonjour($prenom="toutlemonde"){return"Bonjour$prenom!";}
67
Crationd'uneapplicationWEBavecPHP/MySQL
Programmationobjet
Uneclasseestunecollectiondevariablesetdefonctionsquifonctionnentaveccesvariables.Uneclasseestdfinieenutilisantlasyntaxesuivante:
68
Crationd'uneapplicationWEBavecPHP/MySQL
L'exemplecidessusdfinitlaclasseCaddiequiestcomposed'untableauassociatifcontenantlesarticlesdupanieretdedeuxfonctions,unepourajouteretunepourenleverdeslmentsaupanier.Note:EnPHP4,seulslesinitialiseursconstantspourlesvariablesvarsontautoriss.Utilisezlesconstructeurspourlesinitialisationsvariables,ouutilisantdesexpressions.
Lesclassesformentuntypedevariable.Pourcrerunevariabledutypedsir,vousdevezutiliserl'oprateurnew.
L'instructioncidessuscrel'objet$cartdelaclassCaddie.Lafonctionadd_idem()estappeleafind'ajouterl'articlenumro10danslepanier.Uneclassepeuttreuneextensiond'uneautreclasse.Lesclasses"extended"ou"derived"hritentdetouteslesvariablesetdetouteslesfonctionsdelaclassepreplustouteslesdfinitionsquevousrajoutezcetteclasse.Celasefaitaveclemotclef"extends".L'hritagemultiplen'estpassupport.
69
Crationd'uneapplicationWEBavecPHP/MySQL
L'exemplecidessusdfinitlaclasseCaddie_nommequipossdelesmmevariablesquelaclasseCaddieetlavariable$ownerenplus,ainsiquelafonctionset_owner().Vouscrezunpaniernominatifdelammemanirequeprcdemment,etvouspouvezalorsaffecterunnomaupanierouenconnatrelenom.Vouspouvezdetouteslesfaonsutiliserlesmmesfonctionsquesurunpanierclassique.
Crationd'uneapplicationWEBavecPHP/MySQL
Pourlesclassesquiutilisentl'hritage,leconstructeurdelaclassepren'estpasautomatiquementappellorsqueleconstructeurdelaclassedriveestappel.
71
Crationd'uneapplicationWEBavecPHP/MySQL
PHPdanslespagesXHTMLVousavezpeuttreremarqu,quetoutcequiestaffichl'aidedel'instructionechofiguredanslecodeHTMLfinal,envoyaunavigateur.C'est la base du fonctionnement de PHP comme langage embarqu dans HTML etgalement sa grande force par rapport l'utilisation de scripts ou d'excutables CGI.L'imbricationdePHPdansHTML,permetainsidecrerdesfichiersmixtes.OncomprendalorspleinementlesavantagesdePHP.CidessousunpetitexempledescriptPHP:
PagedebienvenueBienvenuesurcesite
Crationd'uneapplicationWEBavecPHP/MySQL
LesfonctionsprdfiniesNousneverronsiciquelesfonctionsdontnousallonsnousservirpourlacrationdenotreforum,pouravoirlalistecompltedesfonctionsdisponiblesenPHPveuillezconsulterlapage:http://dev.nexen.net/docs/php/manuel_toc.html#functions
Sessions
LagestiondessessionsavecPHPestunmoyendesauverdesinformationsentredeuxaccs.Celapermetnotammentdeconstruiredesapplicationspersonnalises,etd'accrotrel'attraitdevotresite.Chaquevisiteurquiaccdevotresitesevoitassignerunnumrod'identifiant,appelplusloin"identifiantdesession".Celuiciestenregistrsoitdansuncookie,chezleclient,soitdansl'URL.Lessessionsvouspermettrontd'enregistrerdesvariables,pourlesprserveretlesrutilisertoutaulongdesrequtes.Lorsqu'unvisiteuraccdevotresite,PHPvrifieraautomatiquement(sisession.auto_startest1)oumanuellement(explicitementavecsession_start()ouimplicitementavecsession_register())siunesessionadjtouverte.Siunetellesessionexistedj,l'environnementprcdentserarecr.Touteslesvariablesenregistrerserontenregistressurledisquelafindechaquerequte.Lesvariablesenregistresmaisnondfiniesserontmarquescommetel.Lorsdesaccsultrieurs,ellesneserontdfiniesquesil'utilisateurlefait.
Ilyadeuxmodesdepropagationdel'identifiantdesession:
Cookies ParamtreURL
Lemoduledesessionsupportelesdeuxtechniques.Lamthodeparcookieestoptimale,maistantdonnlepeudefiabilit(lesclientspeuventlesrefuser,ouleseffacer),onnepeutpassecontenterdecettetechnique.Ladeuximemthodeplacel'identifiantdesessiondirectementdansl'URL.
session_startInitialiselesdonnesdesession
boolsession_start(void)
session_start()creunesession(oucontinuelasessioncourante,enfonctiondel'identifiantdesessionpassparunevariableGETouparuncookie)session_start()retournetoujoursTRUE.
session_destroyDtruittouteslesdonnesenregistresd'unesession
boolsession_destroy(void)
session_destroy()dtruittouteslesdonnesassocieslasessioncourante.session_destroy()retourneTRUEencasdesuccs,etFALSEsinon.
73
Crationd'uneapplicationWEBavecPHP/MySQL
session_nameAffecteet/ouretournelenomdelasessioncourante
stringsession_name(stringname)
session_name()retournelenomdelasessioncourante.Sinameestfourni,lenomdelasessionchangera,etprendralavaleurfournie.Lenomdesessionfaitrfrencel'identifiantdesessiondanslescookies.Ilnedoitcontenirquedescaractresalphanumriques;ildoittrecourtetdescriptif.(i.e.surtoutpourlesutilisateursd'alertesdecookie).Lenomdesessionestremisunevaleurpardfaut,enregistresdanssession.nameaumomentdudmarrage.Ainsi,vousdevezappelersession_name()chaquerequte(etavantsession_start()ousession_register()).
Exemple:
Crationd'uneapplicationWEBavecPHP/MySQL
Envoidemail
boolmail(stringto,stringsubject,stringmessage,stringadditional_headers,stringadditional_parameters)
mail()posteautomatiquementlemessagemessagedestinationdeto.Lesdestinatairesmultiplesdoiventtresparspardesvirgules.
Envoidecourrierlectronique(mail)
Lequatrimeargumentpassserainsrlafindel'entte.Typiquement,celapermetd'insrerdesenttessupplmentaires.Lesenttesmultiplesdoiventtresparspardesvirgules.Silecinquimeargumentadditional_parametersestfourni,PHPl'utiliseradanssonappelduprogrammed'envoidecourrierlectronique.Ceciestpratiquepourpasserunevaleurcorrectel'entteReturnPath,avecsendmail.Note:LecinquimeparamtreatajoutenPHP4.0.5.
EnvoideeMailavecdesenttessupplmentaires.
Aveclecinquimeparamtre,vouspouvezajouterd'autresparamtresdelignedecommandequiserontutilissparleprogrammed'envoidecourrier.Dansl'exemplecidessous,l'entteReturnPathestcorrectementparamtr.Normalement,sendmailajouteautomatiquementl'entteXAuthenticationWarning(paramtref),carl'utilisateur"serveurweb"n'estprobablementpasundesesutilisateursdeconfiance("trustedusers").Poursupprimercettealerte,ajoutezl'utilisateurduserveurwebdanslaconfigurationdesendmail.
EnvoideeMailavecdesenttessupplmentairesetunparamtredelignedecommandesupplmentaire
75
Crationd'uneapplicationWEBavecPHP/MySQL
MySQL
Cesfonctionsvouspermettentd'accderauxbasesdedonnesMySQL.Afindepouvoirlesutiliser,vousdevezcompilerPHPaveclesupportMySQL,enutilisantl'optionwithmysql.Sivousutilisezcettefonctionsansprciserlechemind'accslabaseMySQL,PHPutiliseraleslibrairiesclienteMySQLfourniesenstandard.Lesutilisateursquifonttournerd'autresapplicationsquiutilisentellesmmesMySQL(parexemple,PHP3etPHP4utilisscommedesmodulesconcurrentsapache,ouencoreauthmysql),devraittoujoursspcifierlecheminjusqu'MySQL:withmysql=/path/to/mysql.CelavaforcerPHPutiliserleslibrairiesclientesinstallesparMySQLetviteralesconflits.Plusd'informationssontdisponibleshttp://www.mysql.com/.LadocumentationdeMySQLestdisponibleshttp://www.mysql.com/documentation/,ainsiqu'enfranaischeznexen.
mysql_affected_rowsRetournelenombredelignesaffecteslorsdeladernirerequteSQL.
intmysql_affected_rows(resourcelink_identifier)
mysql_affected_rows()retournelenombredelignesaffecteslorsdeladernirerequteINSERT,UPDATEouDELETEsurleserveurassocil'identifiantdeconnexion.Sicetidentifiantn'estpasprcis,mysql_affected_rows()utiliseladernireconnexionouverte.Siladernirerequteachou,mysql_affected_rows()retourne1.
mysql_closeFermelaconnexionMySQL
boolmysql_close(ressourcelink_identifier)
mysql_close()retourneTRUEencasdesuccsetFALSEsinon.mysql_close()fermelaconnexionauserveurMySQLassociel'identifiantlink_identifier.Sicetidentifiantn'estpasspcifi,cettecommandes'appliqueladernireconnexionouverte.
mysql_connectOuvreuneconnexionunserveurMySQL
intmysql_connect(stringhostname,stringusername,stringpassword)
mysql_connect()retourneunidentifiantpositifdeconnexionencasdesuccs,etsinonFALSE.mysql_connect()tablituneconnexionunserveurMySQL.Touslesargumentssontoptionnels,ets'ilsmanquent,lesvaleurspardfautsontutilises(('localhost',nomdupropritaireduprocessus,motdepassevide).Siunsecondappelmysql_connect()estfaitaveclesmmesarguments,PHPnevapasouvrirunenouvelleconnexion,maisvaretournerl'identifiantdelaconnexiondjouverte.Lelienserafermautomatiquementdsquel'excutionduscriptseratermine,moinsd'trefermexplicitementavecmysql_close().
76
Crationd'uneapplicationWEBavecPHP/MySQL
ExampleMySQLconnect
mysql_db_queryEnvoieunerequteMySQLunserveurMySQL
resourcemysql_db_query(stringdatabase,stringquery,resourcelink_identifier)
mysql_db_query()retourneunidentifiantdersultatsilarequterussitetFALSEsinon.mysql_db_query()slectionneunebasededonnesetexcuteunerequte.Sil'identifiantdelienlink_identifiern'estpasprcis,mysql_db_query()prendrapardfautladernireconnexionouvertesurleserveuretsiellen'entrouvepas,elletenteradeseconnecter,enutilisantlafonctionmysql_connect(),sansarguments.
mysql_errnoRetournelenumrodemessaged'erreurdeladernireoprationMySQL.
intmysql_errno(ressourcelink_identifier)
mysql_errno()retournelenumrodemessaged'erreurdeladernireoprationMySQLsurlaconnexioncourante,ousurlaconnexionspcifieavecl'optionlink_identifier.LeserreursquisontremontesdepuisleserveurMySQLnesontplusdesalertes.Alaplace,ilfaututilisermysql_errno()pourobtenirlenumrod'erreur.
mysql_errorRetourneletexteassocieavecl'erreurgnrelorsdeladernirerequte.
stringmysql_error(resourcelink_identifier)
mysql_error()retournelederniermessaged'erreurMySQLsurlaconnexioncourante,ousurlaconnexionspcifieaveclink_identifier.LeserreursgnresparmySQLnesetransformentplusenalerte.Alaplace,ellessontaccessiblesviacesfonctions:
77
Crationd'uneapplicationWEBavecPHP/MySQL
mysql_fetch_arrayRetourneunelignedersultatsouslaformed'untableauassociatif.
arraymysql_fetch_array(resourceresult_identifier,intresult_type)
mysql_fetch_array()retourneuntableauquicontientlalignedemande,ouFALSEsiilneresteplusdeligne.mysql_fetch_array()estuneversiontenduedemysql_fetch_row().Enplusd'enregistrerlesdonnessousformed'untableauindicenumrique,ellepeutaussilesenregistrerdansuntableauassociatif,enutilisantlesnomsdeschampscommeindices.Siplusieurscolonnesontlemmenom,ladernirecolonneauralapriorit.Pouraccderauxautrescolonnesdummenom,vousdevezutiliserl'indexnumriques,oufaireunaliaspourchaquecolonne.Ilestimportantdesoulignequemysql_fetch_array()N'estPASpluslentequemysql_fetch_row(),tandisqu'elleajouteunconfortd'utilisationnotable..
mysql_fetch_rowRetourneunelignedersultatsouslaformed'untableau
arraymysql_fetch_row(resourceresult_identifier)
mysql_fetch_row()retourneuntableaunumrquicorrespondlalignedemande,ouFALSE,siilneresteplusdeligne.mysql_fetch_row()varechercherunelignedanslersultatassocil'identifiantdersultatspcifi.Laligneestretournesouslaformed'untableau.Chaquecolonneestenregistrsouslaformed'untableaucommenantlaposition0.Lesappelssuivantsmysql_fetch_row()retournerontlalignesuivantedanslersultat,ouFALSEsiiln'yaplusdelignedisponible.
mysql_free_resultEffacelersultatdelammoire
intmysql_free_result(resourceresult_identifier)
mysql_free_result()n'estappelerquesivousavezpeurd'utilisertropdemmoiredurantl'excutiondevotrescript.Toutelammoireassociel'identifiantdersultatseraautomatiquementlibre.
78
Crationd'uneapplicationWEBavecPHP/MySQL
mysql_num_rowsRetournelenombredeligned'unrsultat
intmysql_num_rows(resourceresult_identifier)
mysql_num_rows()retournelenombredelignesd'unrsultat.Cettecommanden'estvalidequepourlescommandesSELECT.PourconnatrelenombredelignesretournesparINSERT,UPDATEouDELETE,utilisezmysql_affected_rows().
Exemplemysql_num_rows()[email protected]
Crationd'uneapplicationWEBavecPHP/MySQL
mysql_select_dbSlectionneunebasededonnesMySQL
intmysql_select_db(stringdatabase_name,resourcelink_identifier)
mysql_select_db()retourneTRUEencasdesuccs,FALSEsinon.mysql_select_db()changelabasededonnesactivesurlaconnexionreprsenteparlink_identifier.Siaucunidentifiantn'estspcifi,ladernireconnexionestutilise.S'iln'yapasdedernireconnexion,lafonctiontenteradeseconnecterseule,avecmysql_connect()etlesparamtrespardfaut.Touteslesrequtessuivantesavecmysql_query()serontfaitesaveclabasededonnesactive.
ChainesdeCaractres
strtoupperMettouslescaractresenmajuscules
stringstrtoupper(stringstring)
strtoupper()retournestringavectoussescaractresalphabtiquesmisenmajuscule.Notezquelecaractre'alphabtique'estdterminparlatabledecaractreslocale.Parexemple,danslatabledescaractrespardfautdu"C",descaractrestelsqueaumlaut()neserontpasconvertis.
Exempleavecstrtoupper()
Crationd'uneapplicationWEBavecPHP/MySQL
X.L'applicationmyForumVoicilastructuredel'application:
myForum/+imgs/|+linux.png+inc/|+config.inc.php|+session.inc.php|+user.inc.php+default.css+editer.php+inscription.php+inscrit.php+login.php+mail.php+messages.php+savemessage.php+sujets.php+themes.php
LaclasseConfigCetteclassepermetdestockerdansunobjetlesdonnespermettantd'accderlabasededonnes,ellepermetgalementdevrifierquelaconnexionauserveurMySQLestOK.
Crationd'uneapplicationWEBavecPHP/MySQL
return$this>db_name;}
functiongetDbUser(){return$this>db_user;}
functiongetDbPass(){return$this>db_pass;}functiontestConnection(){$dbh=mysql_connect($this>getDbHost(),$this>getDbUser(),
$this>getDbPass());if($dbh==false){returnfalse;}else{$dbh=mysql_select_db($this>getDbName());if($dbh==false){returnfalse;}else{returntrue;}}}}?>
82
Crationd'uneapplicationWEBavecPHP/MySQL
LaclasseSessionCetteclassecreunobjetpermettantdegrerlessessions:rcuprationsdedonnes,sauvegardededonnes(notezl'utilisationde$_SESSIONaulieudesession_(un)register),modificationsdesURL(ajoutdesparamsdesession).
Crationd'uneapplicationWEBavecPHP/MySQL
LaclasseUserCetteclassecreunobjetpermettantdegrerl'utilisateur.
////user.inc.php//
classUser{var$user_code;var$user_name;var$user_firstname;var$user_email;//ConstructeurfunctionUser(){$user_code="";$user_name="";$user_firstname="";$user_email="";}//VerificationdelasessionfunctionisValid($session){//Lasessionestelleactive$this>restoreData($session);if($this>getId()==""){returnfalse;}else{//Lasessionestactivereturntrue;}}functionconnect($cuser,$pass,$cfg,$session){$this>user_code=$cuser;$dbh=mysql_connect($cfg>getDbHost(),$cfg>getDbUser(),
$cfg>getDbPass());$dbh=mysql_select_db($cfg>getDbName());$dbr=mysql_query("SELECTid_user,name,firstname,emailFROM
usersWHEREid_user='$cuser'ANDpasswd='$pass';");if(mysql_num_rows($dbr)>0){$enr=mysql_fetch_array($dbr);if($enr['id_user']==$this>user_code){$this>user_name=$enr['name'];$this>user_firstname=$enr['firstname'];$this>user_email=$enr['email'];$this>saveData($session);returntrue;}else{returnfalse;}}else{returnfalse;
84
Crationd'uneapplicationWEBavecPHP/MySQL
}}
functionsaveData($session){$session>save("userId",$this>user_code);$session>save("userName",$this>user_name);$session>save("userFirstname",$this>user_firstname);$session>save("userEmail",$this>user_email);returntrue;}
functionrestoreData($session){$this>user_code=$session>load("userId");$this>user_name=$session>load("userName");$this>user_firstname=$session>load("userFirstname");$this>user_email=$session>load("userEmail");returntrue;}functiongetId(){return$this>user_code;}
functiongetName(){return$this>user_name;}
functiongetFirstname(){return$this>user_firstname;}
functiongetEmail(){return$this>user_email;}}?>
85
Crationd'uneapplicationWEBavecPHP/MySQL
LapageloginCeciestlapremirepagesurlequell'utilisateurvapouvoirs'authentifier.
MyForumv0.1MyForumv0.1
Crationd'uneapplicationWEBavecPHP/MySQL
Codeuser:
Motdepasse:Sivousn'tespasencoreinscritveuillezcliquerici.Copyright20032004PhilippeBOUSQUETCelogicielestsouslicenceGnuGenralPublicLicense
87
Crationd'uneapplicationWEBavecPHP/MySQL
LapageinscritCeciestlapaged'inscriptionlorsquel'utilisateurveuts'inscriresurleforum.
MyForumv0.1MyForumv0.1Inscription
Nom:
88
Crationd'uneapplicationWEBavecPHP/MySQL
Prnom:Email:Codeuser:Password:Confirmation:
Copyright20032004PhilippeBOUSQUETCelogicielestsouslicenceGnuGenralPublicLicense
89
Crationd'uneapplicationWEBavecPHP/MySQL
LapartiemtierinscriptionCeciestpurementunactemtierquiajoutel'utilisateurdanslabasemySQL,elleredirigeraensuiteverslapagedeslectiondesthmes.
Crationd'uneapplicationWEBavecPHP/MySQL
}//Verificationdel'inexistenceducodeuser$dbh=mysql_connect($cfg>getDbHost(),$cfg>getDbUser(),$cfg>getDbPass());$dbh=mysql_select_db($cfg>getDbName());$dbr=mysql_query("SELECT*FROMusersWHEREid_user='$cuser';");if(mysql_num_rows($dbr)>0){header("Location:inscrit.php?ERROR=Code%20user%20dja%20utilis,%20veuillez%20en%20choisir%20un%20autre.&name=$name&firstname=$firstname&email=$email&cuser=");exit();}//Lescontrolessontokinscriptiondel'utilisateur$requete="INSERTINTO`users`(`id_user`,`passwd`,`name`,`firstname`,`email`)VALUES('$cuser','$passwd','$name','$firstname','$email');";$dbr=mysql_query($requete);//Onseconnecteheader("Location:themes.php?cuser=".$cuser."&passwd=".$passwd);?>
91
Crationd'uneapplicationWEBavecPHP/MySQL
LapartiemtiermailCeciestpurementunactemtierquienvoiel'utilisateursonmotdepasseparemail,siceluicil'aoubli.
Crationd'uneapplicationWEBavecPHP/MySQL
LapagedeslectiondethmeCettepagepermetl'utilisateurdeslectionnerlethemesqu'ilveutconsulter.
MyForumv0.1MyForumv0.1>>
Crationd'uneapplicationWEBavecPHP/MySQL
>QuitterMyForum:ListedesthmesThmeDescriptionSujetsDate
Crationd'uneapplicationWEBavecPHP/MySQL
LapagedeslectiondusujetCettepagepermet l'utilisateur deslectionne le sujet sur lequel il veut consulter lesmessages,ouencrerunnouveau.
MyForumv0.1MyForumv0.1>>Quitter::Thmes
95
Crationd'uneapplicationWEBavecPHP/MySQL
Crationd'uneapplicationWEBavecPHP/MySQL
Copyright20032004PhilippeBOUSQUETCelogicielestsouslicenceGnuGenralPublicLicense
97
Crationd'uneapplicationWEBavecPHP/MySQL
LapagedesmessagesCettepageaffichelalistedesmessagesconcernantunsujet,l'utilisateurpourragalementspcifierqu'ilveutrpondresurcesujet.
MyForumv0.1MyForumv0.1>>Quitter::Thmes::
Crationd'uneapplicationWEBavecPHP/MySQL
"id_theme=".$id_theme)."\"title=\"retourauxsujets\">";?>Sujets
Crationd'uneapplicationWEBavecPHP/MySQL
LapagedecrationdemessageCettepagepermetsoitderpondresurunsujetdonn,soitdecrersonpropremessagesurunnouveausujet.
MyForumv0.1MyForumv0.1>>Quitter::Thmes::Sujets
Crationd'uneapplicationWEBavecPHP/MySQL
echo'::Messages';
}?>';?>
Titre:Message:
Saisissezvotretexteici...
Crationd'uneapplicationWEBavecPHP/MySQL
echo'';echo''.$enr['id_user'].'';echo''.$enr['title'].'';echo''.$enr['date'].'';echo''."\n";echo'';echo''.
$enr['text'].'';echo''."\n";}echo'';echo'';}?>Copyright20032004PhilippeBOUSQUETCelogicielestsouslicenceGnuGenralPublicLicense
102
Crationd'uneapplicationWEBavecPHP/MySQL
Lapartiemtierdesauvegarded'unmessageCettepartiepermetdecrerunsujetenbaseMySQL(sibesoin),ainsiqued'enregistrerlemessagesaisiparl'utilisateur.
Crationd'uneapplicationWEBavecPHP/MySQL
XI.Rfrences
Pourplusd'informationssurMySQL: http://www.mysql.com http://dev.nexen.net/docs/mysql/
Pourplusd'informationssurphpMyAdmin:
http://www.phpmydamin.org
Pourplusd'informationssurXHTMLetCSS:
http://www.w3.org/ (LesiteofficielduW3C) http://openweb.eu.org/ (Pourlesstandardsduweb.Enfranais)
Pourplusd'informationssurPHP:
http://dev.nexen.net/docs/php/
104