Connexion à une base de données avec PHP

Licence Informatique, semestre 6

Jean-Marc LecarpentierPascal Vanier

Enseignement des technologies du Web

 

Connexion à une base de données avec PHP

Notes de cours

Travail personnel

Objectifs

  • Manipuler une base de données en lecture depuis un script PHP avec PDO.
  • Se confronter à l'écriture de scripts pour un site de plusieurs pages.

Exercice 1 — Galerie d’images #

Cet exercice vise à découvrir le fonctionnement de PDO en affichant une galerie d'images cliquables.

Description de la base et mise en place

Les informations sur les images à afficher sont dans une table images en base de données. Les images elles-mêmes ne sont pas dans la base de données : elles sont hébergées par Flickr. La description de la table est la suivante :

mysql> desc images;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| id             | int(11)      | NO   | PRI | NULL    | auto_increment |
| title          | varchar(255) | YES  |     | NULL    |                |
| creation_date  | datetime     | YES  |     | NULL    |                |
| thumb_url      | varchar(255) | YES  |     | NULL    |                |
| image_page_url | varchar(255) | YES  |     | NULL    |                |
| author_name    | varchar(255) | YES  |     | NULL    |                |
| author_url     | varchar(255) | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

Il y a trois URL :

  • thumb_url est celle de la miniature (thumbnail) de l'image,
  • image_page_url est celle de la page Flickr de l'image,
  • author_url est celle de la page Flickr de l'auteur.

NB : il n'y a pas d'URL de l'image en grand format, on n'utilise que la miniature dans cet exercice.

Le fichier images.sql contient le code SQL permettant de créer et remplir cette table.

Galerie

Préparation de la base de données

IMPORTANT le mot de passe initial de votre BD est dans le répertoire Protected de votre répertoire par défaut (/home/etudiants/NUMETU/Protected/mysql.txt).

Ne PAS utiliser phpmyadmin dans votre navigateur.

Si vous utilisez votre compte mySQL pour la première fois, il faut au préalable créer une base de données. Pour cela, se connecter (mysql -p) et créer la base (create database NUMETU_bd).

  1. Enregistrez le fichier images.sql
  2. Ouvrez un terminal à partir du dossier qui contient le fichier images.sql
  3. Pour importer les données dans votre base, utiliser la commande :
    mysql -p NUMETU_bd < images.sql (cette commande dit à mysql d'importer le contenu du fichier dans la base spécifiée NUMETU_bd - ou autre suffixe si besoin)
  4. Vous pouvez maintenant à nouveau vous connecter à mysql :
    mysql -p NUMETU_bd
    La commande show tables; doit vous afficher une table images

La FAQ du département donne d'autres détails sur l'utilisation des bases de données

Programmation PHP
  1. Dans un script galerie.php, créer une instance de PDO qui se connecte à la base.
  2. Afficher une liste des titres de toutes les images de la base. Si rien ne fonctionne, vérifiez que vous avez bien activé la gestion des erreurs par exceptions !
  3. Modifier le code pour qu'il affiche la miniature de l'image à côté de chaque titre.
  4. (Optionnel) Ajouter un peu de CSS pour que la liste ressemble davantage à une galerie. (Ne pas y passer plus de cinq minutes, ce n'est pas l'objet de l'exercice !)

Pages individuelles des images

On va maintenant faire un autre script permettant d'avoir une page pour chaque image, avec un peu plus d'infos.

  1. Pour commencer, ajouter à chaque image un lien vers image.php?id=34 (avec à la place de 34 l'identifiant de l'image).
  2. Créer le script image.php, qui affiche toutes les infos sur l'image dont l'identifiant a été passé en paramètre : titre, miniature, lien vers la page Flickr de l'image, date, et nom de l'auteur avec un lien vers sa galerie Flickr. NB : on n'affichera pas l'image en taille réelle (son URL n'est pas stockée dans notre base), c'est un peu bizarre de n'avoir que la miniature mais c'est comme ça.
  3. Y a-t-il des redondances de code entre les deux scripts galerie.php et image.php ? Si oui, essayez de mutualiser les parties communes dans un troisième fichier, qui sera inclus depuis les deux scripts.
  4. Que se passe-t-il si vous allez sur la page d'URL « image.php?id=1; DROP TABLE images; -- » ? Si ce n'est déjà fait, protégez votre BD contre les injections SQL en utilisant uniquement des requêtes préparées.

Optionnel, pour les rapides

  1. Faire en sorte qu'il soit possible de contrôler le nombre d'images affichées dans la galerie avec un paramètre size dans l'URL.

  2. Faire en sorte qu'il soit possible de contrôler quelles images sont affichées dans la galerie avec un paramètre ordre, qui modifie l'ordre d'affichage (chronologique, chronologique inverse, ou alphabétique) et des paramètres de filtrage comme avant et apres (une certaine date) ou auteur, par exemple.