Sie sind auf Seite 1von 9

Polytech'Marseille, Informatique 4me anne

Bases de donnes

T.P.
Interaction PHP - Bases de donnes
Introduction avec MySQL

Le but du TP est d'tudier, sur un exemple, comment PHP peut s'interfacer une base de donnes.
PHP peut s'interfacer la quasi-totalit des systmes de gestion de base de donnes (SGBD) du
march. Cela signifie qu'il est possible, dans un script PHP, de se connecter une base de donnes,
et d'en extraire les renseignements dont nous avons besoin, en passant par des requtes SQL du type
"SELECT * FROM maTable".
Dans le cadre de ce TP, nous utiliserons une base de donnes MySQL. Le couple MySQL/PHP est
trs rpandu. Il fait mme partie des quatuors LAMP (Linux Apache MySQL PHP) et WAMP
(Windows Apache MySQL PHP). En cas de problmes lis la base, consulter le site officiel de
MySQL.
Documents votre disposition :
- Support de cours de Vincent Mazenod :
http://nicolas.durand.perso.luminy.univmed.fr/pub/bd/tpphp/PHP_MySQL_Mazenod.pdf
- Tutoriel d'Hugo Etivant :
http://nicolas.durand.perso.luminy.univmed.fr/pub/bd/tpphp/PHP4_MySQL.pdf
- Aide mmoire PHP de Michel Meynard :
http://nicolas.durand.perso.luminy.univmed.fr/pub/bd/tpphp/aide_memoire_php.pdf
- Petit Mmo HTML : http://lwest.free.fr/doc/html/memo/
- Mysql : http://www.mysql.com
- Et bien sr, http://fr.php.net

1) MySQL et PHPMyAdmin
Nous allons utiliser le serveur MySQL de l'cole. Si vous ne l'avez pas dj fait, vous devez
demander la cration d'un compte de base de donnes MySQL sur le site :
http://dosicalutils.luminy.univmed.fr/db-perso
L'accs et la gestion de votre base de donnes peut se faire via PHPMyAdmin. Pour y accder
l'cole, tapez dans un navigateur Web : https://phpmyadmin.luminy.univ-amu.fr
Cet outil, dvelopp en PHP, offre une interface intuitive pour ladministration des bases de donnes
MySQL. PHPMyAdmin permet de :
- crer de nouvelles bases,
- crer/modifier/supprimer des tables,
- afficher/ajouter/modifier/supprimer des tuples dans des tables,
- effectuer des sauvegardes de la structure et/ou des donnes,
- effectuer nimporte quelle requte,
- grer les privilges des utilisateurs.
Remarque : pour votre ordinateur personnel, vous pouvez utiliser EasyPHP contenant MySQL, PHP
et PHPMyAdmin), ou bien WAMP.

Polytech'Marseille, Informatique 4me anne


Bases de donnes

2) Rudiments de PHP
PHP est un des langages de script les plus actifs sur le Web. Il permet de crer principalement des
pages HTML mais aussi d'autres types de contenu comme des images, des animations Flash, des
documents PDF, . PHP peut tre utilis soit comme un langage de script rpondant des besoins
simples et court terme (c'est ce qui l'a fait connatre), soit comme un langage de programmation
complexe permettant de mettre en place des applications d'entreprise (programmation oriente objet,
design patterns etc.).
Le HTML statique est abandonn depuis longtemps. Aujourd'hui, le dynamisme a pris son envol.
Rares sont les personnes qui codent encore leurs sites Web directement en HTML, ils utilisent plutt
des scripts qui gnrent des pages HTML selon les informations qui sont par exemple dans des bases
de donnes. PHP permet d'utiliser une base de donnes pour construire un document HTML, qui
n'est donc pas ncessairement identique chaque consultation, sans que le webmestre n'ait eu
intervenir manuellement. Un dveloppeur a le choix du langage : ASP, JSP, PHP, . Nous allons
nous attacher ici exclusivement PHP.
PHP est un langage de script, c'est--dire que le code est enregistr sous forme d'un fichier texte sur
le disque dur d'un serveur Web. Lorsqu'un internaute (par l'intermdiaire de son navigateur Web, le
client) demande l'excution d'un script en consultant une page Web, la demande est reue par le
serveur Web (par exemple Apache) qui se rend compte qu'il doit la sous-traiter PHP. Le script est
alors excut et une page HTML est gnre. Cette dernire est envoye au client.

