Upload de fichier, Move upload file Echec

Upload de fichier, Move upload file Echec - PHP - Programmation

Marsh Posté le 20-04-2010 à 22:26:13    

Bonjour à tous,
 
J'aurais besoin d'aide, malgré divers recherches, je n'arrive pas à trouver ma solution
Je bloque sur le traitement d'un formulaire avec des envois multiples de fichiers. :pfff:  
 
Mon formulaire envoyé, je reçois correctement mes variables allant de "fichier_1" à "fichier_x".  
 
 
Voila donc ce que j'ai fais pour <essayer> de traiter ce formulaire.

Code :
  1. for ($i=1; $i<10; $i++)
  2.  {
  3.  if ($type_resp==FILE)
  4.   {
  5.    $fichier="fichier_$i";
  6.    $namefichier = $_FILES["$fichier"]['name'];
  7.    $fichertemp = ($_FILES["$fichier"]['tmp_name']);
  8.    $taille = filesize($_FILES["$fichier"]['tmp_name']);
  9.    $extension = strrchr($namefichier, '.');
  10.    $dossier = '../lib/tmp/';
  11.    $taille_maxi = 10000000;
  12.    $extensions=array('.png', '.gif', '.jpg', '.jpeg', '.JPEG', '.JPG', '.GIF');
  13.    if (empty($namefichier))
  14.    {
  15. //si name fichier n'existe pas.. on affiche rien!  
  16.    }
  17.    else
  18.     {
  19.      $chemincomplet=$dossier . $namefichier;
  20.      $destination=$dossier . $namefichier;
  21.      // echo "$fichiertemp";
  22.      // echo "$chemincomplet<br>";
  23.      // echo " $extension<br>";
  24.      // echo " $taille<br>";
  25.      if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
  26.       {
  27.        $erreur = "<img src=../img/ko.gif> Le fichier recu ne porte pas l'extension attendue.<BR>
  28.          Extensions autorisée : png, gif, jpg ou jpeg<Br>
  29.          Extension du fichier envoyé : $extension";
  30.        echo $erreur;
  31.       }
  32.      if($taille>$taille_maxi)//on verifie si cela ne depasse pas la taille autorisé
  33.       {
  34.        $erreur = 'Le fichier est trop gros...<BR>
  35.        Taille maximun : $taille_maxi';
  36.        echo $erreur;
  37.       }
  38.      if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
  39.        //On formate le nom du fichier ici...
  40.        $fichier = strtr($namefichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  41.          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  42.        $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $namefichier);
  43.      if (move_uploaded_file("$fichiertemp", '../lib/tmp'))
  44.       {
  45.        echo "ok";
  46.       }
  47.      else
  48.       {
  49.        echo "echec";
  50.       }
  51.     }
  52.   }
  53. }


 
Tout semble se passer correctement, jusqu'au move_upload.. Je suis toujours en echec.
J'ai essayé en donnant le nom des chemins relatif directement, avec ou sans passer par variable, mais.. sans réussir.  
 
Voila, je m'excuses d'avance pour la lecture douloureuse de mon code.. je ne suis que novice en la matière .. soyez indulgent  :sarcastic:  
 
Merci par avance de toutes l'aide ou pistes que vous pourrez m'apporter.
 
 
 
 

Reply

Marsh Posté le 20-04-2010 à 22:26:13   

Reply

Marsh Posté le 20-04-2010 à 22:30:37    

Quelle erreur s'affiche exactement ??

Code :
  1. ini_set("display_errors",1);
  2. error_reporting(E_ALL)


si aucune erreur ne s'affiche.

 

Sinon tes "fichiers_$1", tu peux les remplacer par un array ce serait moins crade quand même :

Code :
  1. <input type="file" name="files[]" />


et plus facile à itérer..

 

De  plus :

Code :
  1. $fichertemp = ($_FILES["$fichier"]['tmp_name']);


Les parenthèses là, elle te choquent pas ?


Message édité par bixibu le 20-04-2010 à 22:31:10

---------------
App Android NextGP - Calendrier, Notifications pour 12 sports meca : Playstore - TU
Reply

Marsh Posté le 20-04-2010 à 22:37:25    

Hello,
 
Merci pour ta rapidité.
Voici le résultat :  :pfff:  

Spoiler :


