PHP Fichiers Sessions Mysql

39
Programmation PHP CI1 GI Mohammed AL ACHHAB ENSA Tétouan 2013/2014 [email protected]

description

php

Transcript of PHP Fichiers Sessions Mysql

Page 1: PHP Fichiers Sessions Mysql

Programmation PHP

CI1 GI Mohammed AL ACHHABENSA Tétouan2013/2014 [email protected]

Page 2: PHP Fichiers Sessions Mysql

Rappel

FichiersSe souvenir de login de l'utilisateur

Page 3: PHP Fichiers Sessions Mysql

Plan

Introduction aux fichiers

Introduction aux :

sessions

coockies

Bases de données

PHP/MySQL

Page 4: PHP Fichiers Sessions 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

Page 5: PHP Fichiers Sessions Mysql

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");

?>

Page 6: PHP Fichiers Sessions Mysql

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

Page 7: PHP Fichiers Sessions Mysql

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

Page 8: PHP Fichiers Sessions Mysql

Les fichiers Exemple : Compteur de visites

compteur.php

DEMO ?

Visiteur 1Ecrire dans le fichier

Visiteur NEcrire dans le fichier

Visiteur 2Lire le fichier

Page 9: PHP Fichiers Sessions Mysql

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

Page 10: PHP Fichiers Sessions Mysql

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

Page 11: PHP Fichiers Sessions Mysql

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

?>

Page 12: PHP Fichiers Sessions Mysql

Cookies & sessions

FichiersSe souvenir de login de l'utilisateur

Page 13: PHP Fichiers Sessions Mysql

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

...

Page 14: PHP Fichiers Sessions Mysql

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

Page 15: PHP Fichiers Sessions Mysql

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");?>

Page 16: PHP Fichiers Sessions Mysql

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

Page 17: PHP Fichiers Sessions Mysql

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

Page 18: PHP Fichiers Sessions Mysql

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

Page 19: PHP Fichiers Sessions Mysql

Les cookiesExemple

Page 20: PHP Fichiers Sessions Mysql

Cookies & sessions

FichiersSe souvenir de login de l'utilisateur

Page 21: PHP Fichiers Sessions Mysql

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

Page 22: PHP Fichiers Sessions Mysql

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

Page 23: PHP Fichiers Sessions Mysql

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

Page 24: PHP Fichiers Sessions Mysql

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

Page 25: PHP Fichiers Sessions Mysql

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

Page 26: PHP Fichiers Sessions Mysql

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

Page 27: PHP Fichiers Sessions Mysql

Rappel

FichiersSe souvenir de login de l'utilisateur

Page 28: PHP Fichiers Sessions Mysql

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 ….

Page 29: PHP Fichiers Sessions Mysql

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

Page 30: PHP Fichiers Sessions Mysql

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

Page 31: PHP Fichiers Sessions Mysql

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

Page 32: PHP Fichiers Sessions Mysql

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.";

?>

Page 33: PHP Fichiers Sessions Mysql

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

Page 34: PHP Fichiers Sessions Mysql

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";

Page 35: PHP Fichiers Sessions Mysql

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

Page 36: PHP Fichiers Sessions Mysql

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);} ?>

Page 37: PHP Fichiers Sessions Mysql

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);} ?>

Page 38: PHP Fichiers Sessions Mysql

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);} ?>

Page 39: PHP Fichiers Sessions Mysql

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