14
Utiliser PHP avec Access Table des matières Utiliser PHP avec Access o Création de la base de données o Insérer des données dans votre base o Modification des données dans votre base o Conclusion Par Qwix, le 13 août 2005 Dans ce tutorial nous avions vu comment utiliser PHP avec MYSQL. Il est cependant possible d'utiliser PHP avec un base de données Access. Le travail avec Access est sensiblement le même qu'avec MYSQL, en gros, seuls les noms des fonctions changent. Nous allons voir comment insérer, modifier et supprimer des données dans une base Access. Création de la base de données Pour ce tutorial, nous allons utiliser la même base de données que celle utilisée dans ce tutorial Voici le SQL de cette base, je pars du principe que vous savez créer une base de données 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. Créez une base de données appelées base_personnes 2. Créez une table appelée 'personnes' qui contiendra les champs suivants: id_personne: type numéro auto, clef primaire de la table. nom: type texte prenom: type texte adresse: type texte cp: type texte telephone: type texte Création 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 créer ce qu'on apelle un DSN, voici la marche à suivre.

Php Access

Embed Size (px)

Citation preview

Page 1: Php Access

Utiliser PHP avec AccessTable des matières

Utiliser PHP avec Access o Création de la base de données o Insérer des données dans votre base o Modification des données dans votre base o Conclusion

Par Qwix, le 13 août 2005

Dans ce tutorial nous avions vu comment utiliser PHP avec MYSQL. Il est cependant possible d'utiliser PHP avec un base de données Access. Le travail avec Access est sensiblement le même qu'avec MYSQL, en gros, seuls les noms des fonctions changent. Nous allons voir comment insérer, modifier et supprimer des données dans une base Access.

Création de la base de données

Pour ce tutorial, nous allons utiliser la même base de données que celle utilisée dans ce tutorial

Voici le SQL de cette base, je pars du principe que vous savez créer une base de données 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. Créez une base de données appelées base_personnes2. Créez une table appelée 'personnes' qui contiendra les champs suivants:

id_personne: type numéro auto, clef primaire de la table. nom: type texte prenom: type texte adresse: type texte cp: type texte telephone: type texte

Création 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 créer ce qu'on apelle un DSN, voici la marche à suivre.

Menu Démarrer → Paramètres → Panneau de configuration → Outils d'administration → Source de données(ODBC) → Source de données système → Ajouter → Microsoft Access Driver → sélectionnez votre base de données, 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.

Insérer des données dans votre base

Nous allons créer une page insertion1.php qui va nous permettre de saisir les données à insérer dans la base.

<html>

Page 2: Php Access

<head> <title>insertion de données 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="insérer"></td> </tr> </table></form></body></html>

Notez bien la méthode utilisée par notre formulaire, ici c'est une méthode POST ce qui permet de ne pas afficher les variables dans URL, comme le ferait la méthode GET. IL faut toujours utiliser la méthode POST cela évite de laisser certains trous de sécurité. Pour bien voir la différence entre les deux méthodes, 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 donnée") ;  //récupération des valeurs des champs: //nom: $nom = $_POST["nom"] ; //prenom: $prenom = $_POST["prenom"] ; //adresse: $adresse = $_POST["adresse"] ; //code postal: $cp = $_POST["codePostal"] ; //numéro de téléphone:

Page 3: Php Access

$tel = $_POST["telephone"] ;  //création de la requête SQL: $sql = "INSERT INTO personnes (nom, prenom, adresse, cp, telephone) VALUES ( '$nom', '$prenom', '$adresse', '$cp', '$tel') " ;  //affichage de la requête SQL pour mieux comprendre ;) : echo( "<center>".$sql."<br>" ) ;  //exécution de la requête SQL: $requete = odbc_do($cnx, $sql) or die( odbc_error() ) ;  //affichage des résultats, pour savoir si l'insertion a marchée: if($requete) echo("<center>L'insertion a été correctement effectuée</center>") ; else echo("<center>L'insertion à échouée</center>") ;?>

Modification des données dans votre base