Notice: Undefined variable: fichiertemp in /quest/form/resp_1.php on line 82
ko
Notice: Undefined index: valide_1 in /quest/form/resp_1.php on line 109
 
Notice: Use of undefined constant off - assumed 'off' in /quest/form/resp_1.php on line 112
 
Notice: Use of undefined constant FILE - assumed 'FILE' in /quest/form/resp_1.php on line 36
 
Notice: Undefined index: fichier_2 in /quest/form/resp_1.php on line 39
 
Notice: Undefined index: fichier_2 in /quest/form/resp_1.php on line 40
 
Notice: Undefined index: fichier_2 in /quest/form/resp_1.php on line 41
 
Notice: Undefined index: valide_2 in /quest/form/resp_1.php on line 109
 
Notice: Use of undefined constant off - assumed 'off' in /quest/form/resp_1.php on line 112
 
Notice: Use of undefined constant FILE - assumed 'FILE' in /quest/form/resp_1.php on line 36
 
Notice: Undefined index: fichier_3 in /quest/form/resp_1.php on line 39
 
Notice: Undefined index: fichier_3 in /quest/form/resp_1.php on line 40
 
Notice: Undefined index: fichier_3 in /quest/form/resp_1.php on line 41
 
Notice: Undefined index: valide_3 in /quest/form/resp_1.php on line 109
 
Notice: Use of undefined constant off - assumed 'off' in /quest/form/resp_1.php on line 112
 
Notice: Use of undefined constant FILE - assumed 'FILE' in /quest/form/resp_1.php on line 36
 
Notice: Undefined index: fichier_4 in /quest/form/resp_1.php on line 39
 
Notice: Undefined index: fichier_4 in /quest/form/resp_1.php on line 40
 
Notice: Undefined index: fichier_4 in /quest/form/resp_1.php on line 41
 
Notice: Undefined index: valide_4 in /quest/form/resp_1.php on line 109
 
Notice: Use of undefined constant off - assumed 'off' in /quest/form/resp_1.php on line 112
 
Notice: Use of undefined constant FILE - assumed 'FILE' in /quest/form/resp_1.php on line 36
 
Notice: Undefined index: fichier_5 in /quest/form/resp_1.php on line 39
 
Notice: Undefined index: fichier_5 in /quest/form/resp_1.php on line 40
 
Notice: Undefined index: fichier_5 in /quest/form/resp_1.php on line 41
 
Notice: Undefined index: valide_5 in /quest/form/resp_1.php on line 109
 
Notice: Use of undefined constant off - assumed 'off' in /quest/form/resp_1.php on line 112
 
Notice: Use of undefined constant FILE - assumed 'FILE' in /quest/form/resp_1.php on line 36
 
Notice: Undefined index: fichier_6 in /quest/form/resp_1.php on line 39
 
Notice: Undefined index: fichier_6 in /quest/form/resp_1.php on line 40
 
Notice: Undefined index: fichier_6 in /quest/form/resp_1.php on line 41
 
Notice: Undefined index: valide_6 in /quest/form/resp_1.php on line 109
 
Notice: Use of undefined constant off - assumed 'off' in /quest/form/resp_1.php on line 112
 
Notice: Use of undefined constant FILE - assumed 'FILE' in /quest/form/resp_1.php on line 36
 
Notice: Undefined index: fichier_7 in /quest/form/resp_1.php on line 39
 
Notice: Undefined index: fichier_7 in /quest/form/resp_1.php on line 40
 
Notice: Undefined index: fichier_7 in /quest/form/resp_1.php on line 41
 
Notice: Undefined index: valide_7 in /quest/form/resp_1.php on line 109
 
Notice: Use of undefined constant off - assumed 'off' in /quest/form/resp_1.php on line 112
 
Notice: Use of undefined constant FILE - assumed 'FILE' in /quest/form/resp_1.php on line 36
 
Notice: Undefined index: fichier_8 in /quest/form/resp_1.php on line 39
 
Notice: Undefined index: fichier_8 in /quest/form/resp_1.php on line 40
 
Notice: Undefined index: fichier_8 in /quest/form/resp_1.php on line 41
 
Notice: Undefined index: valide_8 in /quest/form/resp_1.php on line 109
 
Notice: Use of undefined constant off - assumed 'off' in /quest/form/resp_1.php on line 112
 
