[php] upload d'un nombre variable de fichiers

upload d'un nombre variable de fichiers [php] - Programmation

Marsh Posté le 06-10-2001 à 00:05:58    

voila, je voudrait faire un script qui permet d'uploader un nombre de fichiers variable.
 
En clair, le gars arrive sur une page, marque dans un input text un certain nombre (au hasard 7), clique sur le bouton et est redirigé vers une page avec 7 formulaire d'upload, et bien sur de pouvoir récupéré ces fichiers avec du php
 
 
d'habitude pour mes upload j'utilise ce script :
 
<INPUT NAME="userfile" TYPE="file" size="20">
<input type="hidden" name="action" value="add">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="10000000">

(pour la parti HTML)
 
 $destination="/home/www/upload";
  if ($userfile=="none" ) {
    echo "<h2><font face=arial>Vous n'avez pas sélectionné de fichier.</font></h2>";
  }
  if ($userfile!="none" && $userfile_size!=0) {
    $userfile=stripslashes($userfile);
    if (!copy($userfile, "$destination/$userfile_name" )) {
      echo "<br>Probleme de transfert !<br>";
      exit();
    }
  }

(pour le php)
 
 
mon script pour généré un certain nombre de formulaire d'upload :
 $i=1;
  while($i<=$nbpic) {
 
?>
 
<INPUT NAME="userfile" TYPE="file" size="20">
<input type="hidden" name="action" value="add">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="10000000"><BR><BR>
 
<?php
 
  $i++;
  }

 
 
Le problème vient du faite de récupéré mes fichiers
 
je pensais utiliser une boucle avec comme limite le nombre de formulaire mais dans ce cas la faut que je donne comme nom name="userfile<?php echo $i ?>" dans mon INPUT file, mais quand je vais récupéré mes fichiers dans la parti php il me faut les variables userfile1, userfile2, userfile3, userfile4, ... or je me vois mal faire $userfile$i :pt1cable:  
 
 
 
zavez pas une idée :cry:

Reply

Marsh Posté le 06-10-2001 à 00:05:58   

Reply

Marsh Posté le 06-10-2001 à 00:20:50    

utilise $$ :
 
for ($i=0; $i<$numFiles; $i++)
{
  $fileName = 'userfile' . $i;
  $ulFileName  = 'userfile' . $i . '_name';
  // tu accèdes alors à la variable par $$fileName
  // donc un truc comme ...
  copy($$fileName, $$ulFileName);
   
}

Reply

Marsh Posté le 06-10-2001 à 00:33:09    

merçi :jap: vé essayer demain ;)
 
 
 :jap:  :jap:  :jap:

Reply

Marsh Posté le 06-10-2001 à 15:05:29    

Je viens de faire exactement la même chose...
 
Si tu veux mes codes...

Reply

Marsh Posté le 06-10-2001 à 15:14:38    

