Page 1 sur 2

upload d'image

Posté : 22 nov. 2006, 19:29
par Mimos@
Je vous sollicite pour un problème. Est-il possible de choisir le dossier ou l'on veux que l'image s'enregistre.
Je m'explique : dans un dossier image j'ai un dossier dbz, fma, naruto. Puis-je en fonction
d'une liste déroulante choisir un des trois dossiers ?
J'ai essayer comme ceci :
<?php
if(isset($_FILES['photo']) && isset($_POST['manga']))
{
  $lequel = $_POST['manga'];
  $dossier = '/mnt/112/free.fr/b/c/snshinobi/images/$lequel';
  $dir_mini = '/mnt/112/free.fr/b/c/snshinobi/images/mini/$lequel';
  $fichier = $_FILES['photo']['name'];
  $taille_fichier = $FILES['photo']['size'];
  if(substr($fichier, -3)=="jpg" || substr($fichier, -3)=="gif" || substr($fichier, -3)=="png")
  {
    if($taille_fichier <= 4194304)
    {
      if (is_file('/mnt/112/free.fr/b/c/snshinobi/images/$lequel'.$_FILES['photo']['name'])) $file_upload = '_'.$_FILES['photo']['name'];
      else $file_upload = $_FILES['photo']['name'];
      if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier.'/'.$file_upload))
      {
        echo 'Upload réussi';
          }
      else
      {
        echo 'Erreur dans upload';
      }
   }
   else
   {
     echo 'l image est trop grande. taille maxi 4mo';
   }
 }
 else
 {
   echo 'le fichier n\'est pas une image';
 }
}
?>
<html>
<body>
<form method="post" action="upload.php" enctype="multipart/form-data">
<p><input type="hidden" name="MAX_FILE_SIZE" value="4194304" /></p>
<fieldset>
<legend>Envoi de fichier</legend>
<p>Les formats : jpg, gif, png. Le bmp n'est pas autoriser. Taille maxi est de 4mo</p>
<p><label for="photo">Image: </label><input type="file" name="photo" id="photo" /></p>
   <p>
       <label>
           Choisir un manga ?<br />
           <select name="manga">
               <option value="dbz">Dragon-ball</option>
               <option value="fma">Fullmetal A.</option>
               <option value="naruto">Naruto</option>
           </select>
       </label>
   </p>
<p><input type="submit" value="Envoyer" /></p>
</fieldset>
</form>
</body>
</html>

Posté : 22 nov. 2006, 19:55
par Spols
Le principe d'upload, c'est que le fichier est mis dans un repertoire temporaire, et que c'est à toi de le déplacer où tu veux par aprés

Quelle erreur te donne ce script, que fait il que tu ne veux pas qu'il fasse ??

Posté : 22 nov. 2006, 20:04
par Mimos@
En faite, je veux en fonction de la sélection dans la liste déroulante déplacer le fichier dans un dossier en rapport avec la selection de la liste. C'est pas très claire.
Voici un exemple :
si dans la liste déroulante je choisie dbz, je veux que l'image se déplace dans le dossier images/dbz. si je choisie fma, je veux que l'image se déplace dans le dossier images/fma.

Posté : 23 nov. 2006, 00:22
par Spols
j'ai trés bien compris ce que tu cherche à faire, mais pourquoi ton script ne marche pas, on ne peut pas le deviner, il est bien penser. lorsque tu le fait tourner et que tu le test as-tu des messages d'erreur ou bien un résultat auquel tu t'attend pas qu'on puisse commencer à comprendre ton problème

Posté : 23 nov. 2006, 00:33
par DocType
Pour ma part ton script est plus ou moins correct : il n'est pas tout à fait sécurisé !
Mais avant de voir ce soucis, où se pose ton problème ?
As-tu un message d'erreur ? :wink:

Posté : 23 nov. 2006, 01:00
par fab
Avant tout :
remplace :
 $dossier = '/mnt/112/free.fr/b/c/snshinobi/images/$lequel';
  $dir_mini = '/mnt/112/free.fr/b/c/snshinobi/images/mini/$lequel';
