Upload d'images valides qui ne se produit pas

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Upload d'images valides qui ne se produit pas

par Victor BRITO » 02 nov. 2006, 18:50

Salut, Ryle!

Finalement, en corrigeant le chemin du répertoire destinataire et modifiant le code comme suit:
<?php 
if (is_uploaded_file($_FILES['image']['tmp_name']) && eregi("gif|jpg|png", $_FILES['image']['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']['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']['name'], -4));
      $miniature='miniature-'.url($menu_intitule).strtolower(substr($_FILES['miniature']['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'].$repertoire_destinataire.$image);
      move_uploaded_file($_FILES['miniature']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].$repertoire_destinataire.$miniature);
      if (mysql_insert_id()==0){
?>
    <p>Le nouveau menu n'a pas pu &ecirc;tre ins&eacute;r&eacute;. Veuillez r&eacute;essayer plus tard.</p>
<?php 
      }
      else{
?>
    <p>Le nouveau menu a &eacute;t&eacute; ins&eacute;r&eacute; avec succ&egrave;s.</p>
<?php 
      }
    }
?>
Je suis parvenu à mes fins. :)
Joyeux centième message, joyeux centième message, joyeux ceeeeentième message, joyeux centième meeesssagggeeuuhh !!
Merci. :wink:

par Ryle » 02 nov. 2006, 18:26

Joyeux centième message, joyeux centième message, joyeux ceeeeentième message, joyeux centième meeesssagggeeuuhh !!

Faut procéder par étape... dans quel cas est ce que tu peux avoir ce message ?
> Quand au moins une des conditions du if n'est pas remplie

Quelles sont les conditions qui doivent être remplies
> Est ce que $_FILES['image']['tmp_name'] a bien été uploadé ?
> Est ce que le nom temporaire de l'image contient la chaine "gif", "jpg" ou "png" ? (et en général les fichier temporaire ont des noms temporaires, donc pas d'extension, à ta place je commencerais par regarder de ce côté là)
> Est ce que image_largeur($_FILES['image']['tmp_name']) est inférieur à 400 ?
> Est ce que le poids du fichier $_FILES['image']['tmp_name'] est inférieur 2048000 ?
> Même questions pour $_FILES['miniature'] ?

Affiche les valeurs (voire les tests) dans ces cas là, tu verras tout de suite l'erreur apparaitre :
echo eregi("gif|jpg|png", $_FILES['image']['tmp_name']); // si ca ne retourne pas 1/vrai
echo $_FILES['image']['tmp_name']; // et tu seras fixé :)

Upload d'images valides qui ne se produit pas

par Victor BRITO » 02 nov. 2006, 18:12

Salut à tous!

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&eacute;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 &ecirc;tre ins&eacute;r&eacute;. Veuillez r&eacute;essayer plus tard.</p>
<?php 
      }
      else{
?>
    <p>Le nouveau menu a &eacute;t&eacute; ins&eacute;r&eacute; avec succ&egrave;s.</p>
<?php 
      }
    }
    else{
?>
    <p>Le nouveau menu n'a pas pu &ecirc;tre ins&eacute;r&eacute;.
V&eacute;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&eacute;er un autre menu</a></li>
      <li><a href="admin.php?tache=menus-apercu">Retour &agrave; l'aper&ccedil;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&eacute; 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&eacute;s du menu
(&agrave; saisir sans caract&egrave;re sp&eacute;cial
 en les s&eacute;parant par une virgule et un espace, comme suit&nbsp;: 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 &ecirc;tre au format .gif, .jpg ou .png et avoir une largeur de 400 pixels maximum
 et ne doit pas exc&eacute;der 2 Mo)</p>
      <p><input class="upload" name="image" type="file" /></p>
      <p>Miniature du menu
(elle doit &ecirc;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&eacute;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".