PHP est trs proche du C. Vous ne devriez donc pas avoir de mal effectuer les exercices qui vont
vous initier au PHP.

Les scripts PHP crs devront tre placs dans un dossier "bdtpphp" (ou un autre nom de votre
choix) dans votre "public_html". Faire attention ce que les scripts aient les droits de lecture. Ces
scripts pourront ainsi tre appels via un navigateur Web (Mozilla Firefox de prfrence).
Par exemple : http://votreprenom.votreno.perso.luminy.univmed.fr//bdtpphp/monscript.php

Exercice 1 : premiers scripts


1. Ecrivez un script PHP ("exo1_1.php") qui affiche "Bonjour !".
Aide : le code PHP est directement insrer dans le fichier HTML grce au conteneur de la norme
XML : <?php ?>. Pour l'affichage, il est possible d'utiliser la fonction "echo" ou bien "printf"
(comme en C).
Nous avons donc :
2

Polytech'Marseille, Informatique 4me anne


Bases de donnes

<html>
<body>
<?php
echo 'Bonjour<br>'; /* Les scripts PHP se commentent comme en C/JAVA */
// Vous devez gnrer du HTML, le saut de ligne est donc <br>
?>
</body>
</html>

Remarque importante concernant les chaines de caractres : si vous utilisez des doubles quotes (")
alors la chaine sera value. Les ventuels variables et caractres spciaux seront pris en compte et
remplacs. Ce n'est pas le cas si vous utilisez de simples quotes ('). Si la chaine doit tre utilise telle
qu'elle est, alors utilisez des simples quotes, car l'utilisation de doubles quotes est coteuse en
performance.
La concatnation de chaines de caractres se fait grce au ".".
2. Ecrivez un script ("exo1_2.php") qui affiche la version utilise de PHP.
Aide : utilisez une des constantes du PHP (diapo 64 du tutoriel d'Hugo Etivant).

Exercice 2 : calcul
Ecrivez un script qui affecte respectivement les valeurs 0.206, 150 et 10 aux variables TVA, Prix et
Quantit. Calculez le prix HT et le prix TTC pour les 10 articles et les afficher.
Affichez galement le type de chaque variable.
Aide :
<html>
<head>
<title>Calcul</title>
</head>
<body>
<?php
$tva = 0.206;
$prix = 150;
$quantite = 10;
$prix_ht =
$prix_ttc =
echo 'Prix unitaire = '.$prix.'<br>Quantit = '.$quantite.'<br>';
echo 'TVA = '.$tva.'<br>';
echo
?>
</body>
</html>

Pour connatre le type d'une variable, reportez vous la diapo 15.

Exercice 3 : fonction
Initialisez un tableau de 4 entres (contenant les valeurs 3, 2, 10, 5) et en faire la somme :
1. Sans faire de fonction
2. En crant une fonction somme
3. En crant un fichier spcifique qui contient la fonction somme
Pour cela, crer 4 fichiers :

Polytech'Marseille, Informatique 4me anne


Bases de donnes

- exo3_1.php
- exo3_2.php
- exo3_3.php
- exo3_fonctions.php
Indications : pour les tableaux, voir diapos 30 et 31. Pour les fonctions, voir diapo 38.
Les structures conditionnelles ont la mme syntaxe quen C. De mme pour les structures de boucle.
Il est possible d'inclure dans un script le contenu dun autre en utilisant "require" ou "include"
(diapo 61).
Voici le code du script "ex3-1.php" :
<html>
<head>
<title>Calcul</title>
</head>
<body>
<?php
$tab = array(3,2,10,5);
$total = 0;
foreach($tab as $elem)
{
$total += $elem;
}
echo "Somme des valeurs du tableau : $total";
?>
</body>
</html>

Exercice 4 : passage de paramtres un script directement par URL


Vous allez crire un script qui affiche "Bonjour X !" o X sera votre prnom. X sera indiqu dans
l'URL en tant que paramtre du script.
Exemple : url "http:// /ex4.php?prenom=Nicolas"
Rsultat dans le navigateur : "Bonjour Nicolas !"
Indications : Il existe deux mthodes pour passer des paramtres une page web via le protocole
HTTP:
- La mthode GET
Les variables et leurs valeurs transitent en clair dans lURL. Elles sont visibles dans la barre
dadresse du navigateur.
La taille des variables est limite.
Utilisable avec une balise <a href= " "> et une url de type :
http://monsite.com/login.php?user=vmazenod&pass=bidon
Utilisable avec un formulaire HTML (mthode par dfaut) en spcifiant method="GET".
- La mthode POST
Les variables et leurs valeurs sont stockes dans len-tte de la requte HTTP. Ceci est
invisible au niveau du navigateur.
Taille illimite.
Utilisable uniquement avec un formulaire en spcifiant method="POST".
Pour rcuprer ces paramtres dans le script PHP, il faut utiliser les tableaux associatifs mis
disposition par PHP : $_POST['nomparamtre'] et $_GET['nomparamtre'].

Polytech'Marseille, Informatique 4me anne


Bases de donnes

Voici une solution pour cet exercice :


<html>
<head>
<title>Bonjour</title>
</head>
<body>
<?php
$prenom=isset($_GET['prenom']) ? $_GET['prenom'] : "";
// prenom est-il affect ?
if ($prenom=="") {
$string=" tous";
}
else {
$string=$_GET['prenom'];
}
echo 'Bonjour '.$string;
?>
</body>
</html>

Exercice 5 : session et passage d'information de pages en pages


1. Ecrivez un script "session.php" qui dmarre une session et affiche le numro de cette session.
Indications : pour les sessions, reportez vous aux dispos 78, 79 et 80.
Une session dans le contexte de PHP est une collection de variables qui doivent se transmettre de
page en page. Une session en PHP correspond un identifiant de session (qui est unique) et une
collection de variables associes cet identifiant de session. PHP fait passer lidentifiant de session
dune page lautre pour retrouver la collection de variables associes. Les variables sont
accessibles depuis le tableau associatif $_SESSION["nomvariable"].
Remarque importante : une session fait partie de len-tte HTTP. Elle doit donc tre appele avant
tout affichage de texte.
2. Vous allez complter le script en permettant l'utilisateur d'enregistrer plusieurs variables dans la
session (le nom de la variable ainsi que sa valeur seront saisies dans un formulaire).
Affichez aussi les variables (et les valeurs) de la session courante.
Une solution :
Le formulaire
<html>
<body>
<br>Ajout de variable de session<br>
<FORM action="ajout.php" method="POST">
<TABLE>
<TR>
<TD>Nom</TD><TD><INPUT type="text" name="nom"></TD>
</TR>
<TR>
<TD>Valeur</TD><TD><INPUT type="text" name="val"></TD>
</TR>
</TABLE>
<INPUT type="submit" value="Ok">
</body>
</html>

Polytech'Marseille, Informatique 4me anne


Bases de donnes

Ajout.php
<?php
session_start();
$nom=$_POST['nom'];
$val=$_POST['val'];
$_SESSION[$nom]=$val;
echo 'Actuellement les variables de la session sont :<br>';
foreach($_SESSION as $nom => $val)
echo "$nom = $val<br>";
?>

Pour les tableaux associatifs, voir diapos 34 et 35.

3) Bases des interactions PHP-MySQL


