Vous êtes sur la page 1sur 11

Utiliser PHP avec Access

Table des matires Utiliser PHP avec Access o Cration de la base de donnes o Insrer des donnes dans votre base o Modification des donnes dans votre base o Conclusion Par Qwix, le 13 aot 2005 Dans ce tutorial nous avions vu comment utiliser PHP avec MYSQL. Il est cependant possible d'utiliser PHP avec un base de donnes Access. Le travail avec Access est sensiblement le mme qu'avec MYSQL, en gros, seuls les noms des fonctions changent. Nous allons voir comment insrer, modifier et supprimer des donnes dans une base Access.

Cration de la base de donnes


Pour ce tutorial, nous allons utiliser la mme base de donnes que celle utilise dans ce tutorial Voici le SQL de cette base, je pars du principe que vous savez crer une base de donnes et des tables dans Access, si ce n'est pas le cas, vous pouvez regarder dans l'aide du logiciel, c'est bien expliqu 1. Crez une base de donnes appeles base_personnes 2. Crez une table appele 'personnes' qui contiendra les champs suivants: id_personne: type numro auto, clef primaire de la table. nom: type texte prenom: type texte adresse: type texte cp: type texte telephone: type texte Cration du DSN dans Access Pour ceux qui ne connaissent pas ou peu Access pour pouvoir l'utiliser comme SGBD avec un autre langage, il vous faut crer ce qu'on apelle un DSN, voici la marche suivre. Menu Dmarrer Paramtres Panneau de configuration Outils d'administration Source de donnes(ODBC) Source de donnes systme Ajouter Microsoft Access Driver slectionnez votre base de donnes, nommez la et validez, c'est termin. Retenez bien le nom que vous avez donn votre DSN car il vous sera utile plus tard. Dans mon cas je l'ai appel DSN_personnes.

Insrer des donnes dans votre base


Nous allons crer une page insertion1.php qui va nous permettre de saisir les donnes insrer dans la base.
<html>

<head> <title>insertion de donnes en PHP dans Access :: partie 1</title> </head> <body> <form name="insertion" action="insertion2.php" method="POST"> <table border="0" align="center" cellspacing="2" cellpadding="2"> <tr align="center"> <td>nom</td> <td><input type="text" name="nom"></td> </tr> <tr align="center"> <td>prenom</td> <td><input type="text" name="prenom"></td> </tr> <tr align="center"> <td>adresse</td> <td><input type="text" name="adresse"></td> </tr> <tr align="center"> <td>code postal</td> <td><input type="text" name="codePostal"></td> </tr> <tr align="center"> <td>num&eacute;ro de t&eacute;l&eacute;phone</td> <td><input type="text" name="telephone"></td> </tr> <tr align="center"> <td colspan="2"><input type="submit" value="insrer"></td> </tr> </table> </form> </body> </html>

Notez bien la mthode utilise par notre formulaire, ici c'est une mthode POST ce qui permet de ne pas afficher les variables dans URL, comme le ferait la mthode GET. IL faut toujours utiliser la mthode POST cela vite de laisser certains trous de scurit. Pour bien voir la diffrence entre les deux mthodes, changez POST en GET dans ce formulaire, et regardez bien votre URL Voyons maintenant la page insertion2.php:
<?php //insertion.php //connection au serveur $cnx = odbc_connect( "DSN_personnes", "root", "" ) or die ("Impossible de se connecter la bas de donne") ; //rcupration des valeurs des champs: //nom: $nom = $_POST["nom"] ; //prenom: $prenom = $_POST["prenom"] ; //adresse: $adresse = $_POST["adresse"] ; //code postal: $cp = $_POST["codePostal"] ; //numro de tlphone:

$tel

= $_POST["telephone"] ;

//cration de la requte SQL: $sql = "INSERT INTO personnes (nom, prenom, adresse, cp, telephone) VALUES ( '$nom', '$prenom', '$adresse', '$cp', '$tel') " ; //affichage de la requte SQL pour mieux comprendre ;) : echo( "<center>".$sql."<br>" ) ; //excution de la requte SQL: $requete = odbc_do($cnx, $sql) or die( odbc_error() ) ; //affichage des rsultats, pour savoir si l'insertion a marche: if($requete) echo("<center>L'insertion a t correctement effectue</center>") ; else echo("<center>L'insertion choue</center>") ; ?>

Modification des donnes dans votre base


