Vous êtes sur la page 1sur 39

Programmation PHP

CI1 GI
ENSA Ttouan
2013/2014

Mohammed AL ACHHAB
alachhab@gmail.com

Rappel

Se souvenir de
login de l'utilisateur

Fichiers

Plan
Introduction aux chiers
Introduction aux :
sessions
coockies

Bases de donnes
PHP/MySQL

Les fichiers
introduction
Pourquoi ?
trs souvent utiliss en PHP
recueillir les informations en provenance des postes clients/BD
cas de donnes simples et de taille modeste
BD pour les donnes complexes et les traitements pointues

exemple d'utilisations :
le nombre des visiteurs
sondages
donnes temporelles (BD)

Manipulation de fichiers proche du langage C :


ouverture / cration, criture / lecture / modification, fermeture

Les fichiers
fopen()
Avant de raliser des oprations 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'accs : a, a+, r, r+, w, c, b,...


Valeur de retour : $id_file un pointeur sur le dbut du fichier
ouvert (c'est un flux)
<?php
$id_file = fopen("monfichier.txt","a");
?>

Les fichiers
lecture
fgets($id_file [, nombre_octets]) : rcupre 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 rfrenc par id_file
La lecture s'arrte si la fin du fichier est atteinte
Cette fonction est adapt des fichiers ou la longueur des donnes
extraire est fixe en avance et qu'ils sont enregistres par paquets

Monfic

ManipFile.php

Les fichiers : lecture


autres 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() : vrifier si la fin du fichier est atteinte
fgetc($id_file) : lit un caractre 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
DEMO ?

Visiteur N
Ecrire dans le fichier
Visiteur 1
Ecrire dans le fichier

compteur.php

Visiteur 2
Lire le fichier

Les fichiers
verouillage
Problme de concurrence :
Plusieurs clients demandent un fichier simultanment
deux scripts modient un chier en mme temps
Conit
Verrouiller un fichier pour ne pas autoriser tout accs / modification
/ ajout ce fichier
boolean flock($id_file, int N)
N : dfinit le mode de verrouillage du fichier :
=LOCK_SH (ou 1) : bloque l'criture dans le fichier mais laisse
le libre accs 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) : libre le verrou install prcdemment

Les fichiers
Exemple : Compteur de visites

flock($id_file, 1) // bloque l'criture dans le fichier


flock($id_file, 3) // libre le verrou

flock($id_file, 2) // bloque l'criture et la lecture du fichier


flock($id_file, 3) // libre le verrou

compteur.php

Inclusion de fichiers
Inclusion d'un autre chier PHP :
Regroupement de fonctions (lies 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

Se souvenir de
login de l'utilisateur

Fichiers

Cookies & sessions


Techniques qui permettent de conserver des informations
(chez le visiteur ou le serveur) pour amliorer le service
rendu par un site
Se souvenir du login du visiteur pour les sites avec
authentication
Se souvenir des rfrences indiquant quoi le visiteur s'intresse
Se souvenir des dernires pages visites par l'utilisateur
...

Les cookies
Un cookie est un petit chier 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 rcuprables 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 utilises pour authentification,
prfrences d'unsite, le contenu d'un panier d'achat,
En gnral, 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 appele avant d'crire sur la sortie standard
Par dfaut, 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 associe au cookie
time()+3600, //valable une heure(60*60)
"/chemin/",
/* le chemin d'accs aux dossiers qui contiennent les
scripts autoriss accder au cookie */
"www.domaine.com");
?>

Les cookies
Exemple
<?php
setcookie("Nom","OMAROMARO"); //cookie valable uniquement pour la session
// setcookie("nom") affecte la chane vide au cookie
setcookie("Prenom","FATAFIT",time()+(60*60*24)); //cookie valable 24 heures
?>

DEMO ?
menu Google Chrome Paramtres paramtres avancs "Confidentialit" Paramtres de
contenu

Attention : Les cookies ne sont pas immdiatement accessibles


