240 likes | 357 Views
Mysql et Sessions PHP. Modex Web Dominique Rossin. La semaine passée ?. C:xampphtdocsindex.php. http://www.polytechnique.fr/index.php. index.php. OUTPUT de PHP index.php. Mysql. PHP. Détruire des données. SELECT * FROM ‘contact‘ WHERE (login1 = ’rossin’) OR (login2 = ’rossin’).
E N D
Mysql et Sessions PHP Modex Web Dominique Rossin
La semaine passée ? C:\xampp\htdocs\index.php http://www.polytechnique.fr/index.php index.php OUTPUT de PHP index.php Mysql PHP
Détruire des données SELECT * FROM ‘contact‘ WHERE (login1 = ’rossin’) OR (login2 = ’rossin’) Recherche des contacts de 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
Exemple On détruit l’enregistrement DELETE FROM `table_nom` WHERE `nom`=‘serre’ AND `prenom`=‘olivier’ • On réinsère le nouveau • INSERT INTO`table_nom` (`prenom`,`nom`,age `) VALUES (‘olivier’, ‘serre’,’30’) PB : id a changé
Patch INSERT INTO`table_nom` (`id`,`prenom`,`nom`,age `) VALUES (‘1’,‘olivier’, ‘serre’,’30’) OK
Problème : retour en arrière INCOHERENCE • On détruit l’enregistrement • DELETE FROM `table_nom` WHERE `nom`=‘serre’ AND `prenom`=‘olivier’
Bonne solution : UPDATE UPDATE `table_nom` SET `age`=’30’ WHERE `id`=‘1’ UPDATE `table_nom` Quelle table SET `age`=’30’ Quellemodif 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 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) • 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_dump(isset($var)) ; $var = NULL ; var_dump(isset($var)) ; ?> 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