par :
 $dossier = '/mnt/112/free.fr/b/c/snshinobi/images/'.$lequel;
  $dir_mini = '/mnt/112/free.fr/b/c/snshinobi/images/mini/'.$lequel;
Il faut a tout prix éviter de mélanger les variables avec le "texte" ! :p

Posté : 23 nov. 2006, 01:47
par DocType
Bien Fab, mais j'aurai placé ça au second plan : optimisation :wink:
J'ai beau chercher, je comprend pas quel prob il peut avoir, surtout si il ne nous aiguille pas ? une idée ?

Note : vu qu'on optimise en attendant d'avoir plsu d'infos, faudrait mieux qu'il fasse un switch pour manga, on peut facilement détourner le dossier sinon... :wink:

Posté : 23 nov. 2006, 22:47
par Mimos@
$dossier = '/mnt/112/free.fr/b/c/snshinobi/images/'.$lequel;
$dir_mini = '/mnt/112/free.fr/b/c/snshinobi/images/mini/'.$lequel;
Merci fab. J'ai essayer ceci et maintenant sa marche très bien.
Mon problème était qu'il ne voulait pas déplacer l'image car ma variable ne marcher pas.

Code : Tout sélectionner

if (is_file('/mnt/112/free.fr/b/c/snshinobi/images/$lequel'.$_FILES['photo']['name'])) $file_upload = '_'.$_FILES['photo']['name']; else $file_upload = $_FILES['photo']['name']; if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier.'/'.$file_upload)) {
J'obtenais une erreur dans mon upload à cause du chemin.
Mon problème est donc maintenant résolue.
il n'est pas tout à fait sécurisé
A bon ? peux-tu m'en dire plus ? merci.
faudrait mieux qu'il fasse un switch pour manga, on peut facilement détourner le dossier sinon
Même chose, si on pouvait m'éclairer.

Je m'excuse je ne pouvais répondre avant.

Posté : 23 nov. 2006, 23:12
par fab
En fait tu ne vérifie pas le contenu de ta variable $_POST['manga'] je n'ai pas vraiment pris le temps de comprendre ton code mais cette variable devrait contenir le nom d'un fichier ou d'un répertoire, il faut vérifier l'existence de ce fichier ou de ce répertoire.

Posté : 23 nov. 2006, 23:14
par DocType
Déjà ce qu'à it Fab ! Mais imagine que tu as un répertoire images qui contient les images de ton site, qu'un mec à la bonne idée de détourner ton formulaire en envoyant $_POST['manga'] valant "images" et que dedans il place le fichier head.jpg, il pourrait par exemple remplacer ton header de site...

Posté : 23 nov. 2006, 23:22
par fab
Au passage remplace aussi :
if (is_file('/mnt/112/free.fr/b/c/snshinobi/images/$lequel'.$_FILES['photo']['name'])) $file_upload = '_'.$_FILES['photo']['name']; 
par
if (is_file('/mnt/112/free.fr/b/c/snshinobi/images/'.$lequel.$_FILES['photo']['name'])) $file_upload = '_'.$_FILES['photo']['name']; 
Sortir les variables du texte est une rigueur qui évite toujours les problèmes.

Posté : 23 nov. 2006, 23:23
par Mimos@
OK merci pour tout. Je vais modifier cela.
On peux mettre mon sujet résolu.

Posté : 23 nov. 2006, 23:29
par fab
Faudra aussi penser a t'inscrire ça évitera aux modérateurs d'intervenir pour mettre le tag résolu :p
De plus si tu as questions sur la sécurité tu es bienvenue ici c'est un sujet ou mes compétences sont limités mais cela reste tres intéressant et il y a du monde qualifié pour répondre.

Posté : 24 nov. 2006, 21:01
par Mimos@
Bon voila, j'ai franchi le pas, me suis inscrit.
Il est vrai que niveau sécurité j'ai vraiment du mal. et si quelqu'un avait quelque solution.
N'en serait-elle pas une que de renommer le fichier à l'upload ? de plus se serait plus simple pour s'y retrouver en les nomment par exemple, 01.jpg, 02.jpg, 03.png.......
<?php
if(isset($_FILES['photo']) && isset($_POST['manga']))
{
  $lequel = $_POST['manga']; 
  $dossier = '/mnt/112/free.fr/b/c/snshinobi/images/'.$lequel.'/';
  $dir_mini = '/mnt/112/free.fr/b/c/snshinobi/images/mini/'.$lequel.'/';
  $fichier = $_FILES['photo']['name']; 
  $taille_fichier = $FILES['photo']['size'];
  
  if(substr($fichier, -3)=="jpg" || substr($fichier, -3)=="gif" || substr($fichier, -3)=="png")
  {
    if($taille_fichier <= 4194304)
    { 
      if (is_file('/mnt/112/free.fr/b/c/snshinobi/images/'.$lequel.'/'.$_FILES['photo']['name'])) $file_upload = '_'.$_FILES['photo']['name'];
      else $file_upload = $_FILES['photo']['name'];
      if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier.'/'.$file_upload))
      {
        echo 'Upload réussi';
		
		
		$largeurDestination = 150;
        $hauteurDestination = 150;
	    $miniature = "mini_$fichierSource";
        If (substr($fichier, -3)=="gif")
	    {
          // ceci est une image GIF
	      $image1=imagecreatefromgif($dossier.'/'.$file_upload);
	      $image2=imagecreatetruecolor($largeurDestination, $hauteurDestination);
          $largeurSource = imagesx($image1);
          $hauteurSource = imagesy($image1);
	      imagecopyresized($image2, $image1, 0, 0, 0, 0, $largeurDestination-(2*8), $hauteurDestination-(2*8),   	$largeurSource, $hauteurSource);
	      imagegif($image2, $dir_mini.'/'.$file_upload);
		  echo "<br />Image miniature générée: $miniature";
    	}
    	elseif (substr($fichier, -3)=="jpg")
	    {
	      // ceci est une image JPG
	      $image1=imagecreatefromjpeg($dossier.'/'.$file_upload);
	      $image2=imagecreatetruecolor($largeurDestination, $hauteurDestination);
          $largeurSource = imagesx($image1);
          $hauteurSource = imagesy($image1);
    	  imagecopyresized($image2, $image1, 0, 0, 0, 0, $largeurDestination-(2*8), $hauteurDestination-(2*8),   		$largeurSource, $hauteurSource);
    	  imagejpeg($image2, $dir_mini.'/'.$file_upload);
		  echo "<br />Image miniature générée: $miniature";
    	}
    	elseif (substr($fichier, -3)=="png")
	    {
    	  // ceci est une image png
	      $image1=imagecreatefrompng($dossier.'/'.$file_upload);
	      $image2=imagecreatetruecolor($largeurDestination, $hauteurDestination);
          $largeurSource = imagesx($image1);
          $hauteurSource = imagesy($image1);
	      imagecopyresized($image2, $image1, 0, 0, 0, 0, $largeurDestination-(2*8), $hauteurDestination-(2*8),   	$largeurSource, $hauteurSource);
	      imagepng($image2, $dir_mini.'/'.$file_upload);
          echo "<br />Image miniature générée: $miniature";	   
    	}
		
		
      }
      else
      {
        echo 'Erreur dans upload';
      }
   }
   else
   {
     echo 'l image est trop grande. taille maxi 4mo';
   }
 }
 else
 {
   echo 'le fichier n\'est pas une image';
 }
}
?>
faudrait mieux qu'il fasse un switch pour manga, on peut facilement détourner le dossier sinon
un switch pour manga ? je le passe par une liste déroulante.[/code]

Posté : 24 nov. 2006, 23:29
par DocType
Ce n'est parce que ta liste déroulante est correcte qu'on ne peut pas la détourner ! Il faut se mettre dans la tête que tout ce qui est passé par formulaire, url ou cookie est non securisé.

Imagine mon script hebergé sur mon site ou totu simplement sur mon pc...

Code : Tout sélectionner

<form method="post" action="http://www.tonurl.com/upload.php" enctype="multipart/form-data"> input type="file" name="photo" id="photo" /></p> <select name="manga"> <option value="images">Dragon-ball</option> </select> <input type="submit" value="Envoyer" /> </form>
Si je me trompe pas avec ça je fous un bordel phénoménal :roll:

et effectivement il serait judicieux de renommer les fichiers (en tout cas moi je le fais par défaut)