Modex Web Dominique Rossin Mysql et Sessions PHP Modex Web Dominique Rossin
PHP La semaine passée ? Mysql C:\xampp\htdocs\index.php http://www.polytechnique.fr/index.php index.php OUTPUT de PHP index.php Mysql PHP
Recherche des contacts de rossin Détruire des données Recherche des contacts de rossin Id login1 login2 1 serre euler 2 desprez 3 morain 4 rossin 5 SELECT * FROM ‘contact‘ WHERE (login1 = ’rossin’) OR (login2 = ’rossin’) DELETE FROM ‘contact‘ WHERE (login1 = ’rossin’) OR (login2 = ’rossin’) DELETE SELECT *
Mise à jour d’un enregistrement Solution 1 DELETE INSERT On 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 2 3 4
Exemple id prenom nom age 2 Leonhard Euler 302 3 Baptiste Desprez 15 4 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 2 3 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 2 3 4 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 2 3 4 OK
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 2 3 4 INCOHERENCE
Bonne solution : UPDATE UPDATE `table_nom` SET `age`=’30’ WHERE `id`=‘1’ UPDATE `table_nom` Quelle table SET `age`=’30’ Quelle modif WHERE `id`=‘1’ Quels enregistrements
Exemple : Mots de passe Changement de mot de passe. 2 opérations: login prenom nom age mdp serre olivier 30 aigle euler Leonhard Euler 302 lemme desprez Baptiste Desprez 15 prez morain François Morain 12 ouichef Changement de mot de passe. 2 opérations: Vérification de l’ancien mot de passe Modification du mot de passe 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) … Bonne méthode : les transactions et le système de verrou
Concurrence Effacement d’un utilisateur (ex : 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 2 3 4 Action sur 2 tables 2 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 places Gestion d’un panier On doit réserver des éléments pour une certaine durée de temps TIMESTAMP : Tampon de temps
TimeStamp Champ DATETIME ou TIMESTAMP On stocke NOW() lors de la réservation Pour 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 = NULL ; ?> TRUE FALSE FALSE
Clés de tableaux < ?php $search_array = array(’premier’ => null, ’second’=> 4); isset($search_array[’premier’]) ; array_key_exists(’premier’, $search_array) ; ?> FALSE TRUE
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 Pas d’espace <?php session_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; ?>
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 <?php session_start() ; //destruction de toutes les variable de sessions session_unset() ; //destruction de la session session_destroy() ; // redirection header("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