problema upload file

Bruce5000

Utente Attivo
14 Ott 2007
106
0
0
Ciao, ho un form per caricare file in una cartella del server ftp,
ma mi dà sempre errore nel caricamento e controllando l'array $_FILES ho visto
che è sempre vuoto. Potete aiutarmi? Grazie.
Questo è il codice:
PHP:
    <div id="inserimento" align="right">
    
<h3>Inserimento nuova news</h3>
<br /><br />
<form action="" method="post" enctype="multipart/form-data">
<label>Inserire Titolo</label> <br /><input type="text" name="titolo" size="30" /><br /><br />

<label>Inserire Descrizione</label> <br /><textarea name="descrizione" rows="5" cols="29"></textarea><br /><br />
<label>Carica Immagine</label> <br /><input type="file" name="upload" size="40" /><br /><br />

<input type="submit" name="inserisci" value="Inserisci News" />


</form>

</div>

<?php
      if (is_uploaded_file($_FILES['upload']['tmp_name'])) 
   {
	   $titolo = addslashes($_POST['titolo']);	
	   $descrizione = addslashes($_POST['descrizione']);
   	   $nome_file = $_FILES['upload']['name'];
	   
   if ($_FILES["upload"]["error"] > 0)
   {
   	   echo "Error: " . $_FILES["upload"]["error"] . "<br />";
   }
 
     // Sposto il file nella cartella da me desiderata
     if (!move_uploaded_file($_FILES['upload']['tmp_name'], 'news/'.$nome_file))
	  {
	   	echo "<script type=\"text/javascript\">"; 
   		echo "alert(\"Errore nel caricamento dell'immagine\")"; 
   		echo "</script>";
     } 
	 else
	 {
	 	$sql = mysql_query("insert into news (titolo, descrizione, nome_file)
							values('$titolo', '$descrizione', '$nome_file')") or die (mysql_error());	
	
							
		echo "<script type=\"text/javascript\">"; 
   		echo "alert(\"News inserita\")"; 
   		echo "</script>";
 	 }
   }
    
?>
 
Ultima modifica:
ciao
per prima cosa verifica i permessi o se il file immagine non sia troppo grande (se non ricordo male ci sono dei limiti di kb)
poi, se l'up può farlo anche una terza persona e non solo tu, verifica cosa carichi.
se non lo fa un terzo potrebbe caricarti un file .exe con conseguenze, come minimo, imprevedibili.
controlla sempre il tipo di file che deve essere caricato.
poi metti un var_dump subito dopo il tag php e prima dell'if

PHP:
<?php
      var_dump($_FILES['upload']['tmp_name']);
	  if (is_uploaded_file($_FILES['upload']['tmp_name'])) 
   {
//..............
e verifica cosa ti risulta, potrebbe essere un errore di trasmissione dal form
 
ciao grazie per la rapida risposta;
ho provato con var_dump come mi hai detto e mi stampa NULL; il form fa parte di un pannello admin
quindi il tipo di file non è un problema
 
ciao
se il var dump è vuoto, con molta probabilità dipende dalla trasmissione del dato, verifica i nomi e prova a fare queste correzioni (vedi i commenti)

PHP:
<div id="inserimento" align="right">
<h3>Inserimento nuova news</h3>
<br /><br />
<!--correzione nel l'action del form -->
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post" enctype="multipart/form-data">
<label>Inserire Titolo</label> <br /><input type="text" name="titolo" size="30" /><br /><br />

<label>Inserire Descrizione</label> <br /><textarea name="descrizione" rows="5" cols="29"></textarea><br /><br />
<!-- prova a togliere il size -->
<label>Carica Immagine</label> <br /><input type="file" name="upload"/><br /><br />
<input type="submit" name="inserisci" value="Inserisci News" />
</form>
</div>
<?php
//inserimento della verifica del submit
if(isset($_POST['inserisci']){
      if (is_uploaded_file($_FILES['upload']['tmp_name'])){
       $titolo = addslashes($_POST['titolo']);    
       $descrizione = addslashes($_POST['descrizione']);
       $nome_file = $_FILES['upload']['name'];
   if ($_FILES["upload"]["error"] > 0)
   {
          echo "Error: " . $_FILES["upload"]["error"] . "<br />";
   }//anche qui metterei un else perche se ti da errore non dovresti caricare ne salvare nel db
     // Sposto il file nella cartella da me desiderata
     if (!move_uploaded_file($_FILES['upload']['tmp_name'], 'news/'.$nome_file))
      {
           echo "<script type=\"text/javascript\">"; 
           echo "alert(\"Errore nel caricamento dell'immagine\")"; 
           echo "</script>";
     }else{
         $sql = mysql_query("insert into news (titolo, descrizione, nome_file) values('$titolo', '$descrizione', '$nome_file')") or die (mysql_error());                
        echo "<script type=\"text/javascript\">"; 
           echo "alert(\"News inserita\")"; 
           echo "</script>";
      }
   }
}//fine if $_POST del submit
?>
poi, ma può essere una stupidaggine, cambia il nome da upload a carica (sia nel form che nel php), non vorrei che upload interferisse con qualche parola riservata
inoltre ti conviene mettere if/else per il tipo, simile a questo

PHP:
  $tipi_consentiti = array("image/gif","image/jpeg","image/pjpeg","image/png");
  // verifico che il formato del file sia tra quelli accettati
  if (@in_array($_FILES['upload']['type'], $tipi_consentiti)){
  //...carico +db...
  }else{
  	echo "tipo di file non ammesso";
  }
prova, al massimo non funzia
 

Discussioni simili