Php Upload

Résolu
Breub62 Messages postés 3452 Statut Membre -  
Breub62 Messages postés 3452 Statut Membre -
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. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Tu n'aurais pas oublié de mettre « enctype="multipart/form-data" » ?
    0
  2. Breub62 Messages postés 3452 Statut Membre 369
     
    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
    0
  3. Laugarhraun Messages postés 18 Statut Membre 44
     
    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)
    
    0
    1. Breub62 Messages postés 3452 Statut Membre 369
       
      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à...
      0
    2. Laugarhraun Messages postés 18 Statut Membre 44
       
      Ouaip en effet. Bah j'ai aucune idée. On peut avoir le code HTML de la page du formulaire ?
      0
  4. Breub62 Messages postés 3452 Statut Membre 369
     
    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é??
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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).
    0
  7. Breub62 Messages postés 3452 Statut Membre 369
     
    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
    0
  8. Breub62 Messages postés 3452 Statut Membre 369
     
    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
    0
    1. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
       
      Salut !

      Commente mysql_query et fait un echo de $queryModifMachine pour voir déjà la tête de ta requête.
      0
    2. Breub62 Messages postés 3452 Statut Membre 369
       
      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...
      0
    3. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
       
      bon, d'apres : https://www.php.net/manual/fr/function.move-uploaded-file.php

      Si ça fonctionne pas mais que t as pas d'erreur c est le filename qui est invalide (ici ton $_files).

      Fais un echo de $UrlPhoto et de $_FILES["URLPhoto"]["tmp_name"] pour voir ce que ça marque.
      0
    4. Breub62 Messages postés 3452 Statut Membre 369
       
      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' /> ....
      0
    5. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
       
      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 ?
      0
  9. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
     
    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 ^^
    0
    1. Breub62 Messages postés 3452 Statut Membre 369
       
      Merci beaucoup! Est-ce que tu peux me préciser ce que fait
       import_request_variables("P","V_");
      

      Encore merci
      0
    2. fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
       
      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
      0
    3. Breub62 Messages postés 3452 Statut Membre 369
       
      Rien à faire en remplaçant dans mon cas j'entre toujours pas dans le if(isset($V_pix))...
      0
  10. Breub62 Messages postés 3452 Statut Membre 369
     
    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
    0