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);