Beruflich Dokumente
Kultur Dokumente
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.
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
<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>
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 :
- 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>
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>";
?>
Exemple :
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.
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.'; }
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".
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)