Notice: Use of undefined constant FILE - assumed 'FILE' in /quest/form/resp_1.php on line 36
 
Notice: Undefined index: fichier_9 in /quest/form/resp_1.php on line 39
 
Notice: Undefined index: fichier_9 in /quest/form/resp_1.php on line 40
 
Notice: Undefined index: fichier_9 in /quest/form/resp_1.php on line 41
 
Notice: Undefined index: valide_9 in /quest/form/resp_1.php on line 109
 
Notice: Use of undefined constant off - assumed 'off' in /quest/form/resp_1.php on line 112


Citation :


Sinon tes "fichiers_$1", tu peux les remplacer par un array ce serait moins crade quand même :
Code :
 
   1. <input type="file" name="files[]" />


Car je ne savais pas faire.  
Je vais tester cela, enfin demain. :jap:  
 

Citation :


 
Les parenthèses là, elle te choquent pas ?


Boh..  :ange:  je mélange souvent.. novice inside!

Reply

Marsh Posté le 20-04-2010 à 22:39:41    

Pas de soucis ;)

 

Pour les notices, sache que tu peux les planquer genre error_reporting(E_ALL ~ E_NOTICE). Mais je te conseil déjà de comprendre ces erreurs et de les corriger, ca ne peux être que positif ;)


Message édité par bixibu le 20-04-2010 à 22:40:18

---------------
App Android NextGP - Calendrier, Notifications pour 12 sports meca : Playstore - TU
Reply

Marsh Posté le 20-04-2010 à 22:49:41    

Merci.
Pour les notices, j'ai tapé cela :  

Code :
  1. ini_set("display_errors",1);
  2. error_reporting(E_ALL & ~E_NOTICE);


Je n'ai plus de notices effectivement.  Mais je n'arrive toujours pas à comprendre pourquoi mon fichier ne bouge pas.
 
Je suis en train de regarder pour mettre le tout dans un tableau comme tu as dis, mais .. ca ne semble pas aussi simple avec le script que j'utilise pour l'ajout des inputs.
 
Une bonne nuit me donnera peut être des pistes.
 
Merci encore! :)  
 
 

Reply

Marsh Posté le 20-04-2010 à 22:52:38    

Autre chose :
 

Code :
  1. if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload

il n'y a pas les accolades apres ce if, donc seul l'instruction directement apres fera partie du IF
 
bref, met des echo partout pour voir jusqu'où ton script va


---------------
App Android NextGP - Calendrier, Notifications pour 12 sports meca : Playstore - TU
Reply

Marsh Posté le 20-04-2010 à 23:16:36    

Il va jusqu'à la fin ou presque.
 
J'ai modifié le code en fonction.

Code :
  1. if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
  2.       {
  3.       echo $erreur;
  4.       }
  5.      else
  6.       {
  7.       //On formate le nom du fichier ici...
  8.        $fichier = strtr($namefichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  9.          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  10.        $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $namefichier);
  11.    echo "$fichiertemp<BR>";
  12.     echo $destination;
  13.      if (move_uploaded_file($_FILES["$fichier"]['tmp_name'],$destination))
  14.            // if (move_uploaded_file($fichiertemp,$destination))
  15.       {
  16.        echo "ok";
  17.       }
  18.      else
  19.       {
  20.        echo "ko";
  21.       }
  22.       }


j'obtiens un résultat de l'echo placé juste avant le if move upload  
/tmp/phpDraPKJ
../lib/tmp/sound.gif
 
J'ai testé chacune des vérifications mise en place (le type de fichier, la taille, et la modification du fichier si charactere special)  
le script semble fonctionner correctement.. sauf à la fin.


Message édité par bizounours le 20-04-2010 à 23:17:41
Reply

Marsh Posté le 21-04-2010 à 09:52:50    

tu as ni "ok", ni "ko" ? ni erreur ?


---------------
App Android NextGP - Calendrier, Notifications pour 12 sports meca : Playstore - TU
Reply

Marsh Posté le 21-04-2010 à 09:55:24    

Si, si, j'ai KO,    
 
J'ai essayer de produire une erreur en donnant un chemin relatif bidon.. mais rien! :(

Reply

Marsh Posté le 21-04-2010 à 10:29:52    

Salut,
 
Question bête, tu as les droits d'écriture sur le répertoire de destination ?
 
Que vaut $_FILES["$fichier"]['tmp_name'] ?