par la page qui vient de les crer

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

<?
echo$_COOKIE["nom1"]."</br>";//affiche valeur1
echo$_COOKIE["nom2"]."</br>";//affiche valeur2
?>
Contenu de la page page2.php

Les cookies
Exemple : 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 => valeur1
key2 => valeur2
key3 => valeur3

Les cookies
Exemple

Cookies & sessions

Se souvenir de
login de l'utilisateur

Fichiers

Les sessions
Une session permet de stocker des informations de l'utilisateur sur
le serveur et de les rutiliser dans toutes les pages du site pour un
mme 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
manires diffrentes : 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 efface trs rapidement du
serveur
Le temps moyen est de 30 minutes par dfaut

Les sessions
Dmarrer une session :
Ouverture d'une session dans chaque page ayant accs aux
donnes l'aide de la fonction : session_start(("nom", "valeur");
Dans le cas de sessions avec cookie, il faut crire la fonction au
dbut du script
Dans le cas d'un dmarrage de nouvelle session, un fichier
(cookie) est cr sur le serveur pour cette session
Dans le cas ou le fichier existe dj (session dj dmarre), la
lecture des variables de sessions se fait via la variable superglobale
$_SESSION avec comme cls les noms des variables

Les sessions
Exemple : sessions avec cookies
<?php
session_start();

// dmarrage de session

$_SESSION['Nom'] ="Didi";
// criture dans la variable Nom la valeur Didi
echo "<a href= page2.php > page 2 </a>";

Contenu de la page page1.php

Nom =Didi

<?php
session_start(); // dmarrage de session
// Lecture de la variable Nom
if (isset($_SESSION['Nom']))
echo $_SESSION['Nom'];
?>

Contenu de la page page2.php

Session sans cookie, on peut transmettre l'identiant de session via l'URL :

echo '<a href= page2.html?'.$ID.' > page 2 </a>';

Les sessions
Exemple : 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"/>
FormulaireConnexion.php
</form>

<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 sessions
Exemple : 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");
else
include("FormulaireDeconnexion.php");

Index.html

N'oublier pas de supprimer les variables de sessions

Demo 2

En rsum
Les fichiers : pour les donnes
simples
taille modeste

partages entre tous les utilisateurs

Les cookies : fichier sur le poste client


Les sessions : fichier personelles sur le serveur

Rappel

Se souvenir de
login de l'utilisateur

Fichiers

Accs MySQL avec PHP


Administration d'une base de donnes MySQL
phpMyAdmin est un outil qui permet une administration aise
des bases de donnes MySQL
Son interface permet de :
Crer des bases de donnes
Crer des tables
Insrer/Modifier/Supprimer des enregistrements
Dmo :
Lancer phpMyAdmin
Crer la base des donnes BDTP3 (filires + tudiants)
Cls trangres
Insrer des enregistrements
Afficher .

Accs MySQL avec PHP


manipulation d'une BD MySQL
On peut, pour une table d'une base de donnes:
Insrer des donnes
Modifier des donnes
Supprimer des donnes

4 tapes sont ncessaires:


Connexion au serveur MySQL : mysql_connect
Choix de la base de donnes : mysql_select_db
Envoi de requtes SQL au serveur (insertion, lecture, suppression
ou mise jour des donnes)
Rcupration du rsultat de la requte

Accs MySQL avec PHP


manipulation d'une BD MySQL : connexion
Avant 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 accder 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 boolen permettant ou non multiconnexion. S'il vaut
TRUE, deux appels de mysql_connect() avec des paramtres
identiques dans un mme script crent deux connexions
diffrentes

La fonction mysql_connect() retourne un lien de connexion


vers la base de donnes slectionne

Accs MySQL avec PHP


manipulation d'une BD MySQL : connexion
Fermeture de connexion : mysql_close($idcon)
Ferme une connexion $idcon
Selection de la base de donnes :
mysql_select_db($nom_base [, $idcon])
$nom_base : nom de la base de donnes
$idcon : identifiant de la connexion
La fonction retourne TRUE si la base existe et FALSE dans le
cas contraire