Pour modifier les donnes il faut tout d'abord pouvoir les rcuprer, voici comment faire: modification1.php
<html> <head> <title>modification de donnes en PHP :: partie 1</title> </head> <body> <?php //connection au serveur: $cnx = odbc_connect( "DSN_personnes", "root", "" ) or die ("Impossible de se connecter la bas de donne") ; //requte SQL: $sql = "SELECT * FROM personnes ORDER BY nom" ; //excution de la requte: $requete = odbc_do($cnx, $sql) ; //affichage des donnes: while( $result = odbc_fetch_object( $requete ) ) { echo("<div align=\"center\">".$result->nom." ".$result->prenom." <a href=\"modification2.php?idPersonne=".$result>id_personne."\">modifier</a><br>\n") ; } ?> </body> </html>

Et la modification proprement dite: modification3.php


<?php //modification3.php //connection au serveur $cnx = odbc_connect( "DSN_personnes", "root", "" ) or die ("Impossible de se connecter la bas de donne") ;

//rcupration des valeurs des champs: //nom: $nom = $_POST["nom"] ; //prenom: $prenom = $_POST["prenom"] ; //adresse: $adresse = $_POST["adresse"] ; //code postal: $cp = $_POST["codePostal"] ; //numro de tlphone: $tel = $_POST["telephone"] ; //rcupration de l'identifiant de la personne: $id = $_POST["id"] ; //cration de la requte SQL: $sql = "UPDATE personnes SET nom = '$nom', prenom = '$prenom', adresse = '$adresse', cp = '$cp', telephone = '$tel' WHERE id_personne = $id " ; //excution de la requte SQL: $requete = odbc_do($cnx, $sql) or die( odbc_error() ) ; //affichage des rsultats, pour savoir si l'insertion a marche: if($requete) echo("La modification t correctement effectue") ; else echo("La modification choue") ; ?>

Suppression des donnes dans votre base Comme pour la modification il faut d'abord rcuprer les donnes avant de savoir lesquelles supprimer La rcupration de donnes est la mme que pour la page de modification1.php je passe donc directement suppression2.php. suppression2.php
<?php //suppression2.php: //connection au serveur: $cnx = odbc_connect( "DSN_personnes", "root", "" ) or die ("Impossible de se connecter la bas de donne") ; //rcupration de la variable d'URL, //qui va nous permettre de savoir quel enregistrementsupprimer: $id = $_GET["idPersonne"] ; //requte SQL: $sql = "DELETE FROM personnes WHERE id_personne = ".$id ; //excution de la requte: $requete = odbc_do($cnx, $sql) ; //affichage des rsultats, pour savoir si la suppression a marche:

?>

if($requete) echo("La suppression t correctement effectue") ; else echo("La suppression choue") ;

Conclusion
Comme vous avez pu le constater, le travail sur Access n'est pas radicalement diffrent de celui sur MYSQL, il suffit de changer le nom des fonctions Vous trouverez ci-joint une archive contenant, les scripts, et la base de donnes Access, il ne vous reste plus qu' crer le DSN Pour amliorer la saisie et la conformit de vos donnes, vous pouvez utiliser les fonctions suivantes:

addslashes stripslashes trim

Javais publi ce tutorial en 2002 sur le site Webfr qui nexiste plus. Comme il est toujours dactualit et que la documentation ce sujet nest pas norme sur le net, je le remets disposition ici. Cet article explique comment mettre en place et comment utiliser partir de PHP une connexion vers la base de donnes MS Access. Certes cette configuration nest pas courante, mais cest parfois la solution la plus simple pour utiliser des donnes existantes en entreprise o Access est encore assez rpandu pour les applications de gestion.

Crez une base sous Access. Dans ce tutorial nous prendrons la base base.mdb

Ouvrez le gestionnaire de pilotes odbc. Vous le trouverez dans paramtres/panneaux de configuration pour Windows 98 et dans panneaux de configuration/outils dadministration/sources de donnes pour windows 2000 et NT

Slectionnez longlet Sources de donnes systme. Cliquez sur Ajouter .

Puis cliquez sur Terminer .

Dans la fentre qui saffiche, slectionnez Driver Microsoft Access (*.mdb )

Dans la nouvelle fentre qui saffiche, slectionnez la base cre prcdemment laide du bouton slectionner .

Le champs Nom de la source de donnes est celui qui sera utilis dans les scripts php faisant appel cette base. Cliquez sur OK, et votre ordinateur est prt.

Comment lutiliser ?

