MODEX WEBDOMINIQUE ROSSIN
Mysql et Sessions PHP
La semaine passée ?
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
Détruire des données
SELECT * FROM ‘contact‘WHERE (login1 = ’rossin’)OR (login2 = ’rossin’)
Id login1 login2
1 serre euler
2 serre desprez
3 morain desprez
4 rossin desprez
5 serre rossin
Recherche des contacts de rossin
Recherche des contacts de rossin
DELETE FROM ‘contact‘WHERE (login1 =
’rossin’)OR (login2 = ’rossin’)
DELETE SELECT *
Mise à jour d’un enregistrement
Solution 1DELETEINSERTOn veut changer l’age de Olivier Serre
Solution 1DELETEINSERTOn veut changer l’age de Olivier Serre
id prenom nom Age
1 olivier serre 20
2 Leonhard
Euler 302
3 Baptiste Desprez
15
4 François Morain 12
Id p1 p2
1 1 2
2 1 3
3 2 4
Exemple
On détruit l’enregistrement DELETE FROM `table_nom` WHERE `nom`=‘serre’ AND
`prenom`=‘olivier’ id prenom nom age
2 Leonhard
Euler 302
3 Baptiste Desprez
15
4 François Morain 12
Id p1 p2
1 1 2
2 1 3
3 2 4
On réinsère le nouveau INSERT INTO`table_nom` (`prenom`,`nom`,age `) VALUES (‘olivier’,
‘serre’,’30’)id prenom nom age
2 Leonhard
Euler 302
3 Baptiste Desprez
15
4 François Morain 12
5 Olivier Serre 30
Id p1 p2
1 1 2
2 1 3
3 2 4
PB : id a changéPB : id a changé
Patch
INSERT INTO`table_nom` (`id`,`prenom`,`nom`,age `) VALUES (‘1’,‘olivier’, ‘serre’,’30’)
id prenom nom age
2 Leonhard
Euler 302
3 Baptiste Desprez
15
4 François Morain 12
1 Olivier Serre 30
Id p1 p2
1 1 2
2 1 3
3 2 4
OKOK
Problème : retour en arrière
On détruit l’enregistrement DELETE FROM `table_nom` WHERE `nom`=‘serre’ AND
`prenom`=‘olivier’ id prenom nom age
2 Leonhard
Euler 302
3 Baptiste Desprez
15
4 François Morain 12
Id p1 p2
1 1 2
2 1 3
3 2 4
INCOHERENCEINCOHERENCE
Bonne solution : UPDATE
UPDATE `table_nom` SET `age`=’30’ WHERE `id`=‘1’
UPDATE `table_nom` SET `age`=’30’ WHERE `id`=‘1’
UPDATE `table_nom` Quelle tableUPDATE `table_nom` Quelle table
SET `age`=’30’ Quelle modif
SET `age`=’30’ Quelle modif
WHERE `id`=‘1’ Quels enregistrements
WHERE `id`=‘1’ Quels enregistrements
Exemple : Mots de passe
Changement de mot de passe.2 opérations:
Vérification de l’ancien mot de passe Modification du mot de passe
login prenom nom age mdp
serre olivier serre 30 aigle
euler Leonhard Euler 302 lemme
desprez Baptiste Desprez 15 prez
morain François Morain 12 ouichef
UPDATE `tableLogin` SET `mdp`=‘groupir’ WHERE `login`=‘morain’ AND `mdp`=‘ouichef’
UPDATE `tableLogin` SET `mdp`=‘groupir’ WHERE `login`=‘morain’ AND `mdp`=‘ouichef’
Opération réussie ?
Connaitre le nombre de lignes qui ont changé
mysql_query(‘’UPDATE ……..’’);if (mysql_affected_rows()==1) …mysql_query(‘’UPDATE ……..’’);if (mysql_affected_rows()==1) …
Bonne méthode : les transactions et le système de verrou
Concurrence
Effacement d’un utilisateur (ex : serre)id prenom nom Ag
e
1 olivier serre 20
2 Leonhard
Euler 302
3 Baptiste Desprez
15
4 François Morain 12
Id p1 p2
1 1 2
2 1 3
3 2 4
Action sur 2 tables2 opérations DELETE sont nécessaires
LOCK des tables
LOCK TABLES `personnes`,`contact` WRITE DELETE from `personnes` WHERE ... DELETE from `contact` WHERE ...UNLOCK TABLES
Entre LOCK et UNLOCK personne ne peut toucher aux tables.
Système de réservation
Réservation de placesGestion d’un panierOn doit réserver des éléments pour une
certaine durée de temps
TIMESTAMP : Tampon de temps
TimeStamp
Champ DATETIME ou TIMESTAMPOn stocke NOW() lors de la réservationPour vérifier la disponibilité on vérifie le délai
depuis le TIMESTAMP.
Retour sur PHP
< ?php$var = 3 ;var_dump(isset($var)) ;unset($var) ;var_dump(isset($var)) ;$var = NULL ;var_dump(isset($var)) ;
?>
TRUETRUE
FALSEFALSE
FALSEFALSE
Clés de tableaux
< ?php$search_array = array(’premier’ => null, ’second’=>
4);
isset($search_array[’premier’]) ;
array_key_exists(’premier’, $search_array) ;
?>
FALSEFALSE
TRUETRUE
Sessions
Une session permet de garder des informations d’une visite à l’autre d’un utilisateur
On peut garder des informations entre les pages
Les variables se transmettent sous forme de tableau
$_SESSION
Il est toujours possible de pirater une session
Ajout de cryptographie
Comment ?
On commence par session_start() avant tout code HTML.
On travaille ensuite avec les tableau $_SESSION vu comme un tableau persistent
Exemple
<?phpsession_start();if (isset($_GET[’reset’])) unset($_SESSION[’count’]);if (isset($_SESSION[’count’])) $_SESSION[’count’]++;
else $_SESSION[’count’] = 0;$sess = $_SESSION[’count’];
echo <<<END<html><body><a href="index.php">retour $sess</a><a href="index.php?reset=1">reset</a></body></html>END;?>
Pas d’espace
Pas d’espace
Utilisation
Connexion des utilisateurs:<?php
session_start();if ($_POST[‘action’]==‘login’ && estUtilisateurValide()) {
$_SESSION[‘login’] = …; } if (array_key_exists(‘login’,$_SESSION))
echo ‘’Bonjour ‘’.$_SESSION[‘login’];?>
La face cachée des sessions
A chaque session est associé un identifiant ou SID
Le SID est un identifiant unique
Le SID est transmis de manière transparente de page en page
Soit utilisation de cookie, soit via l’URL
Un SID n’est valable que pendant la visite du site et 30 min environ après
Détruire une session
<?phpsession_start() ;//destruction de toutes les variable de sessionssession_unset() ;//destruction de la sessionsession_destroy() ;// redirectionheader("Location: index.php") ;
?>
CNIL
Dans le cas d’enregistrement d’un utilisateur et d’un mail. Déclaration à la CNIL Envoi d’un mail de vérification mail(destinataire,
objet, contenu) Possibilité de désinscription