Vous êtes sur la page 1sur 12

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

ACCU EIL

LISTE DES ARTICLES

ARTICLES ESSENTIELS

TOP 10

C O U R S J A VA

OUTILS

R F RE NCE S

A PROPOS

FLU X RSS

Construire une base de donnes simple avec PHP et MySQL


by GF on 2 5 S E PT E M B ER 2 005

Cet article constitue un tutoriel simple et rapide montrant comment construire une base de donnes en utilisant les technologies PHP et MySQL. Cette base de donnes sera accessible depuis internet laide dun navigateur. Nous allons aborder les points suivants: Quallonsnous faire ? Comment le faire ? Etape 1: Crer la base de donnes. Etape 2: Ajouter une entre dans la base de donnes. Etape 3: Acher les entres de la base de donnes. Etape 4: Rechercher des entres dans la base de donnes. Etape 5: Modier et supprimer une entre dans la base de donnes. Bonus: Scuriser laccs la base de donnes.

Quallonsnous faire ?

Nous allons crer une base de donnes, et un logiciel permettant dexploiter cette base de donnes. Une base de donnes stocke des informations remplissant certains critres. Elle permet de trier les informations quelle contient selon ces critres. Imaginezvous un tableau Excel: des colonnes et des lignes. Une base de donnes fonctionne exactement sur le mme principe. En eet, si nous voulons stocker les informations nom, prnom et ge pour direntes personnes, il nous faudra crer 3 colonnes, une pour chaque information; et X lignes, une par personne. Cette illustration reprsente la structure de la base de donnes que nous allons crer: Colonne 1 Colonne 2 Colonne 3 Nom Ligne 1 Martin Ligne 2 Dupont Lignes n Prnom Pierre Pierre ge 42 38

Vous laurez compris, le nombre de colonnes est xe, tandis que le nombre de lignes est indtermine: un nouvel enregistrement dans la base de donnes reprsente une ligne supplmentaire. Pour comprendre les mcanismes de fonctionnement des bases de donnes, vous pouvez vous exercer crer des feuilles de calcul sous Excel (ou un autre tableur) et manipuler les donnes quelles contiennent. Excel se comporte en eet comme une base de donnes en stockant et manipulant les informations la manire dune base de donnes. Dans le tableau cidessus, jai omis une colonne. Il sagit de la colonne identiant (nous lappellerons id). A chaque ligne de cette colonne id est attribu un chire ou un nombre. Le premier enregistrement de la base de donnes aura ainsi lidentiant 1, le second aura lidentiant 2, et ainsi de suite. Lid permet par la suite de manipuler les lignes trs facilement. Une dernire prcision importante: chaque colonne naccepte quun type prcis de donnes. Dans notre cas, la colonne id ne devra stocker que des nombres entiers, les colonnes nom et prnom des chanes de texte (que nous appellerons dornavant string), et la colonne ge un nombre entier (que nous appellerons int de langlais integer). Il est absolument ncessaire de bien dterminer ds le dbut de la conception dune base de donnes le type de donnes stockes dans chaque

1 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

colonne. En eet, si lon veut trier les enregistrements suivant le critre ge, et quun enregistrement contient, pour cette colonne, un string au lieu dun entier, le tri ne pourra pas avoir lieu correctement. Dupont estil infrieur ou suprieur 52 ? Impossible dire, on ne peut comparer que des donnes du mme type.

Comment le faire ?

Il existe de nombreuses manires de construire une base de donnes. En eet, chaque base de donnes repose sur un serveur, et il existe une multitude de serveurs dirents. Parmi les plus clbres: Oracle, Sybase, Access, FileMaker, PostgreSQL et MySQL. Les deux premiers sont des serveurs professionnels qui cotent plusieurs centaines de milliers deuro et qui sont destins stocker des millions denregistrements. Access et FileMaker sont des serveurs propritaires qui ne fonctionnent que par le biais dun logiciel que vous devez installer sur votre systme. Enn, les deux derniers sont gratuits et permettent une consultation par internet grce lintgration du langage de requtes (SQL, le langage permettant de donner ses instructions au serveur) la technologie web PHP. Nous allons donc voir dans un premier temps comment fonctionnent les changes entre serveur et client, pour voir ensuite ce que sont MySQL, SQL et PHP et, enn, comprendre comment tous ces lments simbriquent les uns dans les autres.

