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\' --