PHP Fichiers Sessions Mysql
-
Author
ninalachheb -
Category
Documents
-
view
27 -
download
3
Embed Size (px)
description
Transcript of PHP Fichiers Sessions Mysql

Rappel
FichiersSe souvenir de login de l'utilisateur

Plan
Introduction aux fichiers
Introduction aux :
sessions
coockies
Bases de données
PHP/MySQL

Les fichiersintroductionPourquoi ?
très souvent utilisés en PHP
recueillir les informations en provenance des postes clients/BD
cas de données simples et de taille modeste
BD pour les données complexes et les traitements pointues
exemple d'utilisations :
le nombre des visiteurs
sondages
données temporelles (BD)
…
Manipulation de fichiers proche du langage C :
ouverture / création, écriture / lecture / modification, fermeture

Les fichiersfopen()Avant de réaliser des opérations de lecture ou d'écriture sur un fichier il faut l'ouvrir explicitement
Fonction: $id_file = fopen(string $nom, string $mode)
$nom : le nom du fichier :
"monfichier.txt"
"../../repertoire/monfichier.txt"
"c:\\repertoire\\monfichier.txt" (sous windows)
"http://www.monsite.net/repertoire/monfichier.txt"
FTP
$mode : mode d'accès : a, a+, r, r+, w, c, b,...
Valeur de retour : $id_file un pointeur sur le début du fichier ouvert (c'est un flux)
<?php$id_file = fopen("monfichier.txt","a");
?>

Les fichiers lecture
fgets($id_file [, nombre_octets]) : récupère la ligne courante sur laquelle se trouve le pointeur du fichier
La chaine de retour est nulle si pas de ligne à extraire
Pour parcourir un fichier texte utiliser une boucle
fread($id_file, nb_octets) : lit jusqu'à nb_octets octets dans le fichier référencé par id_file
La lecture s'arrête si la fin du fichier est atteinte
Cette fonction est adapté à des fichiers ou la longueur des données à extraire est fixée en avance et qu'ils sont enregistrées par paquets
ManipFile.php
Monfichier.txt

Les fichiers : lectureautres fonctions
fwrite($id_file, $chaine) : cette fonction écrit le contenu de la chaine dans le fichier identifié par $id_file
fputs( $id_file, $chaine) :
fclose() : fermeture d'un fichier
foef() : vérifier si la fin du fichier est atteinte
fgetc($id_file) : lit un caractère à la fois
fseek() / rewind() / ftell() : positionnement dans le fichier
filesize() : retourne la taille totale du fichier
copy() / rename() / unlink() : copie/renomme/efface un fichier

Les fichiers Exemple : Compteur de visites
compteur.php
DEMO ?
Visiteur 1Ecrire dans le fichier
Visiteur NEcrire dans le fichier
Visiteur 2Lire le fichier

Les fichiers verouillageProblème de concurrence :
Plusieurs clients demandent un fichier simultanément
deux scripts modifient un fichier en même temps
Conflit
Verrouiller un fichier pour ne pas autoriser tout accès / modification / ajout à ce fichier
boolean flock($id_file, int N)
N : définit le mode de verrouillage du fichier :
=LOCK_SH (ou 1) : bloque l'écriture dans le fichier mais laisse le libre accès en lecture à tous les utilisateurs
=LOCK_EX( ou 2) : bloque l'écriture et la lecture du fichier par un autre script
=LOCK_UN ( ou 3) : libère le verrou installé précédemment

Les fichiers Exemple : Compteur de visites
compteur.php
flock($id_file, 3) // libère le verrou
flock($id_file, 1) // bloque l'écriture dans le fichier
flock($id_file, 3) // libère le verrou
flock($id_file, 2) // bloque l'écriture et la lecture du fichier

Inclusion de fichiers
Inclusion d'un autre fichier PHP :
Regroupement de fonctions (liées à la manipulation de BD par exemple) ou de variables (compt !!!)
Organisation d'un site Web
include("nom_fichier.php");
Exemple : …<?php include('compteur.php'); ?><?php
//....include('entete.php')//....include('menu.php')//...Include('piedpage.php')
?>

Cookies & sessions
FichiersSe souvenir de login de l'utilisateur

Cookies & sessions
Techniques qui permettent de conserver des informations (chez le visiteur ou le serveur) pour améliorer le service rendu par un site
Se souvenir du login du visiteur pour les sites avec authentification
Se souvenir des références indiquant à quoi le visiteur s'intéresse
Se souvenir des dernières pages visitées par l'utilisateur
...

Les cookies
Un cookie est un petit fichier placé sur l'ordinateur du visiteur
Les cookies servent à stocker de l'information chez le visiteur
Ils sont propres à un PC et ne sont pas récupérables si l'utilisateur se reconnecte à partir d'un autre poste
PHP permet d'écrire et de lire les cookies sur l'ordinateur du visiteur
Ces informations peuvent être utilisées pour authentification, préférences d'un site, le contenu d'un panier d'achat, …
En général, un cookie n'est accessible que par le site qui l'a écrit

Les cookies
Pour écrire un cookie, il faut utiliser la fonction setcookie():
<?php setcookie("nom", "valeur"); ?>
setcookie() doit être appelée avant d'écrire sur la sortie standard
Par défaut, le cookie expire à la fermeture du navigateur et est accessible par toutes les pages de votre domaine
Pour changer cela :
<?php setcookie("nom", //le nom du cookie
"valeur", //la valeur associée au cookietime()+3600, //valable une heure(60*60)"/chemin/",
/* le chemin d'accès aux dossiers qui contiennent les scripts autorisés à accéder au cookie */
"www.domaine.com");?>

Les cookiesExemple
<?php
setcookie("Nom","OMAROMARO"); //cookie valable uniquement pour la session// setcookie("nom") affecte la chaîne vide au cookie
setcookie("Prenom","FATAFIT",time()+(60*60*24)); //cookie valable 24 heures?>
DEMO ?menu Google Chrome → Paramètres → paramètres avancés → "Confidentialité" → Paramètres de contenu
Attention : Les cookies ne sont pas immédiatement accessibles par la page qui vient de les créer

Les cookiesExemple
La lecture des cookies se fait via la variable superglobale $_COOKIE :
<?phpsetcookie("nom1","valeur1");setcookie("nom2","valeur2");
?><ahref="page2.html">page2</a>
Contenu de la page page1.php
<?echo$_COOKIE["nom1"]."</br>";//affiche valeur1echo$_COOKIE["nom2"]."</br>";//affiche valeur2?> Contenu de la page page2.php

Les cookiesExemple : tableaux associatifs
La lecture des cookies se fait via la variable superglobale $_COOKIE : <?php
setcookie("tab['key1']", "valeur1");setcookie("tab['key2']", "valeur2");setcookie("tab['key3']", "valeur3");
?><a href="page2.html"> page2 </a>
Contenu de la page page1.php
<? php foreach($_COOKIE["tab"] as cle => $valeur) {
echo $cle.'=>'.$valeur.'<br/>';}?>
Contenu de la page page2.php
key1 => valeur1key2 => valeur2key3 => valeur3

Les cookiesExemple

Cookies & sessions
FichiersSe souvenir de login de l'utilisateur

Les sessions
Une session permet de stocker des informations de l'utilisateur sur le serveur et de les réutiliser dans toutes les pages du site pour un même visiteur :
Identifiants de connexion, informations personnelles, …
Chaque utilisateur se voit attribuer un identifiant de session lié à la session en cours
cet identifiant est transmis d'une page à une autre de deux manières différentes : PHPSESID
soit en étant écrit dans un cookie sur le poste client
soit en étant ajouté à l'URL de la page cible d'un lien
Une session est temporaire et est effacée très rapidement du serveur
Le temps moyen est de 30 minutes par défaut

Les sessions
Démarrer une session :
Ouverture d'une session dans chaque page ayant accès aux données à l'aide de la fonction : session_start(("nom", "valeur");
Dans le cas de sessions avec cookie, il faut écrire la fonction au début du script
Dans le cas d'un démarrage de nouvelle session, un fichier (cookie) est créé sur le serveur pour cette session
Dans le cas ou le fichier existe déjà (session déjà démarrée), la lecture des variables de sessions se fait via la variable superglobale $_SESSION avec comme clés les noms des variables

Les sessionsExemple : sessions avec cookies
<?phpsession_start(); // démarrage de session
$_SESSION['Nom'] = "Didi"; // écriture dans la variable Nom la valeur Didiecho "<a href= page2.php > page 2 </a>";
Contenu de la page page1.php
<?phpsession_start(); // démarrage de session
// Lecture de la variable Nomif (isset($_SESSION['Nom']))
echo $_SESSION['Nom']; ?> Contenu de la page page2.php
Session sans cookie, on peut transmettre l'identifiant de session via l'URL :echo '<a href= page2.html?'.$ID.' > page 2 </a>';
Nom =Didi

Les sessionsExemple : autentification<form method="POST" action="index.php">
login : <input type="text" name="login"/><br/>motde passe : <input type="password" name="passwd"/><br/><input type="submit"/>
</form>FormulaireConnexion.php
<form method="POST" action="index.php">Bonjour <?php echo $login; ?>,<br/>Pourvous deconnecter, cliquez : <a href="index.php?deconnexion"> ici</a>
</form> FormulaireDeconnexion.php

Les sessionsExemple : autentification<?php
session_start();if ( isset($_POST['login']) && isset($_POST['passwd']))
&& verifierPassword($_POST['login'], $_POST['passwd'])$_SESSION['login']=$_POST['login'];
elseif(isset($_GET['deconnexion'])) $_SESSION['login']=null;
$login=null;
if(isset($_SESSION['login']))$login=$_SESSION['login'];
if($login===null)include("FormulaireConnexion.php");
elseinclude("FormulaireDeconnexion.php");
?>Index.html
Demo 2N'oublier pas de supprimer les variables de sessions

En résumé
Les fichiers : pour les données
simples
taille modeste
partagées entre tous les utilisateurs
Les cookies : fichier sur le poste client
Les sessions : fichier personelles sur le serveur

Rappel
FichiersSe souvenir de login de l'utilisateur

Accès à MySQL avec PHPAdministration d'une base de données MySQL
phpMyAdmin est un outil qui permet une administration aisée des bases de données MySQL
Son interface permet de :
Créer des bases de données
Créer des tables
Insérer/Modifier/Supprimer des enregistrements
Démo :
Lancer phpMyAdmin
Créer la base des données BDTP3 (filières + étudiants)
Clés étrangères
Insérer des enregistrements
Afficher ….

Accès à MySQL avec PHPmanipulation d'une BD MySQL
On peut, pour une table d'une base de données:
Insérer des données
Modifier des données
Supprimer des données
4 étapes sont nécessaires:
Connexion au serveur MySQL : mysql_connect
Choix de la base de données : mysql_select_db
Envoi de requêtes SQL au serveur (insertion, lecture, suppression ou mise à jour des données)
Récupération du résultat de la requête

Accès à MySQL avec PHPmanipulation d'une BD MySQL : connexionAvant d'interroger le serveur MySQL il faut ouvrir la connexion :
$idcon= mysql_connect( $host, $user, $pass [, $multi])
$host : le nom du serveur MySQL.
Pour notre cas : $host="localhost"
$user : le nom sous lequel l'utilisateur est autorisé à accéder au serveur. De la cas de Wampserver $user= "root"
$pass : le mot de passe associé à l'utilisateur $user. Dans le cas de Wampserver c'est une chaine vide
$multi : un booléen permettant ou non multiconnexion. S'il vaut TRUE, deux appels de mysql_connect() avec des paramètres identiques dans un même script créent deux connexions différentes
La fonction mysql_connect() retourne un lien de connexion vers la base de données sélectionnée

Accès à MySQL avec PHPmanipulation d'une BD MySQL : connexion
Fermeture de connexion : mysql_close($idcon)Ferme une connexion $idcon
Selection de la base de données :
mysql_select_db($nom_base [, $idcon])
$nom_base : nom de la base de données
$idcon : identifiant de la connexion
La fonction retourne TRUE si la base existe et FALSE dans le cas contraire

Accès à MySQL avec PHPmanipulation d'une BD MySQL
Exemple : Connexion, sélection de la base, fermeture de la connexion
On suppose que le serveur MySQL est installé sur la machine "localhost", le nom de la base de données est "BDTP3", le nom d'utilisateur est "root", et le mot de passe est vide
<?phpif( $idcon = mysql_connect("localhost","root","") )
{ if( $idbd = mysql_select_db("BDTP3") )
echo "Connexion avec succès"; else
echo "Echec de connexion à la base de données";mysql_close($idcon);}
else echo "Echec de connexion au serveur de base de données.";
?>

Accès à MySQL avec PHPmanipulation d'une BD MySQL : requêteEnvoi d'une requête :
// on possède un lien de connexion $idcon$rq = 'une_requete_sql';$resultat = mysqli_query($idcon, $req);if($resultat == FALSE) // échec si FALSE
echo "Echec de la requête";else {
// utilisation du résultat}
Envoie la requête $req à la base, et récupère un objet $resultat
Si la requête contient des commandes SELECT, cet identifiant permet d'accéder aux données fournies par la requête
Pour les autres requêtes (suppression, modification, mise à jour), la fonction retourne TRUE si la requête est bien exécutée FALSE sinon

Accès à MySQL avec PHPExemple TP : insertion & suppression
Exemple : on suppose l'existence des tables "filieres" et "etudiants" dans la base de données « BDTP3 » :
<?phpif( $idcon = mysql_connect("localhost","root","") ) {
if( $idDB = mysql_select_db("BDTP3") ) {
$requete="INSERT INTO filiere (nom, descriptif) VALUES ('GI','Genie Info....')"; if(mysql_query($requete,$idcon))
echo "Insertion avec succès <br>"; }
else echo("Echec de connexion à la base de données"); mysql_close($idcon);
} else echo ("Echec de connexion au serveur de base de données.");
?>
if(mysql_query("delete from BDTP3.filiere where nom='GI' ", $idcon)) echo "Suppression avec succès";
$requete="update etudiants set nom='Mouhamouha' where id=1"; if(mysql_query($requete, $idcon))
echo "Mise à jour avec succès";

Accès à MySQL avec PHPmanipulation d'une BD MySQL : requête (select)Le résultat d'une requête SELECT sur des tables, est un tableau
Sous PHP, il existe 3 fonctions pour récupérer les données issues d'une requête SELECT
array mysql_fetch_row($result) retourne un tableau indicé : Les indices sont les numéros des colonnes dans la table interrogée par ordre de sélection
array mysql_fetch_assoc($result) retourne un tableau uniquement associatif dont les clés sont les noms des colonnes de la table interrogée
array mysql_fetch_array($result [,int typetab]) Typetab: une constante entière précisant si le tableau retourné doit être associatif (valeur MYSQL_ASSOC), indicé (valeur MYSQL_NUM) ou les deux à la fois (valeur MYSQL_BOTH, qui est la valeur par défaut)
Chacune de ces fonctions ne récupérant qu'une ligne (tuple) du tableau à la fois
Il faut utiliser des boucles pour lire l'ensemble des données
Toutes ces fonctions retournent FALSE s'il n'y a aucune ligne à retourner

Accès à MySQL avec PHPmanipulation d'une BD MySQL : requête (select)
Exemple : mysql_fetch_row($result)
<?phpif( $idcon = mysql_connect("localhost","root","") ) { if( $idDB = mysql_select_db("BDTP3") ) {
$requete ="select *from etudiants";
if( $result = mysql_query($requete, $idcon)) { while($ligne = mysql_fetch_row($result)) {
echo "ID: $ligne[0], IDF : $ligne[1], Nom : $ligne[2], Prenom : $ligne[3] <br>"; } } } mysql_close($idcon);} ?>

Accès à MySQL avec PHPmanipulation d'une BD MySQL : requête (select)
Exemple : mysql_fetch_assoc($result)
<?phpif( $idcon = mysql_connect("localhost","root","") ) { if( $idDB = mysql_select_db("BDTP3") ) {
$requete ="select *from etudiants";
if( $result = mysql_query($requete, $idcon)) { while($ligne = mysql_fetch_assoc($result)) {
echo "ID: $ligne[id], IDF : $ligne[idf], Nom : $ligne[nom], Prenom : $ligne[prenom] <br>";
} } } mysql_close($idcon);} ?>

Accès à MySQL avec PHPmanipulation d'une BD MySQL : requête (select)
Exemple : mysql_fetch_array($result)
<?phpif( $idcon = mysql_connect("localhost","root","") ) { if( $idDB = mysql_select_db("BDTP3") ) {
$requete ="select *from etudiants";
if( $result = mysql_query($requete, $idcon)) { while($ligne = mysql_fetch_array($result)) {
echo "ID: $ligne[0], IDF : $ligne[idf], Nom : $ligne[nom], Prenom : $ligne[3] <br>";
} } } mysql_close($idcon);} ?>

Accès à MySQL avec PHPmanipulation d'une BD MySQL : requête (select)
Quelques fonctions supplémentaires très utiles:
mysql_num_fields ($result) : retourne le nombre de champs (attributs) d'une requête
mysql_num_rows($result) : retourne le nombre de lignes du résultats
Récupérer les noms de colonnes: très utile pour l'affichage des données sous format de tableaux HTML
Les noms de colonnes sont les clefs du tableau associatif résultant des fonctions:
$ligne = mysql_fetch_array($result, MYSQL_ASSOC);
$ligne = mysql_fetch_assoc($result);
mysql_field_name($result, int num_col) : retourne le nom de la colonne ou de l'alias dont le numéro est passé en second paramètre