Internet: dialogue entre un client et un serveur


Vous tapez une adresse dans la barre dadresse de votre navigateur, et vous appuyez sur Entre. La page se charge lcran. Cela parat simple, mais il sagit en ralit du rsultat dun dialogue entre client (votre navigateur) et serveur (lordinateur qui contient linformation que vous demandez). Lorsque vous appuyez sur Entre, votre navigateur contacte le serveur qui gre ladresse que vous avez tape. Le serveur vous envoie linformation demande, et le navigateur lache. Imaginez un chier Word: vous doublecliquez dessus, il souvre dans Word, et vous pouvez ainsi le lire. Dans notre cas, le client dit au serveur je veux voir tel document, ce qui correspond au doubleclic. Le serveur envoie alors ce document au navigateur qui linterprte et lache lcran. Il linterprte car, au mme titre que votre chier Word, cest un chier qui est envoy du serveur au navigateur. Ce chier est crit dans un langage de programmation spcial que reconnat le navigateur. Ce langage est le HTML. Le navigateur reoit par exemple linformation suivante: <i>Bonjour</i>. Il sait que tout texte compris entre la balise <i> et la balise </i> devra tre ach en italique. Il achera donc: Bonjour !. Il est particulirement important pour la suite de comprendre ce mcanisme: le serveur met un document rempli de texte (le code source dnissant la mise en page et la prsentation, et le contenu lui mme), il ne traite pas ce texte. Cest le navigateur qui traite ce texte, et linterprte pour acher le rsultat attendu.

MySQL, SQL, PHP ?


Le principe du PHP, un autre langage de programmation, est tout fait dirent. En eet, dans ce cas cest le serveur qui excute le code source et qui renvoit le rsultat au navigateur. Le serveur ne se contente pas denvoyer les donnes, il les analyse et leur applique un traitement avant de les envoyer. On dit que le PHP sxcute ct serveur alors que le HTML est trait ct client. Vous remarquerez que je nemploie pas le verbe sexcuter pour parler du HTML. Il sagit l dune autre dirence majeure entre le HTML et le PHP: le HTML nest pas excutable, il est purement statique. En dautres termes, alors que le HTML se borne dcrire une situation de faits (tel mot est en italique, telle phrase est en gras, telle image doit tre ache, etc.), le PHP peut avoir des comportements qui produisent des eets sous certaines conditions. Par exemple: si le nom est Dupont, alors il devra tre ach en rouge. Le PHP est le langage que nous allons utiliser pour le traitement du contenu de la base de donnes. MySQL est le nom du serveur de base de donnes. Cest un logiciel install sur le serveur qui interprte et excute les requtes qui lui sont soumises grce au langage SQL. Par exemple, le code suivant permet de retenir, dans la base de donnes appele mabase, tous les prnoms des

2 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

personnes qui ont plus de 40 ans, en rejetant les prnoms des personnes qui ne remplissent pas ce critre: SELECT prenoms FROM mabase WHERE age > 40.

Conjonction de ces lments


Si vous avez compris les explications cidessus, vous devriez comprendre les deux phrases suivantes: Le contenu et la structure de la base de donnes seront stocks sur le serveur MySQL auquel accderont des fonction PHP utilisant le langage SQL. La formation des requtes SQL se fera grce des oprations logiques ralises en PHP, et lachage des rsultats de ces requtes se fera grce un code HTML gnr par dautres fonctions PHP.

Etape 1: Crer la base de donnes


Connexion au serveur de base de donnes
Je suppose que votre base de donnes existe dj, mais ne contient aucune donne.Lorsque vous activez MySQL chez un hbergeur Web, une base de donnes associe votre compte est automatiquement cre.Cependant, elle ne contient aucune table.Une table est le conteneur d ensemble de colonnes et lignes. Nous allons nous connecter la base de donnes, et crer la un table utile cet exercice. Crez donc un chier appel connexion.php:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.

<?php $host = "localhost"; /* L'adresse du serveur */ $login = ""; /* Votre nom d'utilisateur */ $password = ""; /* Votre mot de passe */ $base = ""; /* Le nom de la base */ function connexion() { global $host, $login, $password, $base; $db = mysql_connect($host, $login, $password); mysql_select_db($base,$db); } ?>