pkoi pas :) pke la le miens y merde :(
 
$destination="/home/upload";
  $i=1;
  while($i<=$nbpic) {
    $usfl="userfile".$i;
    $nmusfl="userfile".$i."_name";
    $szusfl="userfile".$i."_size";
    if ($$usfl=="none" ) {
      echo "<h2><font face=arial>Vous n'avez pas sélectionné de fichier.</font></h2>";
    }
    if ($$usfl!="none" && $$szusfl!=0) {
      $$usfl=stripslashes($$usfl);
      $final="$destination/$idart";
      $final.="_$idpage";
      $final.="_$i.jpg";
      echo "final : $final";
      if (!copy($$usfl, "$final" )) {
        echo "<br>Probleme de transfert !<br>";
        exit();
      }else{
        echo "<a name=\"deb\"></a>\n<CENTER>\n<H3><b>Les fichiers ont correctement étais u/l</b></H3>\n</CENTER>";
      }
    }
  }

 
 
il u/l bien le 1er fichier (une image pour le moment, je ferais le script d'identifacation des fichiers plus tard) mais après il foire (il fait même planté tous l'ordi avec ie :pt1cable:  :gun: )
 
 
 :??:  :??:  :??:  
 
 
mais j'suis pas contre que tu me passe ton code :jap:  :D

Reply

Marsh Posté le 06-10-2001 à 16:05:13    

Dans une première page l'utilisateur est invité à choisir un nom générique de fichiers ($nom) et le nombre de fichiers du groupe ($nbr).
 
Ensuite ces informations sont envoyées à une deuxième page qui génère dynamiquement le formulaire nécéssaire et dont voici le code:
 

Code :
  1. <FORM NAME="upload" ENCTYPE="multipart/form-data" ACTION="photos_post.php3" METHOD=POST>
  2. <input type="hidden" name="nbr" value="<?PHP echo $nbr ?>">
  3. <input type="hidden" name="nom" value="<?PHP echo $nom ?>">
  4.   <table cellspacing="0" width="100%" align="center">
  5. <?
  6. for ($i=0;$i<$nbr;$i++)
  7. {
  8. $n = $i+1;
  9. $bloc = $bloc."
  10. <tr>
  11. <td align=\"center\" class=texte width=\"30%\">Image n°$n : <BR>
  12. <input type=\"File\" name=\"userfile[]\" size=\"50\" maxlength=\"255\" Class=textzone>
  13. </tr>";
  14. }
  15. echo $bloc;
  16. ?>
  17.   </table>
  18. </form>


 
Une fois qu'il a sélectionné ses fichiers, le tout est envoyé à cette page:
 

Code :
  1. <?
  2. //traite les infos des fichiers
  3. for ($i=0;$i<$nbr;$i++)
  4. {
  5. $n = $i+1;
  6. // récupération infos fichiers uploadé
  7. $userfile = $HTTP_POST_FILES['userfile']['name'][$i];
  8. $location = $HTTP_POST_FILES['userfile']['tmp_name'][$i];
  9. // variables répertoires temporaire et final
  10. $tmpdir = "./tmp/";
  11. $dest = "./monrep/";
  12. if($userfile[1] and is_uploaded_file($location))
  13. {
  14.  // copie le fichier uploadé dans un rep temporaire
  15.  move_uploaded_file($location, "$tmpdir$nom$n.jpg" );
  16.  // effectue une série de tests sur le fichier pour voir si les conditions sont remplies
  17.  // si ce n'est pas le cas, le fichier est effacé
  18.   if (macondition) {
  19. (tu n'as pas besoin de ça)
  20.   }
  21.  // Si le résultat des tests est positif, le fichier est déplacé au bon endroit
  22.  else
  23.  {
  24.   // creation de l'image normale
  25.   copy("$tmpdir$nom$n.jpg", "$dest$nom$n.jpg" ) or die("" );
  26.   // efface le fichier temporaire
  27.   unlink("$tmpdir$nom$n.jpg" );
  28.  }
  29. }
  30. // Vérifie que le fichier existe
  31. else
  32. {
  33. die ("Le fichier n°$n n'a pas été spécifiée!" );
  34. }
  35. }
  36. ?>


 
A noter que ce script n'est fait que pour des .jpeg
 
 :hello:

 

[edtdd]--Message édité par Freekill--[/edtdd]

Reply

Marsh Posté le 06-10-2001 à 16:13:51    

Ah oui, j'oubliais la théorie:
 
Lorsque l'on veut uploader plusieurs fichiers avec un seul formulaire, le principe est de travailler avec le même nom (ex. "userfile" ) pour tous les inputs file.
 
Ensuite l'$userfile se comportera comme une array, et on l'interrogera comme telle (premier fichier = $userfile[0], 2ème fichier = $userfile[1], etc.)

Reply

Marsh Posté le 06-10-2001 à 16:52:54    

Mais qu'est ce que je suis kon :pt1cable:  
 
 
j'ai complétement oublié d'incrémenté ma valeur $i :D  
 
 
revoila mon script corrigé (plus qql truc modifié ;)) :
 
$destination="/home/www/upload";  
 $i=1;  
 while($i<=$nbpic) {  
   $usfl="userfile".$i;  
   $nmusfl="userfile".$i."_name";  
   $szusfl="userfile".$i."_size";  
   if ($$usfl=="none" ) {  
     echo "<h2><font face=arial>Vous n'avez pas sélectionné de fichier.</font></h2>";  
   }  
   if ($$usfl!="none" && $$szusfl!=0) {  
     $$usfl=stripslashes($$usfl);  
     $final="$destination/$idart";  
     $final.="_$idpage";  
     $final.="_$i.jpg";
     if (!copy($$usfl, "$final" )) {  
       echo "<br>Probleme de transfert !<br>";  
       exit();  
     }
   }
   $i++;  
 }  
echo "<a name=\"deb\"></a>\n<CENTER>\n<H3><b>Les fichiers ont correctement étais u/l</b></H3>\n</CENTER>";

 
 
j'ai essayé avec les arrays mais le script merdouillé :( alors j'ai pas cherché plus loin :D me contente de ce que j'ai fait :)
 
 
 
merçi quand même :hello:  ;)

 