Dans larticle suivant traitant de lutilisation dune base de donnes Access dans PHP, nous allons tudier un exemple concret. Vous aurez besoin de vous familiariser avec les fonction ODBC unifies de PHP, qui sont documentes dans la documentation officielle. Attention certaines fonctions ne marchent pas avec Access. Par exemple, cest le cas de la fonction odbc_num_rows(). Il est donc impossible de compter les lignes rsultats directement. Si vous devez le faire vous devez faire deux requtes spares, la premire ne servant qu compter les rsultats ($count++; dans la boucle while par exemple). Cet article fait suite larticle sur linstallation dune connexion odbc avec Access utilisable par PHP. Nous allons voquer les diffrents aspects de la manipulation des donnes dune table dune base de donnes Access grce PHP.

Insertion dune ligne dans une table

Voil le script pour insrer une ligne dans sa table. On ne tient pas compte du champs id ici, car celui ci est auto-incrment. Notez que la syntaxe du SQL est diffrente de MySQL. On ne peut pas ajouter les donnes sans prciser les champs.

//Connection la base $connection = odbc_connect("table","admin","") or die("Couldn't connect to datasource."); //insertion de la ligne $sql = "INSERT INTO [adresses] ( nom, prnom, adresse, email) SELECT 'Dupont', 'Rmy', '2 rue du Moulin', 'dupont@email.com';"; //excution de la requte odbc_exec($connection,$sql) or die("Couldn't execute statement.")

Une vrification dans Access nous montre que la ligne a bien t ajoute :

Vrification dans Access

Suppression dune ligne dans la table

Dans le script suivant, nous supprimons la ligne contenant lid 5. La slection se fait sur le champs id puisque celui ci est la clef primaire, il est obligatoirement unique. Donc pas de confusion possible.
//connection la base $connection = odbc_connect("table","admin","") or die("Ne peut pas se connecter la base."); //suppression de la ligne $id=5; //Dfinition de la variable. (Peut tre externe.) $sql = "DELETE * FROM [adresses] WHERE id=$id;"; //excution de la requte odbc_exec($connection,$sql) or die("Ne peut pas excuter la requte."); Modification dune ligne de la table