La ligne 1 contient le tag ou balise en franais qui permet de dterminer le type de script utilis: il s agit de PHP.La ligne 13 informe le serveur que le script est termin. Les lignes 2 5 dnissent des variables.Par exemple, votre login ou nom d utilisateur est pierre_martin_128765b.Vous assignez cette valeur la variable $login pour qu chaque fois que vous fassiez rfrence $login le serveur comprenne pierre_martin_128765b.De mme pour les autres valeurs. La ligne 7 marque la cration d une fonction.Une fonction regroupe une srie d instructions qui seront excutes ds que cette dernire est apple. Ainsi, au lieu d crire les lignes 9, 10 et 11, vous crirez dornavant connexion();.Les lignes 8 et 12 prsentent des accolades qui dlimitent la porte de la fonction: elle englobe toutes les lignes entre ces accolades.

Cration de la table
Crez ensuite un autre chier appel installation.php:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.

<?php include("connexion.php"); connexion(); $sql= "CREATE TABLE IF NOT EXISTS `mabase` ("; $sql .= "`id` int(11) NOT NULL auto_increment,"; $sql .= "`nom` text NOT NULL,"; $sql .= "`prenom` text NOT NULL,"; $sql .= "`age` int NOT NULL,"; $sql .= "PRIMARY KEY (`id`),"; $sql .= "UNIQUE KEY `id_2` (`id`),";

3 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

13. 14. 15. 16. 17.

$sql .= "KEY `id` (`id`)"; $sql .= ") ENGINE=MyISAM;"; mysql_query($sql) or die(mysql_error()); ?>

A la ligne 2, par linstruction include(connexion.php);, nous incluons le contenu de ce chier dans le chier courant. Nous pourrons ainsi accder son contenu, notamment en appelant la fonction connexion() la ligne 4. Les lignes 6 14 contiennent les instructions de formation de la requte SQL. La requte est dcoupe et insre dans la variable $sql. Notez que le symbole exmploy est .= qui signie ajoutez ce qui suit la n de la variable, aprs ce quelle contient dj. A la ligne 6, nous crons la table, si elle nexiste pas dj, et nous lui donnons le nom mabase. A la ligne 7, nous insrons dans la table la colonne id de type int (entier), qui ne peut pas tre une valeur nulle et qui sincrmente automatiquement chaque nouvel ajout dans la base de donnes. Cet lment, id, sera la cl qui identie chaque enregistrement (lignes 11 13). A la ligne 8 nous insrons la colonne nom de type texte et qui ne peut tre nulle. La ligne 14 dtermine le type de table, thme qui dpasse lobjet de cet article. La ligne 16 soumet la requte forme la base de donnes, et ache une ventuelle erreur lcran.

Etape 2: Ajouter une entre dans la base de donnes


Utilisation des variables et formation de la requte SQL
Quand on ajoute une entre dans la base de donnes, une nouvelle ligne est cre. A chaque colonne de cette nouvelle ligne est assigne une valeur. Nous allons donc utiliser une requte SQL pour attribuer une valeur chaque colonne de la nouvelle ligne: INSERT INTO mabase(id,nom,prenom,age)

