
Le but de ce tutoriel va être de reprendre le tutoriel « Galerie Snoupix Flip » réalisé en Jquery et d'en faire une galerie dynamique avec une petite interface d'administration pour gérer chaque photo. Au programme, vous allez essentiellement travailler avec l'upload d'image en PHP, l'insertion, la sélection et la suppression de données dans une table MySQL. C'est parti...
Chaque image aura donc comme information: un identifiant unique, un nom et le lien de son image sur le serveur. Ces informations seront inscrites dans la base de données, tandis que l'image et sa miniature seront dans un dossier "images" de votre serveur. Voici le script SQL que vous pouvez éxécuter directement dans PHPMyAdmin (généralement PhpMyadmin se trouve à cette adresse: http://localhost/phpmyadmin/, si vous travaillez en local)
La base de données s'appelle donc "galerie", et la table se nomme "images". L'identifiant ('id') créé est unique et s'incrémentera automatiquement lors de chaque ajout d'images.
Tout d'abord spécifions l'arborescence de nos fichiers. J'ai crée pour cette petite application 3 dossiers:
Nous allons créer l'ossature de notre page HTML ("admin.php") situé à la racine de notre projet en utilisant pour l'instant que de l'HTML avec un peu de CSS, histoire de rendre les choses agréables à regarder.
Voilà pour l'HTML, vous pouvez noter dans la balise form, l'attribut enctype dont la valeur est "multipart/form-data" : Cela signifie que le formulaire encode les données de votre formulaire, cela est indispensable pour uploader des images.
Sinon Le tableau est pour l'instant vide car il sera remplit dynamiquement en PHP/SQL par la suite. Voici le fichier CSS ("css/admin.css"), histoire de rendre ce tuto moins monotone ^^.
Maintenant, attaquons le coeur de notre problème et commencons par traiter les données de notre formulaire. Le script PHP se trouvera au tout début de notre page "admin.php", tout simplement parce que l'on a spécifié cette page dans l'attribut action du formulaire. Sachez que pour récupérer une image, il existe une variable appelée "superglobale" $_FILES['nomdevotreinput'] qui fonctionne de la même manière qu'une variable de type $_POST ou $_GET. Maintenant voyons le code avant de rentrer dans les détails:
Vous pouvez noter l'inclusion d'un script PHP ("params.inc.php"), au tout début du programme, celui-ci possède les renseignements pour la connexion à la Base de données et contiendra probablement ceci si vous travaillez en local:
Dans un premier temps, nous vérifions si la variable $_POST['nom'] existe et n'est pas vide, auquel cas nous éxécutons la suite du script sinon rien ne se passe. Ensuite nous créons une variable $nom qui reprend la variable du formulaire en la nettoyant un peu à l'aide des fonctions trim() qui enlève les espaces au début et en fin de variable et de la fonction mysql_escape_string() qui assure un minimum de sécurité lors de l'insertion de la variable dans la requête SQL. Comme je l'ai dit auparavant, pour récupérer un fichier d'un formulaire la variable $_FILES est indispensable. Celle_ci est en fait comme $_POST, un tableau associatif avec comme clé la valeur de l'attribut "name" de notre formulaire (ici "image1" par exemple). Cette variable est assez intéressante car elle nous propose aussi plusieurs propriétés de l'élément uploadé disponible de cette façon:
Par la suite, on vérifie donc les images uploadées (si elles ont un nom et un type valide). Pour la validation des types j'utilise la fonction in_array() qui renvoit true si la chaîne passée en premier paramètre correspond à un élément du tableau.
La fonction copy(), comme son nom l'indique copie juste un fichier, en indiquant en 1er paramètre le fichier source, et en 2ème paramètre, la destination. Pour finir on éxécute une requête SQL de type INSERT INTO, avec comme valeurs le nom de l'image et son lien.
Comme vous avez pu le voir, j'ai crée un tableau d'erreurs qui se remplit si le formulaire est mal complété, j'utilise un tableau et non une chaîne, par simple habitude, ici une chaîne aurait suffit. Mais s'il existe plusieurs types d'erreurs, il est intéressant de pouvoir les avoir sous forme de tableau.
Pour afficher ce tableau correctement je vous propose de placer ce code juste avant le formulaire:
Et avec un peu de CSS pour que tout soit joli:
Vous pouvez dorénavant uploader des images sur votre serveur. La prochaine étape consistera à pouvoir les voir et les supprimer à partir de votre tableau.
Notre but est maintenant de remplir le tableau, il faudra donc placer le prochain script juste après la balise fermante </tr>
Ce script n'est pas très compliqué et reprend beaucoup de fonctions déjà utilisées auparavant. Pour afficher toutes les lignes de notre requête, nous avons besoin de réaliser une boucle while qui éxécute la fonction mysql_fetch_array(). Celle-ci permet de séléctionner les données d'une ligne et de les insérer dans un tableau jusqu'à ce qu'il n'y en ai plus aucune. A noter aussi la fonction stripslashes() sur le nom de l'image, en fait cette fonction permet de supprimer les antislashs que la fonction mysql_escape_string() aura placé devant les caractères tels que " ou ' .
Pour la colonne suppression, j'utilise une URL de type "GET" qui prend en paramètre l'identifiant de l'image qu'on veut supprimer. Cela nécessite un nouveau script à placer juste avant l'affichage des lignes. Si on le place après il faudrait en fait raffraîchir la page pour ne plus voir la ligne supprimée, ce qui n'est pas très judicieux. Voici le code:
Ce bout de code permet donc de supprimer dans la base de données mais aussi de supprimer les images associées sur votre serveur! La fonction qui permet de supprimer est unlink() qui prend pour paramètre l'url relatif de votre fichier à supprimer.

L'administration est enfin terminée, on peut passer maintenant à la galerie proprement dite. Si vous n'avez pas fait le tuto sur la galerie Snoupix Flip, je vous conseille d'aller y jeter un oeil puisque je reprends exactement le même code.
J'ai tout simplement repris le code source disponible dans le tuto. En décompressant l'archive dans le dossier dans lequel nous travaillons actuellement (inutile par contre de décompresser le dossier images).
La première étape va consister à renommer l'extension de snoupixFlip.htm en snoupixFlip.php. Vous vous retrouverez donc avec cette page:
Les différentes miniatures ne nous intéressent plus dorénavant puisque nous allons tout afficher dynamiquement, ce qui nous donne maintenant ceci:
Et enfin voila la page avec le code PHP:
Ce code n'est pas non plus très difficile à appréhender si jusque là vous avez bien tout assimilé. Je remplis en fait un tableau multidimensionnel ($tableau) qui contiendra mes 2 informations essentielles, le nom et le chemin de l'image et dont leurs clés est l'identifiant de l'image.
Ensuite, afin de lister les miniatures, nous utilisons la fonction foreach() qui est une sorte de boucle qui parcourt le tableau, identifiant par identifiant.
Ce tutoriel touche à sa fin, j'espère qu'il vous aura appris certains trucs et qu'il pourra vous donner certaines idées. En tout cas le script final est biensûr à améliorer sur divers points (recadrage dynamique de la miniature, Modification des noms d'image, etc).
tcho