Le script suivant modifie la ligne 5 (ici on passe le chiffre 5 en argument grce la variable $id.
//connection $connection = odbc_connect("table","admin","") or die("Couldn't connect to datasource."); //modification UPDATE adresses SET adresses.nom = 'Durand', adresses.prnom='Grard', adresses.adresse='54 rue du pont', adresses.email='durand@email.com' WHERE id=5;"; odbc_exec($connection,$sql) or die("Ne peut pas excuter la requte.");

Une vrification dans Access nous montre que la ligne bien t modifie :

Vrification dans Access

Affichage dun enregistrement de la table

Laffichage dun enregistrement est un petit peu plus complique quavec MySQL. La fonction odbc_fetch_into() crit une ligne du rsultat dune requte dans un tableau PHP. En cas de succs elle retourne le nombre de colonnes de la table de rponse. Sinon elle retourne false . Le tableau dans lequel le contenu de la ligne de rponse est crit doit tre pass la fonction par adrese. Cest dire avec loprateur & . Dans le script suivant, on choisi dafficher tous les champs sauf id:
//connection $connection = odbc_connect("table","admin","") or die("Couldn't connect to datasource."); //requte $sql = "SELECT adresses.nom, adresses.prnom, adresses.adresse, adresses.email FROM [adresses];"; //excution $res=odbc_exec($connection,$sql) or die("Ne peut pas excuter la requte."); //affichage while (odbc_fetch_into($res,&$tableau)) {foreach ($tableau as $element) {echo "$element";}}

A vous ensuite de prsenter laffichage Cet article fait partie dune srie darticles sur lutilisation dune connexion odbc avec Access par PHP. Dans larticle prcdent nous avons vu comment manipuler (insert, select) une table Access avec PHP. Nous allons voir comment rechercher des donnes dune table dune base de donnes Access grce PHP. Vous devez avoir acquis le principe pour excuter une requte SQL dans Access grce PHP pour comprendre ce chapitre. Considrons le listing suivant (connexion, excution de la requte en vue de lutilisation des rsultats comme prcdemment).
//Connection la base $connection = odbc_connect("table","admin","") or die("Couldn't connect to datasource."); //insertion de la ligne $sql = "???"; //excution de la requte $res=odbc_exec($connection,$sql) or die("Couldn't execute statement.")

Comment crire sa requte $sql pour rechercher des donnes dans la base? Le principe est le mme quavec MySQL, cest la syntaxe qui change. Slection en fonction de la valeur dun champs: Je recherche les nom et email de la personne dont le nom est Durand :

$sql="SELECT adresses.nom, adresses.email FROM adresses WHERE ((adresses.nom)='Durand');

NB: Ds prsent vous tes en mesure de faire vos propres applications en php/Access. Vous serez certainement tent comme moi de tester la syntaxe de vos requtes directement dans Acces en vue de les utiliser dans un script. Un petit dtail important. Si vous crez votre requte dans un mode diffrent du mode SQL, (ce qui est trs utile par ailleurs), vous vous rendrez compte que Access utilise plutt des guillemets plutt que les cotes que jutilise depuis le dbut dans toutes mes requtes. La raison de mon choix, est que Access accepte aussi bien lun ou lautre, donc autant en profiter. Ne pas avoir de guillemet dans une variable chane de caractre de PHP, cest toujours une source dennui en moins Slection en fonction de la valeur de plusieurs champs: Je recherche les personnes dont le prnom est Grard et ladresse email est gerard@email.com (stupide ici, mais cest pour vous montrer la syntaxe des oprateurs AND, OR, ect dans une requte SQL pour Access):
$sql="SELECT adresses.nom FROM adresses WHERE ((adresses.prnom)='Grard');";

Slection de tous les champs dans une requte:


$sql="SELECT * FROM adresses WHERE ((adresses.nom)='Durand'));";

Slection des noms commenant par a ;


$sql="SELECT adresses.nom FROM adresses WHERE (((adresses.nom) like('a*')));";

Pour gnralement: Sur le mme principe que les expressions rgulires en PHP: * remplace une chane de caractres ? remplace un caractre Cet article fait suite larticle sur linstallation dune connexion odbc avec Access utilisable par PHP. En nous basant sur un exemple nous allons tudier les diffrents aspects de lutilisation dAccess comme base de donnes pour PHP. Comme exemple nous allons nous amuser traduire le script Ptitaffiche de Vince (http://vpontier.free.fr) pour quil marche avec Access. Ce script sert afficher de manire alatoire des bannires dont le lien et lurl sont rfrences dans la base de donne. Vous pouvez tlcharger le script original sur son site. Le script modifi est tlchargeable en bas de page.

Cration de la table:

Le mieux est de le faire en mode cration, nanmoins voici le script SQL: Structure pour la table bandeaux :

CREATE TABLE bandeaux ( id int(20) , url char(20) NOT NULL, fichier char(20) NOT NULL, lien char(30) NOT NULL, PRIMARY KEY (id) );

Changez ensuite manuellement le champs id en NumeroAuto Donnes pour la table bandeaux dans le cas de mes images exemples, livres avec ce script : (Les donnes sont insrer les unes aprs les autres)
INSERT INTO bandeaux VALUES( INSERT INTO bandeaux VALUES( INSERT INTO bandeaux VALUES( INSERT INTO bandeaux VALUES( INSERT INTO bandeaux VALUES( Mise en place dans le pilote '0', '1', '2', '3', '4', 'pub', 'pub', 'pub', 'pub', 'pub', 'pub0.jpg', 'pub1.jpg', 'pub2.jpg', 'pub3.jpg', 'pub4.jpg', 'www.free.fr'); 'www.fifi.ed'); 'www.toto.fr'); 'www.tutu.net'); 'www.momo.org');

ODBC (cf installation)

Nommez la base bandeaux

Script:
\n\n");

\n ?>

Voil . Pour insrer la bannire dans vos pages vous navez qu inclure la ligne suivante:

Spcificits SQL:

Les caractres jokers comme * ne fonctionnent pas forcment. Imaginons que je veuille rcuprer tous les noms commenant par la lettre a dans une table contenant des adresses de contacts. La requte ressemblerait celle-ci:
$sql="SELECT adresses.nom FROM adresses WHERE (((adresses.nom) like('a*')));";

Cette requte ne fonctionne pas avec le pilote odbc pour Access 97 mais marche trs bien avec Access 2000 Si vous avez besoin dun moteur de recherche ou dun script utilisant ces mthodes de recherches, utilisez Access 2000 ou bien essayez une solution de rechange. la meilleure est lutilisation des tableaux en PHP. Explication: Vous placez tous les rsultats susceptibles de correspondre dans un tableau PHP (en gros tous les champs utiles de toute une table). Ensuite vous utilisez les expressions rgulires de PHP pour trouver les lignes du tableau qui sont bonnes. Vous placez celles-ci dans un second tableau qui sera votre tableau rsultat.

Tlcharger le script complet:

Le script PtitAffich de Vincent Pontier modifi par mes soins pour fonctionner avec Access est ici.

Vous aimerez peut-être aussi