Accs MySQL avec PHP


manipulation d'une BD MySQL
Exemple : Connexion, slection de la base, fermeture de la
connexion
<?php
if( $idcon = mysql_connect("localhost","root","") )
{
if( $idbd = mysql_select_db("BDTP3") )
echo "Connexion avec succs";
else
echo "Echec de connexion la base de donnes";
mysql_close($idcon);
}
else
echo "Echec de connexion au serveur de base de donnes.";
?>
On suppose que le serveur MySQL est install sur la machine "localhost",
le nom de la base de donnes est "BDTP3", le nom d'utilisateur est "root",
et le mot de passe est vide

Accs MySQL avec PHP


manipulation d'une BD MySQL : requte
Envoi d'une requte :
// on possde un lien de connexion $idcon
$rq = 'une_requete_sql';
$resultat = mysqli_query($idcon, $req);
if($resultat == FALSE) // chec si FALSE
echo "Echec de la requte";
else {
// utilisation du rsultat
}
Envoie la requte $req la base, et rcupre un objet $resultat
Si la requte contient des commandes SELECT, cet
identifiant permet d'accder aux donnes fournies par
la requte
Pour les autres requtes (suppression, modification,
mise jour), la fonction retourne TRUE si la requte
est bien excute FALSE sinon

Accs MySQL avec PHP


Exemple TP : insertion & suppression
Exemple : on suppose l'existence des tables "filieres" et
"etudiants" dans la base de donnes BDTP3 :
<?php
if( $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 succs <br>";
}
else echo("Echec de connexion la base de donnes");
mysql_close($idcon);
}
else echo ("Echec de connexion au serveur de base de donnes.");
?>

if(mysql_query("delete from BDTP3.filiere where nom='GI' ", $idcon))


echo "Suppression avec succs";
$requete="update etudiants set nom='Mouhamouha' where id=1";
if(mysql_query($requete, $idcon))
echo "Mise jour avec succs";

Accs MySQL avec PHP


manipulation d'une BD MySQL : requte (select)
Le rsultat d'une requte SELECT sur des tables, est un tableau
Sous PHP, il existe 3 fonctions pour rcuprer les donnes issues d'une
requte SELECT
array mysql_fetch_row($result) retourne un tableau indic : Les indices sont
les numros des colonnes dans la table interroge par ordre de slection
array mysql_fetch_assoc($result) retourne un tableau uniquement associatif
dont les cls sont les noms des colonnes de la table interroge
array mysql_fetch_array($result [,int typetab]) Typetab: une constante
entire prcisant 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 dfaut)

Chacune de ces fonctions ne rcuprant qu'une ligne (tuple) du tableau


la fois
Il faut utiliser des boucles pour lire l'ensemble des donnes
Toutes ces fonctions retournent FALSE s'il n'y a aucune ligne retourner

Accs MySQL avec PHP


manipulation d'une BD MySQL : requte (select)
Exemple : mysql_fetch_row($result)
<?php
if( $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);
}
?>

Accs MySQL avec PHP


manipulation d'une BD MySQL : requte (select)
Exemple : mysql_fetch_assoc($result)
<?php
if( $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);
}
?>

Accs MySQL avec PHP


manipulation d'une BD MySQL : requte (select)
Exemple : mysql_fetch_array($result)
<?php
if( $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);
}
?>

Accs MySQL avec PHP


manipulation d'une BD MySQL : requte (select)
Quelques fonctions supplmentaires trs utiles:
mysql_num_fields($result) : retourne le nombre de champs
(attributs) d'une requte
mysql_num_rows($result) : retourne le nombre de lignes du
rsultats

Rcuprer les noms de colonnes: trs utile pour l'affichage des


donnes sous format de tableaux HTML
Les noms de colonnes sont les clefs du tableau associatif
rsultant 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 numro est pass en second
paramtre

Vous aimerez peut-être aussi