VALUES(,Martin,'Pierre,42). En franais, cela donnerait: Insrez dans la table


appele mabase, respectivement pour les colonnes id, nom, prnom et age, les valeurs (vide), Martin, Pierre et 42. Nous avons vu que le langage PHP utilisait des variables. On peut donc remplacer les valeurs que lon veut insrer par la nom des variables qui les contiennent. Dans un premier temps, on assigne les valeurs aux variables:

1. $nom = 'Martin'; 2. $prenom = 'Pierre'; 3. $age = '42'


On pourra ainsi, dans un second temps, insrer ces variables au lieu des valeurs associes dans la requte SQL: INSERT INTO mabase(id,nom,prenom,age)

VALUES(,$nom,'$prenom,'$age).

Cration du formulaire
Vous savez maintenant former la requte SQL dajout dun enregisterment dans la base de donnes en utilisant des variables. Il nous faut prsent crer un formulaire pour rcuprer les donnes ajouter. Un formulaire est un ensemble dobjets que manipule lutilisateur le visiteur de la page. Il y a ainsi des champs de texte, des cases cocher, des menus droulants, des boutons, etc. Notre formulaire sera simple: 3 champs et 1 bouton. Voici le code du formulaire:

1. <form name="formulaire" method="post" action="ajouter.php">

4 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.

<table width="200" border="1"> <tr> <td>Nom:</td> <td><input name="nom" type="text" id="nom"></td> </tr> <tr> <td>Prnom:</td> <td><input name="prenom" type="text" id="prenom"></td> </tr> <tr> <td>Age:</td> <td><input name="age" type="text" id="age" size="3" maxlength="3"></td> </tr> <tr> <td colspan="2"><div align="center"> <input type="submit" name="Submit" value="Envoyer"> </div></td> </tr> </table> </form>

Et voil le rsultat: Nom: Prnom: Age: Envoyer

Ce code mrite quelques explications. A la ligne 1 on cre le formulaire, et on lui donne un nom (ici: formulaire). Puis, on indique la mthode de transmission des donnes.Il en existe deux: POST et GET.Pour les formulaires, on utilise en rgle gnrale POST.Ces deux mthodes sortent de l objet de cet article.Enn, on indique vers quel chier le contenu du formulaire sera envoy: ajouter. php. La balise <table> sert crer un tableau.Ici, il a les attributs suivants: largeur de 200 pixels, paisseur de la bordure de 1 pixel. Les balises <tr> et <td> servent, respectivement, crer une ligne et une colonne. Les champs de texte sont crs grce la balise <input>.Ainsi, la ligne 5 on cre un objet de type input, qui est un champ de texte (type=text), et dont le nom et l identiant sont nom.A la ligne 13, il s agit du champ pour la valeur ge: la taille maximale du texte entr sera de 3 caractres, la taille du champ sera de 3 caractres. Pour nir, la ligne 17, on cre un bouton qui servira valider le formulaire, et envoyer les valeurs des champs vers le chier spci la ligne 1 et avec la mthode spcie cette mme ligne.

Rcupration des valeurs du formulaire


Nous avons cr le formulaire qui permet l utilisateur de saisir ses donnes, nous allons maintenant crer la page ajouter.php qui nous permettra d ajouter les donnes soumises dans la base de donnes. Crez donc le chier ajouter.php et ajoutez le code qui suit, de manire se connecter la base de donnes:

1. <?php 2. include("connexion.php"); 3. 4. connexion();


Une fois connect la base de donnes, il nous faut rcuprer les valeurs du formulaire.On utilise pour cela un tableau ou matrice qui peut contenir plusieurs valeurs direntes.Il s agit du tableau

$_POST.Dans notre formulaire, nous avons donn ces noms aux champs: nom, prenom, age.Pour rcuprer les valeurs saisiez dans ces champs, il sura d crire, respectivement: $_POST['nom'],

5 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

$_POST['prenom'] et $_POST['age'].
Ce systme nous permet de former la requte SQL trs simplement: INSERT INTO

mabase(id,nom,prenom,age) VALUES(,.$_POST['nom'].,.$_POST['prenom'].,.$_POST['age'].).
Ce qui donne, au nal le code suivant ( la suite du dbut du chier dcrit plus haut):

1. $sql = "INSERT INTO mabase(id,nom,prenom,age) "; 2. $sql .= "VALUES('','".$_POST['nom']."','".$_POST['prenom']."','".$_POST['age']."')"; 3. 4. mysql_query($sql) or die(mysql_error()); 5. ?>

Contrle des valeurs saisies


Le code prsente ciavant est parfaitement fonctionnel. Il prsente cependant un gros dfaut: les valeurs saisies par lutilisateur ne sont pas contrles. Ainsi, un utilisateur pourrait omettre de donner son nom, ce qui aurait pour consquence linsertion dun valeur vide dans la base de donnes. Un programmeur PHP doit toujours se poser la question suivante: comment se comportera mon code sil est appel anormalement ou en dehors de son contexte ?. Dans notre cas, si on tape ladresse du chier ajouter.php dans un navigateur, si on appelle le chier sans passer par le formulaire, on aura droit un beau bug, et pour cause puisque le tableau $_POST nexiste que lorsquil y a un formulaire utilisant la mthode POST en amont ! Il nous faut donc contrler deux choses: que POST existe bien, et que tous les champs ont t renseigns. Ces deux choses se ralisent en une seule opration, laide dune expression conditionnelle. Les expressions conditionnelles permettent de dterminer quel comportement aura le programme, en fonction dlments et de conditions dtermins. La logique est la suivante: si A alors B sinon C. En PHP, cela donne:

1. if ($POST['nom'] != '' AND $POST['prenom'] != '' AND $POST['age'] != '') 2. { // c'est bon, on peut copier/coller ici le code vu ci-dessus 3. } 4. else 5. { 6. echo 'Erreur ! Vous devez remplir tous les champs !'; 7. }
if signie si, else signie sinon. La syntaxe est la suivante : if(la condition remplir) {le code excuter si la condition est remplie} else { le code excuter si la condition nest pas remplie }. Dans notre cas la condition est simple. On prend le contenu de notre tableau et on vrie quaucune des entres nest vide. Par exemple, pour le nom: dun ct on a $POST['nom'] qui reprsente ce que lutilisateur a saisi, dun autre ct qui reprsente un contenu inexistant (une chane de texte vide), et enn, au milieu != qui est un oprateur de comparaison signiant dirent de. On rpte cela pour les champs prnom et ge, en mettant loprateur boolen AND qui signie et. La condition peut ainsi se lire: SI la valeur du champ NOM du formulaire NEST PAS une CHANE VIDE, ET SI la valeur du champ PRENOM du formulaire NEST PAS une CHANE VIDE, ET SI la valeur du champ AGE du formulaire NEST PAS une CHANE VIDE; alors excuter le code qui suit Linstruction echo permet dacher quelque chose lcran. Dans notre cas, un message derreur indiquant que tous les champs nont pas t renseigns.

6 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

Le code nal du chier ajouter.php est le suivant:

1. <?php 2. include("connexion.php"); 3. 4. if ($POST['nom'] != '' AND $POST['prenom'] != '' AND $POST['age'] != '') 5. { 6. connexion(); 7. 8. $sql = "INSERT INTO mabase(id,nom,prenom,age) "; 9. $sql .= "VALUES('','$_POST['nom']','$_POST['prenom']','$_POST['age']')"; 10. 11. mysql_query($sql) or die(mysql_error()); 12. } 13. else 14. { 15. echo 'Erreur ! Vous devez remplir tous les champs !'; 16. } 17. ?>

Etape 3: Acher les entres de la base de donnes


Principe: acher des donnes tabulaires
Les donnes tabulaires sachent sous forme de tableaux plusieurs dimensions, exactement comme elles sont stockes sur le serveur de base de donnes.Il est dont logique de les acher dans des tableaux HTML. Comme expos plus haut, les tableaux HTML se construisent lintrieur de la balise <table>, les balises <tr> dlimitant les lignes et les balises <td> les colonnes. Voici un exemple:

1. <table> 2. <tr> 3. <td>Colonne 4. <td>Colonne 5. </tr> 6. <tr> 7. <td>Colonne 8. <td>Colonne 9. </tr> 10. <tr> 11. <td>Colonne 12. <td>Colonne 13. </tr> 14. </table>
Ce qui donne:

1 / Ligne 1</td> 2 / Ligne 1</td>

1 / Ligne 2</td> 2 / Ligne 2</td>

1 / Ligne 3</td> 2 / Ligne 3</td>

Colonne 1 / Ligne 1 Colonne 2 / Ligne 1 Colonne 1 / Ligne 2 Colonne 2 / Ligne 2 Colonne 1 / Ligne 3 Colonne 2 / Ligne 3

Mise en pratique: achage en liste


Nous allons crer un chier liste.php destin acher la liste de tous les enregistrements de la base de donnes.Le dbut ne change pas:

1. <php? 2. 3. include("connexion.php"); 4. 5. connexion();

7 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

Il nous faut ensuite crire la requte SQL. Dans ce cas, elle est simple et elle dit Acher TOUS les enregistrements de la table mabase: SELECT * FROM mabase.

1. $sql = SELECT * FROM mabase;


Nous envoyons ensuite la requte au serveur, le rsultat de cette requte tant stock dans la variable $req.

1. $req = mysql_query($sql) or die(mysql_error());


La variable $req stocke plusieurs lments. Nous allons les extraire et les acher un par un. Cela est possible grce linstruction while() qui permet dexcuter un certain code tant quune condition nest pas remplie. Dans notre cas, la logique est la suivante: Etant donn qu une ligne du tableau HTML reprsente un enregistrement de la base de donne, crez une ligne et remplissez chacune de ses colonnes tant qu reste des enregistrements dans la base de donnes. il Les boucles while sont trs intressantes: il nest pas ncessaire de savoir combien denregistrements il y a dans la base de donnes, puisque le mme code sera excut tant qu en il reste. Voici donc le code:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

echo '<table>'; while($data = mysql_fetch_assoc($req)) { echo '<tr>'; echo '<td>$data["id"]</td>'; echo '<td>$data["nom"]</td>'; echo '<td>$data["prenom"]</td>'; echo '<td>$data["age"]</td>'; echo '</tr>'; } echo '</table>';

Rappelezvous, la commande echo permet dacher un lment lcran. Nous achons ici des balises HTML et du contenu.

Achage en liste: Tri par colonnes


Nous venons dacher les donnes de la base en liste, sous la forme dun tableau: une colonne par proprit, une ligne par enregistrement. Lintrt dun tel achage donnes tabulaires est de pouvoir eectuer des tris rapidement. Par exemple, classer les enregistrements en ordre croissant ou dcroissant, par nom, prnom ou ge. Pour eectuer un tel tri, il faudra passer une requte SQL de plus. Celleci est trs simple: SELECT

* FROM mabase ORDER BY xxx yyy o xxx reprsente le champ prendre en


considration, et yyy la mthode de tri. Par exemple, nous avons un champ id qui associe chaque enregistrement de la base de donnes un numro. Le premier enregistrement est 1, le second est 2, etc. Par dfaut, lorsquon passe la requte pour acher les donnes tabulaires, MySQL renvoie dabord le premier enregistrement, puis le second, et ainsi de suite jusquau dernier. Le tableau se prsentera donc de la faon suivante: le premier enregistrement le plus vieux en haut, le dernier le plus rcent en bas. On appelle cela ordre ascendant ou croissant. Mais on peut vouloir linverse (et cest frquent dans ce cas): le dernier enregistrement, le plus rcent, en haut, et le premier, le plus vieux, en bas. Dans ce cas, il faut trier les donnes par ordre descendant ou dcroissant. Linstruction SQL sera: SELECT * FROM mabase ORDER BY id DESC. On crit DESC pour ordre dcroissant, et ASC pour ordre croissant. Ne vous y trompez pas, ceci na rien voir avec la commande SQL WHERE. Nous avons vu au dbut de cet article que la requte SELECT prenoms FROM mabase WHERE age > 40 achait le prnom des gens qui ont plus de 40 ans. Cela implique que ceux qui ont moins de 40 ans seront ignors. Si vous avez deux enregistrements dans votre base de donnes, lun correspondant une personne de 50 ans, et lautre une personne de 30 ans, alors seul le premier enregistrement sera ach. Le second ne sera pas ach, il sera ignor. A linverse, la commande ORDER BY prend

8 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

en compte tous les enregistrements: il ne sagit pas de rechercher les enregistrements remplissant certains critres, en excluant ceux qui ne remplissent pas ces critres, mais de trier tous les enregistrements selon certains critres. Vous pouvez intgrer tout cela votre programme de manire trs simple.Tout en haut de la page sur laquelle est ach votre tableau vos donnes tabulaires, crez deux liens:

1. <a href="liste.php?orderby=asc">Trier par ordre croissant</a> 2. <a href="liste.php?orderby=desc">Trier par ordre dcroissant</a>
Ensuite, dans votre chier liste. php, adaptez votre vode.La requte SQL sera forme de manire dirente, selon que lutilisateur a cliqu sur le lien Trier par ordre croissant ou sur le lien Trier par ordre dcroissant.

1. 2. 3. 4. 5. 6. 7. 8. 9.

if($_GET["orderby"] == "asc") // si on veut un ordre croissant { $sql = "SELECT * FROM mabase ORDER BY id ASC"; } elseif($_GET["orderby"] == "desc") // si on veut un ordre dcroissant { $sql = "SELECT * FROM mabase ORDER BY id DESC"; } else // si rien n'a t prcis { $sql = "SELECT * FROM mabase"; }

Le principe est le mme pour les autres champs.Si par exemple vous voulez trier les personnes par ge croissant, les plus jeunes en haut et les plus vieux en bas, il vous sura de passer la requte suivante: SELECT * FROM mabase ORDER BY age ASC.

Astuce: achage par che


Nous venons dacher tous les enregistrements de la base de donnes.Peuttre que pour chaque enregistrement vous avez une trentaine de colonnes, et que ce nest pas pratique pour vous de tout acher en bloc.Dans ce cas l notre champ id va servir ! La solution est dacher la liste complte (comme dans lexemple cidessus), en omettant par exemple les colonnes prenom et age.A la place, un lien de ce type: echo <td><a href=fiche.php?q=.$data["id"].>Voir la fiche</a></td>; Ce code produira un lien renvoyant vers la page fiche.php?q=XX, XX tant le contenu de la colonne id pour celle ligne. On rcupre ensuite, dans le chier che.php, la valeur de XX grce la variable $_GET['q'].Nous avons utilis la mthode POST pour le formulaire, et nous utilisons maintenant la mthode GET ! La valeur de XX ainsi rcupre, il ne nous reste plus qu former la requte SQL: $sql = SELECT

* FROM mabase WHERE id=.$_GET["q"].;.


Au nal, cela donne:

1. 2. 3. 4. 5. 6. 7. 8. 9.

$id = $_GET['id']; $sql = "SELECT * FROM mabase WHERE id='$id'"; $req = mysql_query($sql) or die(mysql_error()); $data = mysql_fetch_assoc($req); echo echo echo echo ' ' ' ' Id: '.$data['id']; Nom: '.$data['nom']; Prnom: '.$data['prenom']; ge: '.$data['age'];

Je vous laisse crire le reste du code, notamment la mthode de connexion la base de donn qui ne change pas ; et la mthode de vrication de lexistence et de la nonnullit de la variable $_GET, puisque la procdure avec ifelse est la mme pour la variable $_GET et pour la variable $_POST. Une astuce en passant : pour scuriser lacquisition des donnes, il est conseill de contrler le type de ces donnes.Ici, id est cens tre un nombre, cestdire de type numrique.On peut donc encadrer le code dans un bloc if(is_numeric($_GET['id'])).

9 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

Etape 4: Recherche dans la base de donnes


de voir.Comme il est inutile que je me rpte, je ne fournirai pas de code complet.

Pour rechercher dans la base de donnes, il faut utiliser un peu toutes les notions que nous venons

La premire tape est de crer un formulaire.La seconde tape est de crer un chier PHP qui rcupre les donnes de ce formulaire.La troisime tape est la formation de la requte SQL partir des donnes rcupres. La requte de recherche se construit exactement comme expliqu dans lexemple cidessus.En eet, nous avons recherch tous les enregistrements dont lid est XX. Lid tant une valeur unique, il ny a forcment quun seul rsultat ! La recherche exacte se construit ainsi: SELECT * FROM mabase WHERE nom_colonne = Y. Le caractre * implique que lon veut toutes les colonnes dans les rsultats. Si lon ne veut que certaines colonnes, il sura dcrire leurs noms spars de virgules. Y correspond ce que lon veut rechercher. La recherche approximative se construit de cette manire: SELECT * FROM mabase WHERE

nom_colonne LIKE %S. On recherche ainsi toutes les entres qui nissent par S. Le symbole
% est un marqueur gnrique. Par exemple, si jcris Constit%, me seront renvoys aussi bien Constitution que Constitutionnel ou Constitutionnellement. La quatrime tape est lachage des rsultats. Vous pouvez reprendre le code dachage en liste et remplacer la requte SQL de ce code par la nouvelle requte SQL de recherche que vous venez de gnrer.

Etape 5: Modier et supprimer une entre de la base de donnes


modier ou supprimer comme expliqu ciavant, et construire la requte SQL correspondante. Pour mettre jour, le mot cl SQL est UPDATE: UPDATE mabase SET nom=$nom, prenom=$prenom, date=$date WHERE id=$id. Pour supprimer une entre, le mot cl SQL est DELETE: DELETE FROM mabase WHERE

Encore une fois, les mcanismes sont les mmes. Il vous faut rcuprer lid de lenregistrement

id=$id.

Bonus: Scuriser laccs la base de donnes

Il existe de nombreuses mthodes pour scuriser laccs aux donnes, et notamment: les htaccess, le cryptage et les sessions PHP. Je vais dvelopper ici les sessions PHP. Le principe est le suivant: ladministrateur de la base de donnes dnit qui peut y accder en dnissant des couples login / mot de passe; et toute personne dsirant utiliser la base de donnes devra saisir un des couples dnis par ladministrateur. Les sessions PHP sont trs pratiques. Elles reposent sur un principe simple: le tableau $SESSION[] est cr et stock sur le serveur. Il peut contenir nimporte quel type de donnes. De plus, il est statique. Cela signie quil est accessible dans nimporte laquelle de vos pages (classes) PHP sans avoir tre redclar. Il nest pas non plus rinitialis dune page une autre. Pour le rinitialiser, deux mthodes: soit en crivant $SESSION[] = array();, soit simplement en quittant votre navigateur ! Pour commencer, on cre les couples. Le premier login est Martin, et il est associ au mot de passe abc. De mme pour les autres couples.

1. $admin_array = array('Martin' => 'abc', 'Dupont' => 'def', 'Robert' => 'ghi');
On ouvre ensuite la session en crivant session_start(); au dbut de nos chiers PHP. On cre un formulaire, avec un champ de texte pour le login, un champ de texte pour le mot de passe, et un bouton pour envoyer les rsultats avec la mthode POST. Puis, on rcupre les valeurs soumises par le biais du formulaire dans une fonction qui les analyse et les compare aux valeurs de

10 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

$admin_array. Cette fonction pourrait tre construite ainsi: 1. foreach($admin_array as $logg => $passwd) 2. { if($_POST['login'] == $logg AND $_POST['password'] == $passwd) 3. { $_SESSION['identifie'] = 1; 4. return; 5. } 6. }
Il nous faut maintenant crer une autre fonction qui vrie si lutilisateur est enregistr, cestdire si $_SESSION['identie'] est gal 1. Si cest le cas, la fonction renverra la valeur true, et elle renverra false dans tous les autres cas. A chaque fois que vous voudrez savoir si lutilisateur est identi, vous pourrez appeler la fonction suivante et vrier la valeur quelle retourne.

1. function checkauth() 2. { if($_SESSION['identifie'] == 1) return true; 3. else return false; 4. }


Dernire tape: on utilise la fonction checkauth() avant dacher un quelconque contenu, et avant dexcuter une quelconque opration. Pour cela, on englobe les codes vus dans cet article dans une instruction ifelse. Si la fonction renvoie true, on peut acher les donnes, sinon non. A noter que if(checkauth()) est quivalent if(checkauth() == true).

1. 2. 3. 4. 5. 6. 7. 8.

if(checkauth()) { // n'importe quelle opration sur la base de donne } else { // le code qui correspond au formulaire d'identification }

A Ledenon, le 25/09/2005 Mis jour Montpellier le 21/12/2005 Mis jour Paris le 11/04/2009
Tagged as: bases de donnes, Internet, programmation, serveur, Web

{ 48 comments read them below or add one }


GF
October 19, 2005 at 0:16

Je suis dispo pour vos ractions et/ou questions, tout le support ncessaire sur le code source de ce tuto et sur sa mise en oeuvre. Ajoutez vos commentaires !
REPLY

Laurent

July 22, 2007 at 17:07

Salut et dabord un grand merci pour tout ce boulot!!! En revanche je bloque sur le passage concernant les boucles. Pour une boucle comme celle ci pas de problme, mais pour une sur plusieurs ligne? Je mexplique: mettons que je veuilles acher les avatars des derniers membres inscrit sur 3 colonnes et 3 lignes. Chaque ligne comprend donc trois avatars. Mais si je me base sur lexemple donn dans le tutorial, lavatar portera par exemple le nom id_avatar et sera mis dans la premire celulle de la premire ligne. Du coup il ne peut pas tre rpliquer aprs non??? Cest moi qui nest pas compris ou cest une limite? (en gros je veux dire quavec lexemple du tuto le tableau vas soit sur les cot soit vers le bas, mais pas les deux). Merci
REPLY

11 sur 12

18/Jan/2012 10:04 AM

Construire une base de donnes simple avec PHP et MySQL Valhalla

http://www.valhalla.fr/2005/09/25/construire-une-base-de-donnees-simpl...

Laurent

July 22, 2007 at 17:55

Oups, jai oubli de donn la solution trs trs couteau suisse que jai trouv pour rgler a: Mettre l avatar dynamique dans la premire celulle puis jouer avec les limites.Donc le premier contient seulement order by desc, le deuxime avatar a en plus limit 1,1, le deuxime limit 2,2 Voila, je sais a fait bq de requtes mais c bien pour rgler a que je pose ma question est prcdente! Encore merci et vive V

12 sur 12

18/Jan/2012 10:04 AM