[edtdd]--Message édité par Deadog--[/edtdd]

Reply

Marsh Posté le 06-10-2001 à 17:01:01    

Freekill a écrit a écrit :

Ensuite l'$userfile se comportera comme une array, et on l'interrogera comme telle (premier fichier = $userfile[0], 2ème fichier = $userfile[1], etc.)


haaa c'est trop cool ça. ça m'a inspiré pour tenter autre chose : je ne savais pas comment accéder, en javascript, à deux divs ayant le même nom (bon ok c'est pas très utile, c'est juste pour la forme).
 
he bien pareil, par un array :
 
<div id='myDiv'></div>
<div id='myDiv'></div>
 
<script>
myDiv[0].innerHTML = 'div1';
myDiv[1].innerHTML = 'div2';
 
:love: :D

Reply

Marsh Posté le 06-10-2001 à 17:04:40    

Deadog a écrit a écrit :

Mais qu'est ce que je suis kon :pt1cable:  
j'ai complétement oublié d'incrémenté ma valeur $i :D


:D
 
c'est quand même mieux d'utiliser un for dans ce cas :
 
for ($i=1; $i<=$nbpic; $i++)
{
  // ton code ...
}

Reply

Marsh Posté le 06-10-2001 à 17:04:40   

Reply

Marsh Posté le 06-10-2001 à 17:07:55    

je sais mais en ce moment je suis dans ma période while :D

Reply

Marsh Posté le 06-10-2001 à 17:11:14    

moi aussi je dois me forcer pour utiliser les for.
 
je sais pas pourquoi mais instinctivement je mets des while.

Reply

Marsh Posté le 06-10-2001 à 17:12:54    

pê pke on sait incontionnelement qu'un while va plus vite qu'un for :??:  :D

Reply

Marsh Posté le 06-10-2001 à 17:16:45    

Deadog a écrit a écrit :

pê pke on sait incontionnelement qu'un while va plus vite qu'un for :??:  :D  



:lol:
 
quand je connais toujours le nombre d'éléments à traiter, j'utilise un for
sinon, un while (genre recherche dans une liste chaînée).
 
l'abus de while entraîne des bugs comme l'oubli de l'incrémentation de l'index (ça m'arrive aussi après des années de pratique :D)

 

[edtdd]--Message édité par youdontcare--[/edtdd]

Reply

Marsh Posté le 06-10-2001 à 17:22:34    

Deadog a écrit a écrit :

pê pke on sait incontionnelement qu'un while va plus vite qu'un for :??:  :D  




 
Tu es sûr de ça?
 
Beaucoup plus rapide?

Reply

Marsh Posté le 06-10-2001 à 17:26:25    

bcp, je sais pas, m'étonnerai même, mais je me souviens avoir lu je sais pas trop où que niveau assembleur un while allez plus vite qu'un for...
 
 
youdontcare > tous pareil :p

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed