Php Upload

Résolu
Bonjour,

J'aimerais savoir quel problème d'upload ne renvoie pas de message d'erreurs quand on fait echo $_FILES['file']['error'];

et ne renvoi que Array(0) { } quand on fait un var_dump($_FILES).

J'ai eu beau chercher je reste toujours bloqué.

Merci de votre contribution à la préservation de ma santé mentale... ;)

Configuration: Windows XP / Firefox 3.6.3

9 réponses

  1. Tu n'aurais pas oublié de mettre « enctype="multipart/form-data" » ?
    1. Non justement j'ai vérifié 100 fois, pas d'espace en trop, pas de problème de ce côté, je comprend pas ce qui cloche
      1. Vérifie ces paramètres dans ton php.ini :
        file_uploads = On
        upload_tmp_dir="C:\Windows\Temp"   (Ou autre valeur, bien sûr)
        upload_max_filesize = 11M  (Ou autre. Mais il faut que le fichier soit plus petit. De base c'est à 2M je crois)
        
        1. J'ai réussi à vérifier ces valeur grâce à ini_get()...

          file_uploads me renvoie 1
          upload_tmp_dir me renvoie D:\Program Files\OCS Inventory NG\xampp\tmp
          upload_max_filesize me renvoie 16 M

          Donc je me trompe peut-être mais je n'ai pas l'impression qu'il y ait de problème de ce côté là...
        2. Ouaip en effet. Bah j'ai aucune idée. On peut avoir le code HTML de la page du formulaire ?
      2. Oui j'ai voulu toucher au php.ini mais malheureusement je ne sais pas comment y accéder car mon wamp est sur un serveur distant...Le phpinfo() me donne le répertoire du php.ini qui est sur le serveur mais dont l'accès m'est restreint... Y a-t-il un moyen de mettre son propre php.ini pour un projet donné??
        1. Quel est ton hébergeur ?
          On peut modifier les valeurs du php.ini grâce à un .htaccess ou avec ini_set() (ou avec son propre php.ini chez 1&1).
          1. Je suis sur le réseau intranet d'une entreprise pour laquelle je suis en stage. Je vais chercher plus de détails sur ini_set(). Merci
            1. Voilà mon form :

              echo "<center><form enctype='multipart/form-data'  method=post action='index.php?action=ModifierMachine' name='FormAjoutMachine' onSubmit='return check();'><table width = 60%>"; 
                echo "<input type=hidden name=MAX_FILE_SIZE  value=2048>"; 
                echo "<input type=hidden name='FormAjoutMachine' value='FormAjoutMachine' />"; 
                echo "<input type=hidden name='numMachine' value='".$dataTrouverMachine['NumMachine']."' />"; 
                echo "<tr ><td width =50%>Nom de machine : </td><td><input type=text name='NomMachine' value='$NomMachine' onKeyUp='couleur(this);' /></td></tr>"; 
                echo "<tr ><td>Date d'achat :</td><td>"; 
                include("calendar.html"); 
                echo "<input onfocus='ds_sh(this);' name='date' readonly='readonly' style='cursor: text' onFocus='couleur(this);' value='".$dataTrouverMachine['DateAchat']."' />"; 
                echo "</td></tr>"; 
                echo "<tr ><td>URL Photo : <em>".$dataTrouverMachine['UrlPhoto']."</em></td><td><input type=file name='URLPhoto' /></td></tr>"; 
                echo "<tr ><td>Modèle : </td><td><input type=text name='ModeleMachine' onKeyUp='couleur(this);' value='".$dataTrouverMachine['Modele']."' /></td></tr>"; 
                echo "<tr ><td>N° de série : </td><td><input type=text name='NumSerie' onKeyUp='couleur(this);' value='".$dataTrouverMachine['NumSerie']."' /></td></tr>"; 
                echo "<tr ><td>N° immo : </td><td><input type=text name='numImmo' onKeyUp='couleur(this);' value='".$dataTrouverMachine['NumImmo']."' /></td></tr>"; 
              echo "</table></form>"; 
              
              


              Puis le traitement :

              
              
              $UrlPhoto = "Images/".date('Ymd').$_SESSION['URLPhoto']['tmp_name']; 
              
              
              if(move_uploaded_file($_FILES["URLPhoto"]["tmp_name"], $UrlPhoto)) 
                { 
                 $queryModifMachine = "UPDATE machine SET NomMachine='".mysql_real_escape_string($_SESSION['NomMachine'])."', UrlPhoto='".mysql_real_escape_string($UrlPhoto)."',  
                 Modele='".mysql_real_escape_string($_SESSION['ModeleMachine'])."', NumSerie='".mysql_real_escape_string($_SESSION['NumSerie'])."', DateAchat='".mysql_real_escape_string($_SESSION['date'])."', 
                 DureeGarantie='".mysql_real_escape_string($_SESSION['DureeGarantie'])."', PUHT='".mysql_real_escape_string($_SESSION['PUHT'])."', Processeur='".mysql_real_escape_string($_SESSION['Processeur'])."', 
                 RAM='".mysql_real_escape_string($_SESSION['RAM'])."', CarteGraphique='".mysql_real_escape_string($_SESSION['CarteGraphique'])."', DisqueDur='".mysql_real_escape_string($_SESSION['DisqueDur'])."',  
                 TechniqueImpression='".mysql_real_escape_string($_SESSION['TechImpr'])."', CouleurNB='".mysql_real_escape_string($_SESSION['CouleurNB'])."', TailleEcran='".mysql_real_escape_string($_SESSION['TailleEcran'])."', 
                 NumImmo='".mysql_real_escape_string($_SESSION['numImmo'])."', NumAffectation='".mysql_real_escape_string($_SESSION['NumAffectation'])."', CodeConstructeur='".mysql_real_escape_string($CodeConstructeur)."', 
                 CodeFournisseur='".mysql_real_escape_string($_SESSION['CodeFournisseur'])."' WHERE NumMachine='".mysql_real_escape_string($_SESSION['numMachine'])."'"; 
                } 
                else 
                { 
                 $queryModifMachine = "UPDATE machine SET NomMachine='".mysql_real_escape_string($_SESSION['NomMachine'])."', Modele='".mysql_real_escape_string($_SESSION['ModeleMachine'])."', 
                 NumSerie='".mysql_real_escape_string($_SESSION['NumSerie'])."', DateAchat='".mysql_real_escape_string($_SESSION['date'])."', DureeGarantie='".mysql_real_escape_string($_SESSION['DureeGarantie'])."', 
                 PUHT='".mysql_real_escape_string($_SESSION['PUHT'])."', Processeur='".mysql_real_escape_string($_SESSION['Processeur'])."', RAM='".mysql_real_escape_string($_SESSION['RAM'])."', 
                 CarteGraphique='".mysql_real_escape_string($_SESSION['CarteGraphique'])."', DisqueDur='".mysql_real_escape_string($_SESSION['DisqueDur'])."',  
                 TechniqueImpression='".mysql_real_escape_string($_SESSION['TechImpr'])."', CouleurNB='".mysql_real_escape_string($_SESSION['CouleurNB'])."', TailleEcran='".mysql_real_escape_string($_SESSION['TailleEcran'])."', 
                 NumImmo='".mysql_real_escape_string($_SESSION['numImmo'])."', NumAffectation='".mysql_real_escape_string($_SESSION['NumAffectation'])."', CodeConstructeur='".mysql_real_escape_string($CodeConstructeur)."', 
                 CodeFournisseur='".mysql_real_escape_string($_SESSION['CodeFournisseur'])."' WHERE NumMachine='".mysql_real_escape_string($_SESSION['numMachine'])."'"; 
                } 
                  
                mysql_query($queryModifMachine) or die(mysql_error()); 
              
              


              Si vous voyez quelque chose qui bloque... Merci de votre aide
              1. Salut !

                Commente mysql_query et fait un echo de $queryModifMachine pour voir déjà la tête de ta requête.
              2. En fait c'est un formulaire de modif de machine(pc, imprimante,etc...). Dans le cas où mon fichier s'est bien uploadé, je stocke le nom de fichier, sinon non. Le problème ne venant pas de la requête mais de l'upload qui ne s'éxécutant pas me renvoie dans le else...
              3. La réponse est rien. J'ai bien pensé à ça aussi mais le nom de $_FILES['nom'] est bien le même que le <input name='nom' /> ....
              4. Si ca marque rien ca veut dire que dans ta fonction tu ne passes rien, c'est sur que ca peut pas fonctionner :).

                Je sais pas trop ce qu'il te faut dans tes 2 urls de destinations mais pour récupérer une variable envoyé par post pour reprendre ton exemple de nom, ce sera $_POST['nom']

                En plus la il manque vachement d'info que tu nous as pas donné, tmp name viens d'où ?
                et $_SESSION = quoi ?

                ps : et l'echo de $UrlPhoto devrait au moin t'écrire "Images/" non ?
            2. Tiens je t'ai fait un code qui fonctionne pour l'upload de fichier :

              <html>
              	<body>
              		<center>
              		<form ENCTYPE="multipart/form-data" method='POST' action=''>
              		URL de l'image:<br>
              		<input type='file' name='pix'><br>
              		<br>
              		<input type='submit' value='go!'><br>
              		<br>
              		</form>
              		<?php
              		
              		import_request_variables("P","V_");
              		if(isset($V_pix))
              		{
              		
              			$tmp = $_FILES['pix']['tmp_name'];
              			$name = 'images/'.$_FILES['pix']['name'];
              			echo "//".$_FILES['pix']['name']."<br>//".$_FILES['pix']['tmp_name']."<br>";
              			if(move_uploaded_file($tmp, $name ) == 1) {
              				echo "OK !";
              			}
              			else {echo "KO!";} 
              		}
              		?>
              		</center>
              	</body>
              </html>
              


              A toi de l'adapter ^^
              1. Merci beaucoup! Est-ce que tu peux me préciser ce que fait
                 import_request_variables("P","V_");
                

                Encore merci
              2. Ca sert a importer les variables dans l'environnement globale, en fait je sais pas trop, mais si tu le met pas, ca marche pas ^^, donc vaut mieux le laisser XD
              3. Rien à faire en remplaçant dans mon cas j'entre toujours pas dans le if(isset($V_pix))...
            3. Problème résolu...enfin... il venait de là :
              
              session_start();
              	
              	if(!empty($_POST))
              	{
              		foreach($_POST as $cle => $val)
              		{ 
              			if($cle != 'URLPhoto') // test des post à ne pas convertir en session
              			{
              				$_SESSION[$cle] = $val; 
              				unset($_POST[$cle]);
              			}
              		}
              		echo "<script language='javascript'>history.go(-1);</script>";		
              		exit();
              	}	
              	if(!empty($_FILES))
              	{
              		foreach($_FILES as $cle => $val)
              		{
              			$_SESSION[$cle] = $val;
              		}
              		echo "<script language='javascript'>history.go(-1);</script>";		
              		exit();
              	}
              
              
              
              


              remplacé par :

              
              session_start();
              	
              	if(!empty($_POST) || !empty($_FILES))
              	{
              		foreach($_POST as $cle => $val)
              		{ 
              			if($cle != 'URLPhoto') // test des post à ne pas convertir en session
              			{
              				$_SESSION[$cle] = $val; 
              				unset($_POST[$cle]);
              			}
              		}
              		
              		foreach($_FILES as $cle2 => $val2)
              		{
              			$_SESSION[$cle2] = $val2;
              		}
              		
              		echo "<script language='javascript'>history.go(-1);</script>";		
              		exit();
              	}	
              
              


              Ainsi mes variables FILES sont converties en SESSION en même temps que mes POST et je ne perds plus mes infos... Merci pour votre aide