View
20
Download
0
Embed Size (px)
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):
[[email protected]]$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.*[email protected];QueryOK,0rowsaffected(0.82sec)
mysql>grantallprivilegesonmyforum.*towwwadmin;QueryOK,0rowsaffected(0.82sec)
11
Crationd'uneapplicationWEBavecPHP/MySQL
NouspouvonsdoncmaintenantquitterleclientMySQL:
mysql>quitBye[[email protected]]$
Donnonsmaintenantunmotdepassepourl'utilisateurwwwadmin:
[[email protected]]$mysqladminpuwwwadminpassword'azerty'Enterpassword:[[email protected]]$
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".
Nousarrivonssuruncranquinousproposedecrerunenouvellet