Attaquer une base de donnée est vraiment très simple en PHP, puisqu' il existe justement des fonctions élaborées dans ce but.

1- Avant propos

Version de MySQL

Ce tutorial traite de l'extension standard mysql de PHP (pas mysqli) et concerne donc MySQL versions 3.xx et 4.0 (pas 4.1 et supérieur). Un autre tutorial expliquera comment utiliser l'extension mysqli.

Création de la table

Reprenons notre table précédente :

CREATE TABLE test (
  id int(11) DEFAULT '0' NOT NULL  auto_increment,
  nom varchar(20) NOT NULL,
  email varchar(50),
  dateheure datetime,
  PRIMARY KEY (id)
);

Je vous conseille de stocker la structure de la table dans un fichier, mysql.sql par exemple, puis de l'importer depuis phpMyAdmin ou alors de taper la commande :

mysql -u utilisateur -pmotdepasse basededonnee < mysql.sql

2- Connection avec la base de données

Avant d'envoyer des requêtes à la base de données, il faut déjà s'y connecter.

Pour cela on utilise la fonction mysql_connect() :

mysql_connect(serveur, utilisateur, mot_de_passe)

La déconnection (avant la fin du script) se fait avec la fonction mysql_close() :

mysql_close()

3- Insertion de données dans la table

Une fois la base créée, vous pouvez y ajouter des données à l'aide de PHP.

Comme vu précédemment, connectez-vous d'abord avec mysql, puis sélectionnez la base sur laquelle vous voulez travailler. Envoyez ensuite des requêtes (query) à la base.

  1. <?php
  2.  
  3. switch($_POST['action'])
  4. {
  5.  
  6. // INSERTION DANS LA BASE
  7. case "inserer":
  8. // déclaration de quelques variables
  9. $host = "localhost";
  10. $user = "utilisateur";
  11. $pass = "motdepasse";
  12. $bdd = "basededonnes";
  13. $table = "test";
  14. // connection avec MySQL
  15. @mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données");
  16. // Le @ indique à php de ne pas afficher de message d'erreur
  17. @mysql_select_db($bdd) or die("Impossible de se connecter à la base de données");
  18. // affichage sélection
  19. echo '<p>Bonjour ' . htmlentities($_POST['nom']) . ', votre email est ' . htmlentities($_POST['email']) . '</p>';
  20. // stockage dans la bdd
  21. $nom = $_POST['nom'];
  22. $email = $_POST['email'];
  23. {
  24. // si php n'est pas configuré pour le faire automatiquement, on ajoute des \ devant les '
  25. // deux raisons : autoriser d'ajouter des ', et sécuriser notre requete
  26. // on y reviendra dans un prochain tutorial
  27. $nom = addslashes($nom);
  28. $email = addslashes($email);
  29. }
  30. $sql = "INSERT INTO " . $table . "(nom, email, dateheure) VALUES('" . $nom . "','" . $email . "', NOW())";
  31. $res = mysql_query($sql);
  32. // déconnection avec MySQL
  33. break;
  34. // AFFICHAGE FORMULAIRE HTML
  35. default:
  36. ?>
  37. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  38. <input type="hidden" name="action" value="inserer" />
  39. <p>Votre nom : <input type="text" name="nom" /></p>
  40. <p>Votre email : <input type="text" name="email" /></p>
  41. <p><input type="submit" name="Submit" value="Ok" /></p>
  42. </form>
  43. <?
  44. break;
  45.  
  46. }
  47.  
  48. ?>

Télécharger l'exemple en archive zip.

4- Affichage des données

Vous avez maintenant des données dans la base, il ne vous reste plus qu'à les afficher. Le principe est le même que précedemment : se connecter, puis envoyer des requêtes.

  1. <?php
  2.  
  3. $sql = "SELECT * FROM " . $table;
  4. $res = mysql_query($sql);
  5.  
  6. ?>

Cette fois-ci, par contre, la requête va vous retourner des données que vous afficherez.

Attention : la variable $res ne contient pas les données elles-mêmes, mais seulement un pointeur permettant de retrouver vos données, à l'aide d'une autre fonction.

Il existe plusieurs fonctions permettant de recupérer ces données :

1) La fonction mysql_result

  1. <?php
  2.  
  3. $nb = mysql_numrows($res); // on recupère le nombre d'enregistrements
  4.  
  5. $i = 0;
  6. while ($i < $nb){ // parcours des résultats de la requête
  7. $nom = mysql_result($res, $i, "nom");
  8. $email = mysql_result($res, $i, "email");
  9. $dateheure = mysql_result($res, $i, "dateheure");
  10. echo $dateheure . ' : ' . $nom . '(' . $email . ')<br />';
  11. $i++;
  12. } // ne pas oublier d'incrémenter $i ;) ... sinon boucle infinie !
  13.  
  14. ?>

2) La fonction mysql_fetch_array

  1. <?php
  2.  
  3. while($val = mysql_fetch_array($res)){ // parcours des resultats
  4. $nom = $val['nom'];
  5. $email = $val['email'];
  6. $dateheure = $val['dateheure'];
  7. echo $dateheure . ' : ' . $nom . '(' . $email . ')<br />';
  8.  
  9. }
  10.  
  11. ?>

NB : Il existe aussi les fonctions mysql_fetch_assoc(), mysql_fetch_object(), et mysql_fetch_row(). Je vous laisse les découvrir à l'aide de la documentation.

Quelle fonction utiliser ?

En pratique, on utilisera la deuxième méthode, c'est à dire la fonction mysql_fetch_array() (et même plutôt mysql_fetch_assoc()). Cette méthode est plus performante et plus pratique.