1. Conception de la base de données 2. Installation de phpmyadmin
Transcription
1. Conception de la base de données 2. Installation de phpmyadmin
TDdéveloppementWebetdéploiementdesiteinternet PatrickNourrissier–2016 Ce TD complète les premiers td en javascript et algorithmique. Il est vous proposé d’exploiterlesressourcesoffertesparPHPetMysql. 1. Conceptiondelabasededonnées DepuisvotreenvironnementLinux,vousdevezcréerunebasededonnéesappeléetd.Si leserveurdebasededonnéesn’estpasinstallé,vousdevezfaire: apt-getupdate apt-getinstallmysql-server(unmotdepasseserademandédeuxfois,sidéjàinstallé motdepasse:fcoupatselonlaversiondel’imageiso) Ensuite,connectezvousenlignedecommande:Mysql–uroot–p Tapezvotremotdepasse. Pourcréerunebasededonnées:createdatabasetd; Poursupprimer:dropdatabasetd; Poursemettresurunebasededonnées:usetd; Pourcréeruncompteutilisateur,avecloginetmotdepasseuniquementsurlabasede donnéestd: grantallprivilegesontd.*toUSER@localhostidentifiedby‘VOTREMOTDEPASSE’ withgrantoption; La syntaxe localhost restreint uniquement la connexion au local, si vous souhaitez l’étendreàtoutleréseau,ilfautmettreUSER@’’%’’ Testezlaconnexionavecleloginetmotdepassecréés,ilfautrajouterlenomdelabdà lacommandemysql:mysql–uVOTREUSER–ptd 2. Installationdephpmyadmin L’installationdephpmyadmins’effectuedepuislalignedecommandesuivanteentant qu’administrateur: apt-getinstallphpmyadmin Info:SuiteaupassageàJessie,uneanomaliedeconfigurations’estglissée,veuillez éditerlefichier/etc/apache2/conf.d/phpmyadmin.confpuisajouterenfindeligne 18lecontenusuivant: php_admin_valueopen_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/ph p/php-gettext/ 3. Gestiondel’alias Pardéfautl’aliasàutiliserestgéréàlasyntaxeligne3dumêmefichierédité précédemment. Alias/phpmyadmin/usr/share/phpmyadmin Ousidéjàmodifié: Alias/phpmyadmin54/usr/share/phpmyadmin Sivousavezl’alias/phpmyadmin54,veuillezaussimettreencommentairelesdernières lignes<Directory…jusqu’àlafinenrajoutantun#àchaqueligne.Vouspourrezensuite aumomentdutestdesdroitslesenlever.(Voirpointsuivant). #<Directory/usr/share/phpmyadmin> #<IfModulemod_authn_file.c> #AuthTypeBasic #AuthName"phpMyAdminAccess" #AuthUserFile/etc/phpmyadmin/htpasswd #</IfModule> #Requirevalid-user #</Directory> Vouspouvezfaireunessaiensaisissant: http://td/phpmyadmin ouhttp://td/phpmyadmin54 Jevousdemandedemodifierl’aliasdepuiscemêmefichier: /etc/apache2/conf.d/phpmyadmin.conf enutilisantunautrealiasmoinsparlant(afind’éviterlesrobots).Puisfaitesun rechargementdeconfiguration:serviceapache2reload 4. Protectionparmotdepasse.htaccess Idéalement,ilfaudraitprotégercedossierenymettantunloginetmotdepasse.Nous allonsutiliserlacommandehtpasswdpourcela. Editerlefichier/etc/apache2/conf.d/phpmyadmin.conf Puisajouterlecontenusuivantenfindefichier: <Directory/usr/share/phpmyadmin> <IfModulemod_authn_file.c> AuthTypeBasic AuthName"phpMyAdminAccess" AuthUserFile/etc/phpmyadmin/htpasswd </IfModule> Requirevalid-user </Directory> Enregistrezetquittez.Nousallonsmaintenantgénérerleloginetmotdepasse. Faites cd/etc/phpmyadmin/ Puisgénérezuncompte: htpasswd-chtpasswdUSERNAME Unmotdepasseestdemandé,nel’oubliezpas! N’oubliezpaslerechargementdeserviceàchaquemodification.Faitesdenouveaula tentativedeconnexionsurvotrephpmyadminavecl’aliasmodifié,vousdevriezavoirle messagesuivant: 5. Modélisationdelabasededonnées L’objectif est de pouvoir stocker l’ensemble des générations de points à chaque appel Ajax.Cettegénérationaléatoiredepointspeuts’assimileràdesclicsd’utilisateur.Ainsi lagrillededamierquevousavezcommencéàfairepeutfinalementêtrevuecommeun découpagedezonessurunepageinternet.VoiciunexempledecequeproduitGoogle lorsdutravaild’analyseducomportementd’unutilisateursurunsite: L’idéeestqu’ensuitechaquecaseprendraunecouleurquiseradépendantedunombre defoisquecelle-ciaétésélectionnéedemanièrealéatoire. Il est demandé dans un premier temps de modéliser ce qui vous semble nécessaire, notamment: - lesappels - lerésultatdelagénération Pensezauxoptimisationspossibles.Unefoislabaseconçue,faitesunenouvellefonction sur base de CallSampleBuildAjax afin qu’elle puisse côté PHP alimenter vos tables nouvellement créées. Vous pouvez définir un nouveau paramètre lu en POST ou GET pourtesterplusfacilement),ilfaudraalorsmodifierunpeuledébutduscriptPHP. if (isset($_GET["op"])) $op=$_GET["op"]; Pensezàbiengérerlesdifférentscasdegestion: - Initialisationdelabase - Traitementd’unappelcomprenant: o Gestion de la session: initialisation avec session_start(), lecture avec session_id() o Insertiondesnouvellescoordonnées o Actualisationdelabase(encasdenécessitéd’actualiser) o Générationdesdonnéesderetour Exempledeconnexionàlabasededonnées(versionPDO): $user='MONCOMPTE'; $password='MONPASSWORD'; $pdo = new PDO('mysql:host=localhost;dbname=MADB, $user, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET names utf8') ); Exemplederequêtedesélection: $strRq = "SELECT count(nb) as nb1 FROM matrice WHERE nb=20"; $st = $pdo->prepare($strRq); $st->execute(); $fields=$st->fetch(); //lecture $nb1=$fields['nb1']; Exemplederequêtedesélectionpréparée(protectiondesdonnéesinserées): $strRq6="SELECT count(nbpions) as nbtot FROM appel WHERE nbpions=:nbpions"; $st6 = $pdo->prepare($strRq6); $st6->bindValue(':nbpions', $nbvalue, PDO::PARAM_INT); $st6->execute(); Exempled’insertionàlabasededonnéesparpaquetderecord: $st5 = $pdo->query("insert into matrice(xy, tot, coef, nb) values (\"1_1\",0,0,20) ") ; Exempled’insertionaveclesméthodesbind: $strRq1='INSERT INTO appel(nbpions, dateappel) VALUES (:nbpions, :dateappel)'; $st1 = $pdo->prepare($strRq1); $st1->bindValue(':nbpions', $nbvalue, PDO::PARAM_STR); $st1->bindValue(':dateappel', $date, PDO::PARAM_STR); $res=$st1->execute(); // récupération du dernier élément inséré $idappel = $pdo->lastInsertId($res);