Pour mon 100ème message, j'ai un site que je suis en train de refaire et qui doit comporter une interface d'administration, qui comporte, entre autres, la possibilité de créer de nouveaux menus.
La création s'effectue sous forme d'un formulaire, qui comporte deux champs pour l'upload d'images.
Voici un extrait du code que j'ai pondu.
<?php
// Vérification des dimensions de l'image lors de son chargement
function image_largeur($fichier){
list($largeur, $hauteur)=getimagesize($fichier);
return $largeur;
}
function image_hauteur($fichier){
list($largeur, $hauteur)=getimagesize($fichier);
return $hauteur;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Panneau d'administration</title>
</head>
<body id="haut">
<div id="page">
<div id="contenu">
<h2>Panneau d'administration</h2>
<h3>Création d'un nouveau menu</h3>
<?php
$menu_intitule=(isset($_POST['menu_intitule']))? encodage_html($_POST['menu_intitule']): '';
$menu_type=(isset($_POST['menu_type']))? $_POST['menu_type']: '';
$menu_description=(isset($_POST['menu_description']))? $_POST['menu_description']: '';
$menu_mot_cle=(isset($_POST['menu_mot_cle']))? encodage_html($_POST['menu_mot_cle']): '';
if (isset($menu_intitule) && !empty($menu_intitule) && isset($menu_type) && !empty($menu_type)
&& isset($menu_description) && !empty($menu_description) && ($menu_mot_cle) && !empty($menu_mot_cle)
&& isset($_FILES['image']) && isset($_FILES['miniature'])){
if (is_uploaded_file($_FILES['image']['tmp_name']) && eregi("gif|jpg|png", $_FILES['image']['tmp_name'])
&& image_largeur($_FILES['image']['tmp_name'])<=400 && filesize($_FILES['image']['tmp_name'])<=2048000
&& is_uploaded_file($_FILES['miniature']['tmp_name']) && eregi("gif|jpg|png", $_FILES['miniature']['tmp_name'])
&& image_largeur($_FILES['miniature']['tmp_name'])==60 && image_hauteur($_FILES['miniature']['tmp_name'])==40
&& filesize($_FILES['miniature']['tmp_name'])<=51200){
$image=url($menu_intitule).strtolower(substr($_FILES['image']['tmp_name'], -4));
$miniature='miniature-'.url($menu_intitule).strtolower(substr($_FILES['miniature']['tmp_name'], -4));
$requete_menu_insertion="INSERT INTO menus (image, meta_description, meta_mot_cle, miniature, nom, type_menu, url)
VALUES ('$image', '".mysql_real_escape_string($menu_description)."', '".mysql_real_escape_string($menu_mot_cle)."',
'$miniature', '".mysql_real_escape_string($menu_intitule)."', '".intval($menu_type)."', '".url($menu_intitule)."')";
mysql_query($requete_menu_insertion);
move_uploaded_file($_FILES['image']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/images/'.$image);
move_uploaded_file($_FILES['miniature']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/images/'.$miniature);
if (mysql_insert_id()==0){
?>
<p>Le nouveau menu n'a pas pu être inséré. Veuillez réessayer plus tard.</p>
<?php
}
else{
?>
<p>Le nouveau menu a été inséré avec succès.</p>
<?php
}
}
else{
?>
<p>Le nouveau menu n'a pas pu être inséré.
Vérifiez le format, les dimensions et la taille des images que vous voulez charger.</p>
<?php
}
?>
<ul class="modification">
<li><a href="admin.php?tache=menus-creation">Créer un autre menu</a></li>
<li><a href="admin.php?tache=menus-apercu">Retour à l'aperçu des menus</a></li>
<li><a href="admin.php">Retour au panneau d'administration</a></li>
</ul>
<?php
}
else{
?>
<form id="menus-creation" method="post" action="admin.php" enctype="multipart/form-data">
<p>Intitulé du menu</p>
<p><input id="menu_intitule" name="menu_intitule" type="text" value="<?php echo $menu_intitule ?>" /></p>
<p>Type de menu</p>
<p>
<select id="menu_type" name="menu_type">
<option value="1"<?php if ($menu_type==1) echo ' selected="selected"'; else echo ''; ?>>Recherche</option>
<option value="2"<?php if ($menu_type==2) echo ' selected="selected"'; else echo ''; ?>>Cybercommerces</option>
</select>
</p>
<p>Description du menu</p>
<p><textarea id="menu_description" name="menu_description" cols="50" rows="5"><?php echo $menu_description ?></textarea></p>
<p>Mots-clés du menu
(à saisir sans caractère spécial
en les séparant par une virgule et un espace, comme suit : mot-cle, autre mot-cle)</p>
<p><textarea id="menu_mot_cle" name="menu_mot_cle" cols="50" rows="5"><?php echo $menu_mot_cle ?></textarea></p>
<p>Image du menu
(elle doit être au format .gif, .jpg ou .png et avoir une largeur de 400 pixels maximum
et ne doit pas excéder 2 Mo)</p>
<p><input class="upload" name="image" type="file" /></p>
<p>Miniature du menu
(elle doit être au format .gif, .jpg ou .png et avoir une dimension de 60 pixels de largeur sur 40 de hauteur
et ne doit pas excéder 50 ko)</p>
<p><input class="upload" name="miniature" type="file" /></p>
<p><input class="validation" type="submit" value="Valider" /></p>
</form>
<?php
}
?>
</div>
</div>
</body>
</html>
Même si les images respectent les exigences du script en matière de format, de dimensions et de taille, j'obtiens le message "Le nouveau menu n'a pas pu être inséré. Vérifiez le format, les dimensions et la taille des images que vous voulez charger".