Pour modifier les données il faut tout d'abord pouvoir les récupérer, voici comment faire: modification1.php

<html> <head> <title>modification de données 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 donnée") ;  //requête SQL: $sql = "SELECT * FROM personnes ORDER BY nom" ;  //exécution de la requête: $requete = odbc_do($cnx, $sql) ;  //affichage des données: 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 donnée") ;

Page 4: Php Access

  //récupération des valeurs des champs: //nom: $nom = $_POST["nom"] ; //prenom: $prenom = $_POST["prenom"] ; //adresse: $adresse = $_POST["adresse"] ; //code postal: $cp = $_POST["codePostal"] ; //numéro de téléphone: $tel = $_POST["telephone"] ;  //récupération de l'identifiant de la personne: $id = $_POST["id"] ;  //création de la requête SQL: $sql = "UPDATE personnes SET nom = '$nom', prenom = '$prenom', adresse = '$adresse', cp = '$cp', telephone = '$tel' WHERE id_personne = $id " ;  //exécution de la requête SQL: $requete = odbc_do($cnx, $sql) or die( odbc_error() ) ;  //affichage des résultats, pour savoir si l'insertion a marchée: if($requete) echo("La modification à été correctement effectuée") ; else echo("La modification à échouée") ;?>

Suppression des données dans votre base Comme pour la modification il faut d'abord récupérer les données avant de savoir lesquelles supprimer La récupération de données est la même 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 donnée") ;  //récupération de la variable d'URL, //qui va nous permettre de savoir quel enregistrementsupprimer: $id = $_GET["idPersonne"] ;  //requête SQL: $sql = "DELETE FROM personnes WHERE id_personne = ".$id ;  //exécution de la requête: $requete = odbc_do($cnx, $sql) ;  //affichage des résultats, pour savoir si la suppression a marchée:

Page 5: Php Access

if($requete) echo("La suppression à été correctement effectuée") ; else echo("La suppression à échouée") ;?>

Conclusion

Comme vous avez pu le constater, le travail sur Access n'est pas radicalement différent 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 données Access, il ne vous reste plus qu'à créer le DSN

Pour améliorer la saisie et la conformité de vos données, vous pouvez utiliser les fonctions suivantes:

addslashes stripslashes trim

J’avais publié ce tutorial en 2002 sur le site Webfr qui n’existe plus. Comme il est toujours d’actualité et que la documentation à  ce sujet n’est 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 données MS Access. Certes cette configuration n’est pas courante, mais c’est parfois la solution la plus simple pour utiliser des données existantes en entreprise où Access est encore assez répandu pour les applications de gestion.

Créez une base sous Access. Dans ce tutorial nous prendrons la base « base.mdb »

Ouvrez le gestionnaire de pilotes odbc. Vous le trouverez dans paramètres/panneaux de configuration pour Windows 98 et dans panneaux de configuration/outils d’administration/sources de données pour windows 2000 et NT

Sélectionnez l’onglet Sources de données système.

Cliquez sur « Ajouter ».

Page 6: Php Access

Puis cliquez sur « Terminer ».

Dans la fenêtre qui s’affiche, sélectionnez « Driver Microsoft Access (*.mdb »)

Dans la nouvelle fenêtre qui s’affiche, sélectionnez la base créée précédemment à  l’aide du bouton « sélectionner… » .

Le champs Nom de la source de données est celui qui sera utilisé dans les scripts php faisant appel à  cette base.

Cliquez sur OK, et votre ordinateur est prêt.

Comment l’utiliser ?

Dans l’article suivant traitant de l’utilisation d’une base de données Access dans PHP, nous allons étudier un exemple concret. Vous aurez besoin de vous familiariser avec les fonction ODBC unifiées de PHP, qui sont documentées dans la documentation officielle.Attention certaines fonctions ne marchent pas avec Access.Par exemple, c’est le cas de la fonction odbc_num_rows(). Il est donc impossible de compter les lignes résultats directement. Si vous devez le faire vous devez faire deux requêtes séparées, la première ne servant qu’à  compter les résultats ($count++; dans la boucle while par exemple).