La premire chose faire lorsque vous souhaitez accder en PHP une base de donnes est de vous
connecter un serveur de base donnes qui hberge cette base, puis de vous connecter la base
proprement dite.
La connexion au serveur MySQL se fait via la fonction mysql_connect(), qui vous permet de
prciser l'adresse du serveur, ainsi que le nom sous lequel vous vous connectez (login) et le mot de
passe. Une fois connect un serveur de base de donnes, il est ncessaire d'ouvrir une base
proprement dite. Pour ceci, utilisez la fonction my_sql_select_db() en prcisant le nom de la
base en question.
Vous avez maintenant accs la base de donnes slectionnes, avec les droits correspondant
l'identit sous laquelle vous vous tes connects au serveur. Cela signifie que vous ne pourrez pas
forcment effectuer toutes les oprations que vous souhaitez sur la base.
Rsum des fonctions de connexion/dconnexion :
- mysql_connect($server,$user,$password) : permet de se connecter au serveur
$server en tant quutilisateur $user avec le mot de passe $password, retourne
lidentifiant de connexion (not ici $id) si succs, FALSE sinon.
- mysql_select_db($base[,$id]) : permet de choisir la base $base, retourne TRUE en
cas de succs, sinon FALSE.
- mysql_close([$id]) : permet de fermer la connexion.
- mysql_pconnect : idem que mysql_connect sauf que la connexion est persistante, il ny
a donc pas besoin de rouvrir la connexion chaque script qui travaille sur la mme base.
Les identifiants de connexion ne sont pas ncessaires si on ne se connecte qu une seule base la
fois, ils permettent seulement de lever toute ambigut en cas de connexions multiples.