Reply

Marsh Posté le 21-04-2010 à 10:29:52   

Reply

Marsh Posté le 21-04-2010 à 10:35:49    

Hello,  
 
Oui j'ai les droits.
 
résultat du file tmp name :  /tmp/phpDraPKJ  
 
J'ai pris le script pour l'utiliser avec un formulaire bidon.
Je n'utilise pas le for (i=.....)  
et tout fonctionne.  
 :o  
Je n'arrive pas à le faire marcher dans les conditions actuel.
Es ce que le fait d'utiliser le for pourrait me bloquer ?  
 
 

Reply

Marsh Posté le 21-04-2010 à 10:40:39    

On t'a conseillé d'utiliser un tableau : dans ce cas, n'utilise pas for mais foreach, et poste à nouveau le code. Il n'y a aucune raison qu'une boucle empêche l'exécution de ton script.

Reply

Marsh Posté le 21-04-2010 à 10:50:03    

Citation :

if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
    {
    echo $erreur;
    }


Avec ça, tu affiche $erreur si il n'y a pas d'erreur ...
 
Tu n'as pas besoin des "" autour de $fichier dans $_FILES["$fichier"]['tmp_name'].
 

Citation :

$extension = strrchr($namefichier, '.');


Utilises pathinfo pour récupérer l'extension du fichier.
Et pour plus de sécurité, fais une vérification du type mime.
 
Comme l'a déjà dit bixibu, utilises un tableau.

Citation :

<input type="file" name="files[x]">
<input type="file" name="files[y]">
<input type="file" name="files[z]">


 

Citation :

foreach($_FILES['files] as $id=>$var){
echo $var['tmp_name'];
echo $var['name'];
...
}

Reply

Marsh Posté le 21-04-2010 à 13:46:13    

Merci pour les infos, comme j'ai dis hier, je comptais essayer de passer en tableau aujourd'hui, comme l'avait dis bixibu.
 
je pense avoir réussi (bas voui, ca vous parait peut être simple, mais pour un novice il faut chercher/comprendre pour pouvoir avancer  :))
 
 

Code :
  1. _FILES["fichier"]
  2. Array
  3. (
  4.     [name] => Array
  5.         (
  6.             [1] => images2.jpg
  7.             [2] => erreur.jpg
  8.             [3] => sound.gif
  9.             [4] => images1.jpg
  10.         )
  11.     [type] => Array
  12.         (
  13.             [1] => image/jpeg
  14.             [2] => image/jpeg
  15.             [3] => image/gif
  16.             [4] => image/jpeg
  17.         )
  18.     [tmp_name] => Array
  19.         (
  20.             [1] => /tmp/phpCjUEKw
  21.             [2] => /tmp/phpLWAjaI
  22.             [3] => /tmp/phpuiP9zT
  23.             [4] => /tmp/phpvT50Z4
  24.         )
  25.     [error] => Array
  26.         (
  27.             [1] => 0
  28.             [2] => 0
  29.             [3] => 0
  30.             [4] => 0
  31.         )
  32.     [size] => Array
  33.         (
  34.             [1] => 4491
  35.             [2] => 9176
  36.             [3] => 2164
  37.             [4] => 4250
  38.         )
  39. )


 
je pense que c'est ca que vous m'avez dis de faire ?
 
maintenant je m'attaque à cela
foreach($_FILES['fichier'] as $id=>$var)
{
echo $var['tmp_name'];
echo $var['name'];
}
 
Merci de l'aide apportée:)
 :jap:

Reply

Marsh Posté le 21-04-2010 à 13:50:04    

Pense à toujours tester si $_FILES['fichier'] est bien un tableau avant ton foreach.
 
Sinon, oui c'est ça.

Reply

Marsh Posté le 21-04-2010 à 15:26:25    


Code :
  1. foreach ($_FILES['fichier'] as $cle=>$valeur)
  2.   {
  3.               echo "$cle";
  4.              
  5.             foreach ($valeur as $cle=>$valeur)
  6.    {
  7.    echo " $valeur<BR>";
  8.            
  9.    } 
  10.   }


La question peut paraitre bête mais une fois que j'ai listé tout mon tableau
comment utiliser ses données de manière à m'en servir avec le script précédemment donné ??
 

Reply

Sujets relatifs:

Leave a Replay

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