Cet article fait suite à  l’article sur l’installation d’une connexion odbc avec Access utilisable par PHP. Nous allons évoquer les différents aspects de la manipulation des données d’une table d’une base de données Access grâce à  PHP.

Insertion d’une ligne dans une table

Voilà  le script pour insérer une ligne dans sa table. On ne tient pas compte du champs id ici, car celui ci est auto-incrémenté. Notez que la syntaxe du SQL est différente de MySQL. On ne peut pas ajouter les données sans préciser les champs.

Page 7: Php Access

//Connection à  la base$connection = odbc_connect("table","admin","") or die("Couldn't connect to datasource.");

//insertion de la ligne$sql = "INSERT INTO [adresses] ( nom, prénom, adresse, email) SELECT 'Dupont', 'Rémy', '2 rue du Moulin', '[email protected]';";

//exécution de la requêteodbc_exec($connection,$sql) or die("Couldn't execute statement.")

Une vérification dans Access nous montre que la ligne a bien été ajoutée :

Vérification dans Access

Suppression d’une ligne dans la table

Dans le script suivant, nous supprimons la ligne contenant l’id 5. La sélection 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; //Définition de la variable. (Peut être externe.)$sql = "DELETE * FROM [adresses] WHERE id=$id;";

//exécution de la requêteodbc_exec($connection,$sql) or die("Ne peut pas exécuter la requête.");

Modification d’une ligne de la table