Exemple :

Polytech'Marseille, Informatique 4me anne


Bases de donnes

// la fonction "die" permet d'arrter le script et d'afficher un message.


if($id = mysql_connect('localhost','login','passwd')) {
if($id_db = mysql_select_db('mabase')) {
echo 'Succs de connexion.';
/* code du script ... */
} else {
die('Echec de connexion la base.');
}
mysql_close($id);
} else {
die('Echec de connexion au serveur de base de donnes.');
}

Pour envoyer une requte une base de donne, on utilise la fonction : mysql_query($str) qui
prend en paramtre une chane de caractres (ici, $str) contenant la requte SQL et qui retourne un
identificateur de rsultat ou FALSE si chec.
Pour effectuer une requte sur la base de donnes, on procde gnralement comme suit:
// construction d'une requte SQL permettant de rcuprer le numro
// de tlphone d'un client
$query = "SELECT telephone FROM client WHERE nom=\'$nom\'";
// excution de la requte SQL
$result = mysql_query($query);

Attention, ici, les requtes ne se terminent pas par un point virgule ";" et n'autorisent pas les
SELECT imbriqus.
Lidentificateur de rsultat $result permet dautres fonctions d'extraire ligne par ligne les
donnes retournes par le serveur.
Sous ORACLE, l'affichage des rsultats dune requte se fait ligne par ligne, sous MySQL, cest
identique. Une boucle permettra de recueillir chacune des lignes partir de lidentifiant de rsultat.
Une ligne contient (sauf cas particulier) plusieurs valeurs correspondant aux diffrents attributs
retourns par la requte. Ainsi, une ligne de rsultat pourra tre sous la forme dun tableau, dun
tableau associatif, ou dun objet.
mysql_fetch_row($result) : retourne une ligne de rsultat sous la forme d'un tableau. Les

lments du tableau tant les valeurs des attributs de la ligne. Retourne FALSE s'il n'y a plus aucune
ligne.
Exemple :
$requet = "SELECT * FROM users";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_row($result)) {
$id = $ligne[0];
$name = $ligne[1];
$address = $ligne[2];
echo "$id - $name, $address <br>";
}
} else { echo 'Erreur de requte de base de donnes.'; }

Ici, on accde aux valeurs de la ligne par leur indice dans le tableau.

Polytech'Marseille, Informatique 4me anne


Bases de donnes

mysql_fetch_array($result) : retourne un tableau associatif. Les cls tant les noms des

attributs et leurs valeurs associes leurs valeurs respectives. Retourne FALSE s'il n'y a plus aucune
ligne.
Exemple :
$requet = "SELECT * FROM users";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_array($result)) {
$id = $ligne["id"];
$name = $ligne["name"];
$address = $ligne["address"];
echo "$id - $name, $address <br>";
}
} else { echo 'Erreur de requte de base de donnes.'; }

Ici, on accde aux valeurs de la ligne par lattribut dans le tableau associatif.
mysql_fetch_object($result) : retourne un objet. Les attributs de l'objet correspondent

ceux de la ligne de rsultat. Et les valeurs des attributs de l'objet correspondent ceux de la ligne de
rsultat. Retourne FALSE s'il n'y a plus aucune ligne.
Exemple :
$requet = "SELECT * FROM users";
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_object($result)) {
$id = $ligne->id;
$name = $ligne->name;
$address = $ligne->address;
echo "$id - $name, $address <br>";
}
} else { echo 'Erreur de requte de base de donnes.'; }

Ici, on accde aux valeurs par leur attribut dans lobjet.


Quelques fonctions supplmentaires trs utiles :
- mysql_free_result($result) : efface de la mmoire du serveur les lignes de rsultat de
la requte identifies par $requet. Trs utile pour amliorer les performances du serveur.
- mysql_insert_id([$id]) : retourne l'identifiant d'un attribut cl primaire
AUTO_INCREMENT de la dernire insertion.
- mysql_num_fields($result) : retourne le nombre d'attributs du rsultat.
- mysql_num_rows($result) : retourne le nombre de lignes du rsultat. Cela permet ainsi
de remplacer le while par un for.
Remarque gnrale : pensez bien tester la valeur de retour des fonctions (mysql_query et les
autres).

