Nom de la page: BDDPhotos_admin_add_img.php.
Nous pouvons maintenant nous attaquer à la page d'administration permettant de remplir les rubriques avec nos images. Pour cela nous avons besoin du chemin des images et du nom de la rubrique dans laquelle les insérer, ce qui nous donne le formulaire suivant:
Vous pouvez également rajouter un champ description comme nous l'avons fait précédemment pour les rubriques.
La liste déroulante contient toutes les rubriques que nous avons créées. Pour la remplir, il va nous falloir interroger la base de données et générer le fomulaire d'après les résultats obtenus. Nous allons donc utiliser la fonction "mysql_fetch_array" qui retourne un tableau contenant la ligne demandée dans le résultat de la requête $result et se place automatiquement à l'enregistrement suivant. Le formulaire contenant la liste déroulante est créé par le script suivant:
echo "<form action='BDDPhotos_admin_add_img.php'
enctype='multipart/form-data'
method='post'>
Répertoire des images:<br/>
<input type='text' name='frm_files_folder' size='40'
value='../photos'/>
<br/><br/>
Rubrique: ";
$query = "SELECT RubriqueID, RubriqueName FROM Rubrique
ORDER BY RubriqueName DESC";
$result = mysql_query($query) or die("ERROR");
echo "<select name='frm_select_rubrique'>";
$Selected = 0;
while ($row = mysql_fetch_array($result))
{
if($Selected == 0)
{
echo '<option value="', $row[0], '" selected="selected">', $row[1],
'</option>';
$Selected = 1;
}
else
{
echo '<option value="', $row[0], '">', $row[1], '</option>';
}
}
echo "</select>
<br/><br/>
<input type='submit' value='Ajouter images'/>
</form>";
Créez un répertoire temporaire (temp dans photos par exemple) et placez y les images à ajouter à la rubrique. Saisissez ce chemin dans le champ répertoire (pour notre exemple ../photos/temp sur un serveur ou c:\photos\temp en local). Ce chemin est vérifié afin de s'assurer qu'il s'agit bien d'un répertoire. La fonction "is_dir" nous permet d'effectuer cette vérification:
$FilesFolder = $_POST['frm_files_folder'];
// Ajoute / à la fin du chemin du répertoire si manquant
if (substr($FilesFolder, -1) != "/")
$FilesFolder = $FilesFolder."/";
// Vérifie que le chemin correspond bien à un répertoire
if (!is_dir($FilesFolder))
{
echo "ERROR";
return;
}
Il nous suffit maintenant de lire le contenu du répertoire et d'en extraire les images. Pour cela, nous allons utiliser les fonctions "opendir" et "closedir" permettant d'obtenir un descripteur sur le répertoire et de le libérer, "readdir" permettant de lire le contenu d'un répertoire et "copy" permettant de copier un fichier.
Les images seront copiées dans le répertoire de la rubrique correspondante, obtenue depuis la liste déroulante. Nous auront également besoin de l'identifiant de la rubrique ($RubriqueID) facilement récupérable par une simple requête portant sur le nom de celle-ci ou par l'index de la liste déroulante ($RubriqueID = $_POST['frm_select_rubrique'];) et de son nom ($RubriqueName). La fonction de récupération et d'ajout des images se présente donc ainsi:
$handle = opendir($FilesFolder);
if ($handle == 0)
{
echo "ERROR";
return;
}
// Saute le . et le ..
readdir($handle);
readdir($handle);
// Parcours les images
while (($fichier = readdir($handle)) !== false)
{
// TODO: Vérifier ici que l'extension du fichier correspond à une image
// Copie les images du repertoire temporaire vers le répertoire images
if (!copy($FilesFolder.$fichier, "../photos/".$RubriqueName."/".$fichier))
{
echo "ERROR";
}
// TODO: Récupérer les informations sur l'image (taille, dimensions, ...)
// Ajoute l'image à la base de données
$Date = date("Y-m-d");
$Time = date("H:i:s");
$query = "INSERT INTO Image SET
ImageID='NULL',
RubriqueID='$RubriqueID',
ImageName='$fichier',
ImageDesc='',
ImageRes='',
ImageSize='',
Date='$Date',
Time='$Time'";
$result = mysql_query($query);
}
closedir($handle);
De nombreuses informations peuvent être obtenues depuis le fichier image: les fonctions "ImageCreateFromJPEG", "imagesx" et "imagesy" permettent de récupérer sa résolution par exemple, de même que la fonction "filesize" permet de récupérer sa taille.
Certains serveurs ne permettent pas de longs temps d'exécution pour les scripts. Pour un nombre d'image important, ce script d'ajout d'images sera donc refusé. Il ne vous restera plus alors qu'à exécuter la requête seule dans le script et à copier les images manuellement.
Pour permettre un affichage plus rapide de l'ensemble d'une rubrique de l'album photos, nous allons associer à chaque image une imagette, correspondant à l'image originale réduite. Par convention, nous nommerons ces imagettes min_nomdelimage.jpg. Vous pouvez redimentionner les images à l'aide d'un logiciel et copier les imagettes obtenues dans le répertoire de la rubrique ou modifier le code pour créer les imagettes automatiquement à l'ajout des images.

Tweeter