Le script suivant modifie la ligne 5 (ici on passe le chiffre 5 en argument grâce à  la variable $id.

//connection$connection = odbc_connect("table","admin","") or die("Couldn't connect to datasource.");

//modificationUPDATE adresses SET adresses.nom = 'Durand', adresses.prénom='Gérard', adresses.adresse='54 rue du pont', adresses.email='[email protected]' WHERE id=5;";odbc_exec($connection,$sql) or die("Ne peut pas exécuter la requête.");

Une vérification dans Access nous montre que la ligne à  bien été modifiée :

Page 8: Php Access

Vérification dans Access

Affichage d’un enregistrement de la table

L’affichage d’un enregistrement est un petit peu plus complique qu’avec MySQL.La fonction odbc_fetch_into() écrit une ligne du résultat d’une requête dans un tableau PHP. En cas de succès elle retourne le nombre de colonnes de la table de réponse. Sinon elle retourne « false ».Le tableau dans lequel le contenu de la ligne de réponse est écrit doit être passé à  la fonction par adrese. C’est à  dire avec l’opérateur & .Dans le script suivant, on choisi d’afficher tous les champs sauf id:

//connection$connection = odbc_connect("table","admin","") or die("Couldn't connect to datasource.");

//requête$sql = "SELECT adresses.nom, adresses.prénom, adresses.adresse, adresses.email FROM [adresses];";//exécution$res=odbc_exec($connection,$sql) or die("Ne peut pas exécuter la requête.");

//affichagewhile (odbc_fetch_into($res,&$tableau)) {foreach ($tableau as $element) {echo "$element";}}

A vous ensuite de présenter l’affichage

Cet article fait partie d’une série d’articles sur l’utilisation d’une connexion odbc avec Access par PHP. Dans l’article précédent nous avons vu comment manipuler (insert, select) une table Access avec PHP. Nous allons voir comment rechercher des données d’une table d’une base de données Access grâce à  PHP.

Vous devez avoir acquis le principe pour exécuter une requête SQL dans Access grâce à  PHP pour comprendre ce chapitre.Considérons le listing suivant (connexion, exécution de la requête en vue de l’utilisation des résultats comme précédemment).

//Connection à  la base$connection = odbc_connect("table","admin","") or die("Couldn't connect to datasource.");

//insertion de la ligne$sql = "???";

//exécution de la requête$res=odbc_exec($connection,$sql) or die("Couldn't execute statement.")

Comment écrire sa requête $sql pour rechercher des données dans la base?Le principe est le même qu’avec MySQL, c’est la syntaxe qui change.

Sélection en fonction de la valeur d’un champs:Je recherche les nom et email de la personne dont le nom est « Durand »:

Page 9: Php Access

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

NB: Dès à  présent vous êtes en mesure de faire vos propres applications en php/Access. Vous serez certainement tenté comme moi de tester la syntaxe de vos requêtes directement dans Acces en vue de les utiliser dans un script. Un petit détail important. Si vous créez votre requête dans un mode différent du mode SQL, (ce qui est très utile par ailleurs), vous vous rendrez compte que Access utilise plutôt des guillemets  » plutôt que les cotes ‘ que j’utilise depuis le début dans toutes mes requêtes. La raison de mon choix, est que Access accepte aussi bien l’un ou l’autre, donc autant en profiter. Ne pas avoir de guillemet d’ans une variable chaîne de caractère de PHP, c’est toujours une source d’ennui en moins

Sélection en fonction de la valeur de plusieurs champs:Je recherche les personnes dont le prénom est Gérard et l’adresse email est [email protected] (stupide ici, mais c’est pour vous montrer la syntaxe des opérateurs AND, OR, ect… dans une requête SQL pour Access):

$sql="SELECT adresses.nom FROM adresses WHERE ((adresses.prénom)='Gérard');";

Sélection de tous les champs dans une requête:

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

Sélection des noms commençant par « a »;

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

Pour généralement:Sur le même principe que les expressions régulières en PHP:* remplace une chaîne de caractères? remplace un caractère

Cet article fait suite à  l’article sur l’installation d’une connexion odbc avec Access utilisable par PHP. En nous basant sur un exemple nous allons étudier les différents aspects de l’utilisation d’Access comme base de données pour PHP.

Comme exemple nous allons nous amuser à  traduire le script « Ptitaffiche » de Vince (http://vpontier.free.fr) pour qu’il marche avec Access.Ce script sert à  afficher de manière aléatoire des bannières dont le lien et l’url sont référencées dans la base de donnée.

Vous pouvez télécharger le script original sur son site. Le script modifié est téléchargeable en bas de page.

Création de la table:

Le mieux est de le faire en mode création, néanmoins voici le script SQL:

Structure pour la table ‘bandeaux’ :

Page 10: Php Access

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

Données pour la table ‘bandeaux’ dans le cas de mes images exemples, livrées avec ce script :(Les données sont à  insérer les unes après les autres)

INSERT INTO bandeaux VALUES( '0', 'pub', 'pub0.jpg', 'www.free.fr');INSERT INTO bandeaux VALUES( '1', 'pub', 'pub1.jpg', 'www.fifi.ed');INSERT INTO bandeaux VALUES( '2', 'pub', 'pub2.jpg', 'www.toto.fr');INSERT INTO bandeaux VALUES( '3', 'pub', 'pub3.jpg', 'www.tutu.net');INSERT INTO bandeaux VALUES( '4', 'pub', 'pub4.jpg', 'www.momo.org');

Mise en place dans le pilote ODBC (cf installation)

Nommez la base « bandeaux »

Script:

\n \n\n");

?>

Voilà . Pour insérer la bannière dans vos pages vous n’avez qu’à  inclure la ligne suivante:

Spécificités SQL:

Les caractères « jokers » comme * ne fonctionnent pas forcément.

Imaginons que je veuille récupérer tous les noms commenà§ant par la lettre « a » dans une table contenant des adresses de contacts.La requête ressemblerait à  celle-ci:

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

Cette requête ne fonctionne pas avec le pilote odbc pour Access 97 mais marche très bien avec Access 2000

Si vous avez besoin d’un moteur de recherche ou d’un script utilisant ces méthodes de recherches, utilisez Access 2000 ou bien essayez une solution de rechange. la meilleure est l’utilisation des tableaux en PHP.

Explication: Vous placez tous les résultats susceptibles de correspondre dans un tableau PHP (en gros tous les champs utiles de toute une table). Ensuite vous utilisez les expressions régulières de PHP pour trouver les lignes du tableau qui sont bonnes. Vous placez celles-ci dans un second tableau qui sera votre tableau résultat.

Page 11: Php Access

Télécharger le script complet:

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