MODEX WEB DOMINIQUE ROSSIN Mysql. La semaine passée index.php?page=contact Page autorisée ?...

Preview:

Citation preview

MODEX WEBDOMINIQUE ROSSIN

Mysql

La semaine passée

index.php?page=contact

index.php?page=contact

Page autorisée ?

Page autorisée ?

RedirectionRedirection

NON

<div><?phpinclude (‘main_’.contact.’.php’);</div>

<div><?phpinclude (‘main_’.contact.’.php’);</div>

OUI

Comment ca marche ?

http://www.polytechnique.fr/index.php

ind

ex.p

hp

OU

TP

UT

de P

HP

in

dex.

ph

pC:\xampp\htdocs\index.php

Mysql

Représentation des données

Problème : On a un profil utilisateur. Comment retenir les informations ? (CSS, fil RSS . . . )

Exemple : iGoogle, Facebook . . .

En Java : On crée une classe :class Utilisateur {String nom ;String feuilleStyle ;...}

En Java : On crée une classe :class Utilisateur {String nom ;String feuilleStyle ;...}

Persistence

Persistence entre 2 visites ?Sauvegarde :

Fichier Problème de sécurité Recherche d’information

Base de donnée ?

table

Une base de données contient plusieurs tables.Une table est un ensemble d’enregistrements.Un enregistrement contient un nombre déterminé

de champs (par exemple nom, prenom)Les champs sont formatésPas de possibilité de liste chainée, d’ensemble ! ! !Chaque enregistrement doit différer par sa clé

primaire.

Représentation

Id Prénom Nom Age

1 olivier serre 20

2 Leonhard

Euler 302

3 Baptiste Desprez

15

4 François Morain 12

Id Id1 Id2

1 1 2

2 1 3

3 1 4

Exemple

On veut créer une table permettant de stocker le nom d’utilisateur, le nom, le prénom, la date de naissance et la feuille de style préférée d’un utilisateur.

Les champs seront donc : login (VARCHAR(10)) nom (VARCHAR(30)) prenom (VARCHAR(20)) naissance (date) feuillestyle (VARCHAR(50))

Clé primaire

PhpMyAdmin

Création d’une base de donnéesCréation d’une table

CREATE TABLE ‘personne‘ (‘login‘ varchar(10) NOT NULL,‘nom‘ varchar(50) NOT NULL,‘prenom‘ varchar(50) NOT NULL,‘feuilleStyle‘ varchar(50) NOT

NULL,‘naissance‘ date NOT NULL,PRIMARY KEY (‘login‘),KEY ‘nom‘ (‘nom‘)

)

CREATE TABLE ‘personne‘ (‘login‘ varchar(10) NOT NULL,‘nom‘ varchar(50) NOT NULL,‘prenom‘ varchar(50) NOT NULL,‘feuilleStyle‘ varchar(50) NOT

NULL,‘naissance‘ date NOT NULL,PRIMARY KEY (‘login‘),KEY ‘nom‘ (‘nom‘)

)

Ajout

Ajouter un enregistrement dans la tableAjout d’un uplet (nom, prenom,

dateNaissance, login, feuilleStyle)Que se passe-t-il en cas de doublons pour le

login ?

SQL INSERT

INSERT INTO ‘test‘.‘personne‘ (‘login‘ , ‘nom‘ , ‘prenom‘ ,‘feuilleStyle‘ , ‘naissance‘)VALUES (’rossin94’, ’rossin’, ’dominique’, ’bo.css’,’1973-08-14’) ;

INSERT INTO ‘test‘.‘personne‘ (‘login‘ , ‘nom‘ , ‘prenom‘ ,‘feuilleStyle‘ , ‘naissance‘)VALUES (’rossin94’, ’rossin’, ’dominique’, ’bo.css’,’1973-08-14’) ;

Recherche

SELECT * FROM ‘personne‘ WHERE ‘login‘ LIKE ’%o%’

Recherche des logins contenant un oRecherche des logins contenant un o