4) Exercices PHP-MySQL
Nous allons maintenant procder quelques manipulations simples de bases de donnes. Dans de
nombreuses applications, il apparat rapidement qu'il est ncessaire de pouvoir identifier l'utilisateur.
Pour cela, il est ncessaire de stocker des informations utilisateurs comme son login et son mot de
passe. Attention, en France, la Commission Nationale Informatique et Libert (CNIL) interdit de
stocker des donnes nominatives relatives des utilisateurs. Pour les tests de ce TP, les informations
entres dans votre base de donnes devront tre "bidons".

Polytech'Marseille, Informatique 4me anne


Bases de donnes

Exercice 6 : cration
En utilisant l'interface PHPMyAdmin, crez dans votre base de donnes, une table "Personne". Cette
dernire doit contenir les champs nom, prnom, login (qui pourra correspondre une adresse email),
mot de passe, ville, ainsi qu'un numro d'identifiant auto-incrment (id_personne) servant de cl
primaire.
Personne(id_personne, nom, prenom, login, mot_de_passe, ville)

Remplissez, toujours l'aide de l'interface PHPMyAdmin, la table avec au moins 3 lignes.


Exercice 7 : consultation
Ecrivez un script PHP qui affiche le contenu de la table "Personne" dans un tableau 6 colonnes.
Pour cela, une fois la requte effectue, vous aurez besoin de parcourir ligne ligne le rsultat.
Exercice 8 : identification des utilisateurs
Indication : consultez le support de cours de V. Mazenod, pages 22 et 23).
1. Ecrivez un formulaire HTML ("login.html") qui demande l'utilisateur son login et son mot de
passe.
2. Ecrivez ensuite le script PHP qui traite le formulaire de login ("traitelogin.php") : vrification de
l'existence du login puis vrification du mot de passe. Si l'utilisateur est reconnu, affichez un
rcapitulatif de ses donnes. Sinon, renvoyez-le la page de login en lui indiquant qu'il s'est mal
identifi.
3. Effectuez les modifications ncessaires pour qu'une fois l'utilisateur identifi, une session soit
cre (son numro sera affich lors du rcapitulatif de ses donnes).
4. Ajoutez un lien permettant l'utilisateur de se dconnecter. Ce lien lancera "logout.php" ( crire).
Aide : pour les redirections, utiliser Javascript :
echo "<SCRIPT LANGUAGE=\"JavaScript\">document.location.href=\"./login.html\"</SCRIPT>";

Exercice 9 : mots de passe


Pour introduire un peu de scurit, le mot de passe ne sera pas stock en clair dans la base de
donnes. Vous allez utiliser SHA pour "hacher" le mot de passe et ainsi stocker le condensat.
Modifiez alors la procdure d''identification (attention, il faut comparer les condensats !).
Indication : voir diapos 115, 116 et 117.
Pour vos tests, modifiez le(s) mot(s) de passe d'un(de vos) utilisateur(s) en utilisant un "SHA Hash
Generator" que vous pouvez trouver sur le Web.
Exercice 10 (facultatif) : formulaire d'inscription
1. Crez un formulaire HTML permettant l'utilisateur de saisir toutes les informations relatives la
table "Personne".
2. Ecrivez un script "inscription.php" qui sera appel par le formulaire, et qui effectuera le traitement
des donnes soumises. Plusieurs cas doivent tre traits par le script : si le "nom", le "login" ou le
"mot_de_passe" n'a pas t saisi, un message d'erreur doit tre affich, ainsi qu'un lien pointant vers
le formulaire. Dans le cas contraire, un rcapitulatif des donnes saisies doit tre affich
l'utilisateur. Pensez demander de saisir 2 fois le mot de passe pour parer une ventuelle faute de
frappe.
3. Modifiez le script "inscription.php", de manire automatiquement rediriger l'utilisateur vers le
formulaire si les champs obligatoires n'ont pas t saisis.
Exercice 11 (facultatif) : classe pour l'accs une base de donnes
Dfinissez une classe PHP5 (fichier "db.php") permettant la gestion de la connexion, l'envoi de
requtes, et la dconnexion une base de donnes. Testez et validez en reprenant l'exercice 8.

Das könnte Ihnen auch gefallen