Cours PHP 2
Transcription
Cours PHP 2
Projet DELIRE Introduction à PHP/MySQL Les cookies conçus par Netscape fichiers texte courts stockés par le navigateur (côté client) cookie sans durée d’expiration : mémoire vive cookie avec durée d’expiration : mémoire secondaire Les cookies : setcookie.php <?php setcookie(’truc’, ’machin’); ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <title>Titre</title> </head> <body> <p>Un cookie a été envoyé</p> </body> </html> Les cookies : testcookie.php <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <title>Titre</title> </head> <body> <?php if (isset($_COOKIE[’truc’])) { echo '<p>Un cookie a été envoyé</p>' echo '<p>Son contenu est : '; echo $_COOKIE[’truc’]; echo '</p>'; } else { echo '<p>Aucun cookie du nom de truc</p>'; } ?> </body> </html> Les cookies : fonctions Suppression d’un cookie Modification de la valeur d’un cookie setcookie('nom') setcookie('nom', nouvelle valeur) Validité et date d’expiration setcookie('nom', valeur, timestamp) timestamp : nombre de secondes depuis le 1er janvier 1970 mktime(heures, minutes, secondes, mois, jour, an) Persistence des données On veut parfois garder de l’information entre plusieurs pages : Login / Password Préférences de navigation Sélection de produits à acheter (panier, ...) Persistence des données On utilise donc les sessions PHP. Les cookies permettent de stocker des informations côté client. Les sessions permettent de stocker des informations côté serveur. Elles sont identifiées par un numéro qui reste valide tant que le visiteur reste connecté. Le numéro est transmis au serveur soit dans l’URL, soit dans un cookie. Les données se placent et se récupèrent dans $_SESSION, comme pour les formulaires. Utilisation des sessions Les sessions utilisent les cookies : il faut donc ouvrir la session avant d'afficher quoi que ce soit (voir fonction setcookie) Note : Les valeurs des cookies sont dans le tableau pré-rempli $_COOKIE Le cookie utilisé (ou la variable dans $_GET à defaut) s'appelle PHPSESSID La session existe dès qu'elle est crée et jusqu'à ce qu'elle soit détruite Création (et réouverture) : session_start() Destruction : session_destroy() Note : les session s'autodétruisent après un certain temps (généralement 30 min) Exemple d'utilisation <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <title>Connexion au site</title> </head> <body> <form method="post" action="verifLogin.php"> <label>Login</label> <input type="text" name="login"> <br/> <label>Mot de passe</label> <input type="password" name="password"> <br/> <input type="submit" name="submit" value="Login"> </form> </body> </html> Création de la session <?php // On démarre la session session_start(); // On n’effectue les traitement qu’à la condition que // les informations aient été effectivement postées if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) && (!empty($_POST['submit'])) ) { extract($_POST); // création des variables $login, $password... // On va chercher les infos correspondant ce login // ... $_SESSION['login'] = $login; $_SESSION['age'] = 22; $_SESSION['pays'] = 'France'; echo '<p>Vous êtes bien connecté</p>'; } ?> Utilisation de la session <?php // On appelle la session session_start(); // On affiche une phrase résumant les infos sur l’utilisateur echo 'Login : ',$_SESSION['login'],'<br/>', 'Age : ',$_SESSION['age'],'<br/>', 'Pays : ',$_SESSION['pays'],'<br/>'; ?> Destruction de la session <?php // On appelle la session session_start(); // On écrase le tableau de session $_SESSION = array(); // On détruit la session session_destroy(); ?> SQL SQL est un langage puissant de requete Il permet de faire une demande complexe à une base de données dans un langage proche de l'anglais On l'utilise pour récupérer, ajouter, supprimer et créer des données dans une base de données Les bases de données utilisent des tables : chaque ligne est un enregistrement de champs avec des valeurs les requetes se font sur ces champs Exemple codeAer BST EFD LD NY-JFK ORLY RCDG TLS nomAeroport Poretta Ellington Field Heathrow John-F Kennedy Orly Charles de Gaulle Blagnac villeAeroport Bastia Houston Londres New York Paris Paris Toulouse Accès au serveur MySQL Connexion $c = mysql_connect("localhost", "login", "mdp"); $c est false en cas d'erreur de connexion Choix de la base $s = mysql_select_db("nom", $c); $s est false en cas d'erreur Requêtes Exécution $res = mysql_query("une requete", $c); $res est false en cas d'erreur Récupération de(s) résultat(s) $row = mysql_fetch_row($res); $tab = mysql_fetch_array($res); $obj = mysql_fetch_object($res); $row[0]; $row[1]; … $tab["champ"]; … ou $tab[0]; obj >champ; … … Autres fonctions mysql_num_rows($res) : mysql_affected_rows($res) : retourne le nombre de résultats d'un SELECT retourne le nombre de ligne affectées par un INSERT, un UPDATE ou un DELETE mysql_insert_id($c) : retourne le dernier incrément d'un champ AUTO_INCREMENT Injections SQL Utilisateur Dupont Utilisateur : Dupont' - SELECT uid WHERE name = 'Dupont' AND password = '45723a2af3788c4ff17f8d1114760e62'; SELECT uid WHERE name = 'Dupont' -- ' AND password = '4e383a1918b432a9bb7702f086c56596e'; Utiliser mysql_real_escape_string sur les données utilisateur : Dupont' -- → Dupont\' --