Tri des résultats

SELECT *FROM ‘personne‘WHERE ‘login‘ LIKE ’%o%’ ORDER BY ‘login‘

Recherche des personnes dont le login contient un o triées par ordre alphabétique

Recherche des personnes dont le login contient un o triées par ordre alphabétique

Limitation des résultats

SELECT *FROM ‘personne‘WHERE ‘login‘ LIKE ’%o%’ ORDER BY ‘login‘ LIMIT 10

Recherche des personnes dont le login contient un o triées par ordre alphabétique (limité à 10

réponses)

Recherche des personnes dont le login contient un o triées par ordre alphabétique (limité à 10

réponses)

LIMIT 10,20LIMIT 10,20

Et les listes alors ?!?

On veut stocker les contacts d’une personne . . .

C’est un ensemble Solution ?

Création d’une table d’associations !Création d’une table d’associations !

Structure•login1•login2•clé ?

Structure•login1•login2•clé ?

Création de la table

CREATE TABLE ‘test‘.‘contact‘ ( ‘cle‘ INT NOT NULL AUTO_INCREMENT , ‘login1‘ VARCHAR( 10 ) NOT NULL , ‘login2‘ VARCHAR( 10 ) NOT NULL , PRIMARY KEY ( ‘cle‘ ))

Recherche des login des contacts de rossin

SELECT * FROM ‘contact‘WHERE (login1 = ’rossin’)OR (login2 = ’rossin’)

login prenom nom Age

serre olivier serre 20

euler Leonhard

Euler 302

desprez

Baptiste Desprez

15

morain François Morain 12

Id login1 login2

1 serre euler

2 serre desprez

3 morain desprez

Recherche des noms et prenoms

SELECT personne.nom, personne.prenom FROM personne,contactWHERE ( (personne.login = contact.login1)AND ( contact.login2 =

’rossin’ ))OR (( personne.login = contact.login2 )AND ( contact.login1 =

’rossin’ ))login prenom nom Ag

e

serre olivier serre 20

euler Leonhard

Euler 302

desprez

Baptiste Desprez

15

morain François Morain 12

Id login1 login2

1 serre euler

2 serre desprez

3 morain desprez

4 rossin serre

5 desprez rossin

Recherche des noms et prénoms (Optimisation)

SELECT personne.nom, personne.prenomFROM personne INNER JOIN contact ON ( (contact.login1 = ’rossin’AND contact.login2 = personne.login)OR (contact.login2 = ’rossin’AND contact.login1 = personne.login) )

Calcul de moyenne de notes

SELECT AVG(note) FROM `tableNote` WHERE `idPhoto`=‘1’;

idPhoto

user note

1 serre 2

1 euler 5

1 desprez 2

1 morain 1

idPhoto AVG(note)

1 2.5

Calcul de moyenne de notes (2)

SELECT idPhoto, AVG(note) AS moyenne FROM `tableNote` GROUP BY idPhoto;

idPhoto

user note

1 serre 2

1 euler 5

2 desprez 0.5

2 morain 1

idPhoto moyenne

1 3.5

2 0.75

Et PHP ?

function connect () { // Connection SGBD, user toto,mot de passe titi $db=mysql_connect("localhost", "toto", "titi"); // Choix de la BD test mysql_db("test", $db); mysql_query("SET NAMES ’utf8’") ;}function foo() { connect(); $req = mysql_query("SELECT * FROM personnes"); $res = mysql_numrows($req) ; // Nbre de réponses echo $res;}

Exploitation résultats

function bar() { connect(); $req = mysql_query("SELECT * FROM personnes"); while ($tab = mysql_fetch_assoc($res)) { foreach ($tab as $cle=>$val) {

echo $cle.’ => ‘.$val.’<br />’; } }}

prenom Nom

dominique Rossin

Olivier Serre

Prenom => dominiqueNom => RossinPrenom => OlivierNom => Serre

Prenom => dominiqueNom => RossinPrenom => OlivierNom => Serre

Foreach ligne