Les instructions PHP pour l'accès à une base de données MySql Réfs : Chap 25 p 333 Attention, la lecture de ce chapitre est fondamental pour la réalisation technique des projets ! Mieux vaut bien suivre le présent cours.
Introduction Contrairement à Javascript, PHP est un langage disposant d'instructions lui permettant d'accéder à une base de données (comme le VBA).
Serveur d’applications Schéma de fonctionnement de PHP avec une base de donnée MySQL (Architecture Client-Serveur 3 tier) Serveur web Requête SQL SGBD Résultat : ----------------------- ----------------------- ----------------------- ----------------------- Requête : URL Résultat : code HTML Résultat : page HTML Navigateur Requête : script Résultat : données Base de données Exemple : consultation d’un catalogue de produits sur Internet Sur son ordinateur l’internaute demande à voir les promos de DVD. Le navigateur soumet une requête au serveur web sous la forme d’une URL (adresse saisie dans la barre d’adresse ou bien clic sur un lien contenant l’URL). Le serveur web doit renvoyer le liste des DVD en promo. Si l’URL désigne une page, le serveur web peut aussitôt l’envoyer au navigateur pour affichage. Si l’URL désigne un script, c’est-à-dire un programme à exécuter, le navigateur web le soumet à l’interpréteur de scripts. Le script doit retrouver la liste des derniers DVD en promo Il contient des instructions qui soumettent une requête SQL au SGBD Le SGBD extrait la liste des DVD en promo des tables de la base de données et retourne le résultat au script Le script compose l’affichage du résultat dans une page HTML qui est envoyée par le serveur web Le navigateur interprète le code de la page Web et affiche la liste des DVD La liste affichée contient elle-même des liens vers un script qui permet d’afficher des informations détaillées sur un des DVD en promo. Interpréteur de scripts Poste client Serveur d’applications Serveur de données
Explications 1. Le navigateur indique l'URL http://www.Script.php. Ce lien désigne le script PHP sur le serveur. 2. Le serveur HTTP (Apache par exemple) transmet le script à l'interpréteur PHP. 3. L'interpréteur PHP s'exécute et envoie une requête SQL au SGBD car le script contient des instructions d'accès à une base de données 4. Le SGBD exécute la requête reçue et transmet le résultat à l'interpréteur PHP. 5. L'interpréteur PHP reçoit le résultat de la requête et construit une page HTML. Cette page est retournée au serveur HTTP. 6. Le serveur HTTP transmet la page HTML construite précédemment au navigateur/client. Celui-ci reçoit donc du code HTML ; Il l'interprète et affiche le résultat.
La base de donnée support Nous travaillerons avec la base de données intitulée "empSce" qui se compose de deux tables : employe service
Contenu de la table employe
Contenu de la table service
Lien entre les deux tableaux Ces deux tableaux sont reliés par le code du service, ce qui traduit les règles de gestion suivantes : Un employé travaille dans un seul service Un service emploie un ou plusieurs employés
Installation de la base de données Installer la base sur le serveur Mysql chez un hébergeur à partir du script "empSce.sql"
Instructions PHP permettant l'affichage de données issues d'une base Exemple/Support : Ecrire le script PHP permettant d'afficher dans un navigateur la liste des employés de l'entreprise.
Instruction de connexion au serveur qui héberge la base de donnée <? $connexion = mysql_connect("localhost","nomUtil","password"); ?> Commentaires : $connexion est une variable booléenne qui prend la valeur "vrai" si la connexion au serveur est établie localhost est le nom (par défaut) du serveur qui héberge la base de donnée ; peut être remplacé par son adresse IP. nomUtil est le nom de l'utilisateur qui se connecte au serveur password est le mot de passe d'accès au serveur Remarque : Chez votre hébergeur, pour les projets à mettre en ligne, il faudra utiliser votre identifiant à la place de "nomUtil" et votre mot de passe personnel à la place de "password"
Instruction de connexion à la base de donnée <? $connexion = mysql_connect("localhost","nomUtil","password"); mysql_select_db("empSce",$connexion); ?> Commentaires : empSce est le nom de la base de donnée à laquelle on souhaite se connecter La connexion à la base est réalisée en utilisant la connexion au serveur établie précédemment, d’ou la présence de $connexion dans l’instruction. Remarque : Chez votre hébergeur, pour les projets, il faudra remplacer empSce par votre identifiant car c'est également le nom de votre base de donnée Mysql chez free (chez free, on ne peut avoir qu'une seule base)
Création de la requête qui permettra de créer le jeu d'enregistrement <? $connexion = mysql_connect("localhost","nomUtil","password"); mysql_select_db("empSce",$connexion); $requete="select * from employe" ?> Commentaire : La requête SQL est une chaine de caractère, stockée dans la variable $requete
Création du jeu d'enregistrement basé sur la requête <? $connexion = mysql_connect("localhost","nomUtil","password"); mysql_select_db("empSce",$connexion); $requete="select * from employe"; $resultat= mysql_query($requete,$connexion); ?> Commentaires : le jeu d'enregistrement $resultat est un tableau de n lignes et p colonnes Il a été créé par l'instruction mysql_query qui a exécuté la requête $requete créée précédemment Ce tableau $resultat va devoir être parcouru une ligne après l'autre pour afficher son contenu
$ligne=mysql_fetch_array($resultat); Instruction pour avancer d’une ligne dans le jeu d’enregistrement $resultat <? $connexion = mysql_connect("localhost","root","fragogsi"); mysql_select_db("empSce",$connexion); $requete="select * from employe;"; $resultat= mysql_query($requete,$connexion); $ligne=mysql_fetch_array($resultat); ?> Commentaires : Cette instruction, exécutée pour la première fois permet de se positionner sur la première ligne du tableau $resultat ; elle sera réutilisée par la suite pour avancer sur la ligne suivante. Le contenu de la ligne en cours est stocké dans un tableau à une seule ligne appelé $ligne dont on peut récupérer les valeurs ou les afficher. Pour lire l’ensemble du tableau, il faudra avancer d’une ligne à chaque fois : on utilisera donc une boucle.
Une boucle while pour lire toutes les lignes du tableau $resultat while($ligne) { echo($ligne[0]." ".$ligne[1]." ".$ligne[2]." ".$ligne[3]." ".$ligne[4]."<br />"); $ligne=mysql_fetch_array($resultat); } Commentaires : While ($ligne) est à traduire par « Tant que la ligne n’est pas vide» echo $ligne[0] permet d’afficher le contenu de la première case de la ligne $ligne=mysql_fetch_array($resultat) permet d’avancer à la ligne suivante
Variante… while($ligne){ echo($ligne["matricule"]." ".$ligne["nom"]." ".$ligne["prenom"]." ".$ligne["cadre"]." ".$ligne["service"]."<br />"); $ligne=mysql_fetch_array($resultat); } Commentaire : $ligne["prenom"] équivaut à $ligne[2]
Fermeture de la connexion Une fois les traitements achevées, la connexion à la base doit être fermée. mysql_close($connexion);
Exercice Améliorer le code précédent pour obtenir le résultat suivant : Indication : l'instruction mysql_num_rows($resultat) permet de compter le nombre de lignes du tableau $resultat
Utilisation d'un fichier de connexion Lorsqu'un site contient plusieurs pages nécessitant l'accès à une base de données, il est pratique d'utiliser un fichier de connexion appelé par exemple connexion.php Dans chaque page, on pourra alors faire appel à ce fichier en utilisant l'instruction : include("connexion.php");