Problema: salvare indirizzo file in un database(mancanza delle backslash nel percorso)

  • Creatore Discussione Creatore Discussione c02y
  • Data di inizio Data di inizio

c02y

Utente Attivo
30 Nov 2012
30
0
0
Ho una form per l'upload delle immagini in una cartella. Voglio salvare in un database il percorso del file. Il problema è che nel database mi salva il percorso del file, ma senza l'uso delle backslash, così facendo quando tendo di aprire le immagini tramite un tag <img src="percorso file">, non le riesco a visualizzare. Quando vado a controllare il database con phpmyadmin, il percorso del file(salvato in un campo di una tabella) risulta essere privo delle backslash.

ecco lo script per l'upload:

PHP:
//file passati tramite form
		$_FILES["img"]["tmp_name"]; //l'immagine 
		@$tipo_img=$_POST["tipo"];	//il tipo di immagine selezionato tramite radio button
		$nome_img=$_POST["nome_img"];	//nome dell'immagine da inserire nel db passata tramite input=text
		$color_img=$_POST["color_img"];	//colore dell'immagine da inserire nel db passata tramite input=text
	
	
	//connessione al database

		$connessione=
						mysql_connect('localhost','root','') or die("connessione fallita");
						mysql_select_db('vestiti') or die ("Selezione Database Fallita");
		
		
		
		//Se il caricamento non va a buon fine, stampami l'errore
			if ($_FILES["img"] ["error"] >0) 
			
				{
				echo" Errore nell'upload" . $_FILES["img"] ["error"]  ."<br>";
				}
			
			else
			
				{
				echo "Upload ok","<br>";
				
				echo "Il nome dl file caricato è" .$_FILES["img"] ["name"] ."<br>";
				
				echo" " .$_FILES["img"] ["tmp_name"];
				
				}
	//Nella funzione move_uploaded_file come secondo parametro va messa la seguente variabile, contenente indirizzo e nome del file
			$pathAndName ="C:\\upload\\{$_FILES['img']['name']}"; 
			
	//Se lo spostamento va a buon fine, inserisco indirizzo e altre info del file all'interno del database
			if (move_uploaded_file($_FILES['img']['tmp_name'], $pathAndName))
			
				{
					$query=mysql_query("INSERT INTO  $tipo_img SET indirizzo='$pathAndName',nome='$nome_img',colore='$color_img'") or die ("Errore query");
				}
 
Ciao, prova a fare così:

PHP:
 <?php
  
   $_FILES["img"]["tmp_name"]; 
   @$tipo_img=$_POST["tipo"];    
   $nome_img=$_POST["nome_img"];  
   $color_img=$_POST["color_img"]; 
   $connessione=
   mysql_connect('localhost','root','') or die("connessione fallita");
   mysql_select_db('vestiti') or die ("Selezione Database Fallita");
   
   if ($_FILES["img"] ["error"] >0) {
	   echo" Errore nell'upload" . $_FILES["img"] ["error"]  ."<br>";
	  }else{
	   echo "Upload ok","<br>";
	   echo "Il nome dl file caricato è".$_FILES["img"] ["name"] ."<br>";
	   echo" " .$_FILES["img"] ["tmp_name"];
    }
    
	$percorso = './';
	$pathAndName = ''.$percorso.basename( $_FILES['img']['name'] );
	  
   if (move_uploaded_file($_FILES['img']['tmp_name'], $pathAndName)){
	   $query=mysql_query("INSERT INTO $tipo_img 
	   SET indirizzo='$pathAndName',nome='$nome_img',colore='$color_img'") 
	   or die ("Errore query");
   } 

?>
 
Ultima modifica:
Ciao, prova a fare così:

PHP:
 <?php
  
   $_FILES["img"]["tmp_name"]; 
   @$tipo_img=$_POST["tipo"];    
   $nome_img=$_POST["nome_img"];  
   $color_img=$_POST["color_img"]; 
   $connessione=
   mysql_connect('localhost','root','') or die("connessione fallita");
   mysql_select_db('vestiti') or die ("Selezione Database Fallita");
   
   if ($_FILES["img"] ["error"] >0) {
	   echo" Errore nell'upload" . $_FILES["img"] ["error"]  ."<br>";
	  }else{
	   echo "Upload ok","<br>";
	   echo "Il nome dl file caricato è".$_FILES["img"] ["name"] ."<br>";
	   echo" " .$_FILES["img"] ["tmp_name"];
    }
    
	$percorso = './';
	$pathAndName = ''.$percorso.basename( $_FILES['img']['name'] );
	  
   if (move_uploaded_file($_FILES['img']['tmp_name'], $pathAndName)){
	   $query=mysql_query("INSERT INTO $tipo_img 
	   SET indirizzo='$pathAndName',nome='$nome_img',colore='$color_img'") 
	   or die ("Errore query");
   } 

?>

In $percorso devo mettere c:\\upload giusto??(ho provato anche senza :P) e basename cos'è? :D

Comunque mi da errore:(
 
Ciao, no percorso lascialo così.
Che errore ti da?
La funzione basename restituisce il nome del file il cui percorso viene passato in argomento alla funzione.
 
Ultima modifica:
Il file viene caricato in temp, ma non viene spostato. Ecco cosa mi da:


Upload ok
Il nome dl file caricato è169599_439390212749942_2106478344_o.jpg
C:\xampp\tmp\php2DFD.tmp
Notice: Undefined variable: FILES in C:\Users\Gianni\public_html\PROGETTO\upload_file.php on line 42

Warning: move_uploaded_file(): The second argument to copy() function cannot be a directory in C:\Users\Gianni\public_html\PROGETTO\upload_file.php on line 45

Warning: move_uploaded_file(): Unable to move 'C:\xampp\tmp\php2DFD.tmp' to './' in C:\Users\Gianni\public_html\PROGETTO\upload_file.php on line 45
 
Ciao, prova così :

PHP:
<?php
  
   $_FILES["img"]["tmp_name"]; 
   $tipo_img=$_POST["tipo"];    
   $nome_img=$_POST["nome_img"];  
   $color_img=$_POST["color_img"]; 
   $connessione=
   mysql_connect('localhost','root','') or die("connessione fallita");
   mysql_select_db('vestiti') or die ("Selezione Database Fallita");
   
   $percorso = './'; // BackSlash per il percorso.
   // Upload immagine.  
   $uploadfile = ''.$percorso.basename( $_FILES['Filedata']['name'] );
   // Sposta immagine.
   $sposta=move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
   // Percorso corretto immagine attraverso il concatenamento.
   $pathAndName=$percorso.$nome_img.$tipo_img;
   // Logica condizionale per spostare l'immagine ed eventualmente 
   // Rinominarla in casoil nome sia lo stesso.
  if($sposta){
   if (file_exists($pathAndName)){
     unlink($pathAndName);}
     $nuovofile=''.$percorso.$_FILES['Filedata']['name'];
     rename($nuovofile,$pathAndName);
     // Tua query di insert.
     $query=mysql_query("INSERT INTO $tipo_img 
     SET indirizzo='$pathAndName',nome='$nome_img',colore='$color_img'") 
     or die ("Errore query");
   }else{
     echo"errore Upload";
 }
 
?>
 
Ultima modifica:
Ciao, prova così :

PHP:
<?php
  
   $_FILES["img"]["tmp_name"]; 
   $tipo_img=$_POST["tipo"];    
   $nome_img=$_POST["nome_img"];  
   $color_img=$_POST["color_img"]; 
   $connessione=
   mysql_connect('localhost','root','') or die("connessione fallita");
   mysql_select_db('vestiti') or die ("Selezione Database Fallita");
   
   $percorso = './'; // BackSlash per il percorso.
   // Upload immagine.  
   $uploadfile = ''.$percorso.basename( $_FILES['Filedata']['name'] );
   // Sposta immagine.
   $sposta=move_uploaded_file( $_FILES['Filedata']['tmp_name'] ,$uploadfile );
   // Percorso corretto immagine attraverso il concatenamento.
   $pathAndName=$percorso.$nome_img.$tipo_img;
   // Logica condizionale per spostare l'immagine ed eventualmente 
   // Rinominarla in casoil nome sia lo stesso.
  if($sposta){
   if (file_exists($pathAndName)){
     unlink($pathAndName);}
     $nuovofile=''.$percorso.$_FILES['Filedata']['name'];
     rename($nuovofile,$pathAndName);
     // Tua query di insert.
     $query=mysql_query("INSERT INTO $tipo_img 
     SET indirizzo='$pathAndName',nome='$nome_img',colore='$color_img'") 
     or die ("Errore query");
   }else{
     echo"errore Upload";
 }
 
?>

Non ne riesco proprio ad uscire....da ancora errore

Notice: Undefined index: Filedata in C:\Users\Gianni\public_html\PROGETTO\upload_file.php on line 25

Notice: Undefined index: Filedata in C:\Users\Gianni\public_html\PROGETTO\upload_file.php on line 27
errore Upload
 
Ma la foto deve andare in qualche directory?
se la foto ha una directory sostituisci il percorso con
$percorso = './TUA CARTELLA';
Inoltre nella riga 25 c'è un commento e nella 27 c'è la query di insert
hai costruito bene la query di insert?
Inoltre il form dove passi i dati nome etc funziona?
 
Ultima modifica:
Ma la foto deve andare in qualche directory?
se la foto ha una directory sostituisci il percorso con
$percorso = './TUA CARTELLA';
Inoltre nella riga 25 c'è un commento e nella 27 c'è la query di insert
hai costruito bene la query di insert?
Inoltre il form dove passi i dati nome etc funziona?


La foto deve andare in una directory (C:\\upload\\)

Il form funziona, infatti come ho detto nell'open post, le informazioni vengono salvate, l'unico problema è che il percorso risulta essere senza backslash, e così facendo non posso richiamarle nei tag <img>. Ma la form e l'upload funzionano...è che salva il percorso in questo modo"C:esempioesempio" invece di questo: C//:esempio/esempio

Ti faccio vedere la form:
PHP:
<form name=mod_inserimento method=post enctype='multipart/form-data'  action=upload_file.php onSubmit='return verifica()'>
		
			<table>	
						<tr> <td>	<p>Maglia		<td>	<input type=radio name=tipo	value=maglia> 		</tr>
						<tr> <td>	<p>Pantalone	<td>	<input type=radio name=tipo	value=pantalone>	</tr>
						<tr> <td>	<p>Accessorio	<td>	<input type=radio name=tipo	value=accessorio>	</tr>
						<tr> <td>	<p>Inserici un nome:													</tr>
				
						<tr> <td>	<p>Nome			<td>	<input type=name name=nome_img>					</tr>
						<tr> <td>	<p>Colore		<td>	<input type=text name=color_img>				</tr>
						<tr> 	<p>	<input type=file name=img>											</tr>
							<p>				<td>	<input type=submit value=Procedi>	<td>	<input type=reset value=Annulla>  
					</table>"
L'upload_file è quello che sta nell'open post
 
Ultima modifica:
Prova cosi':
PHP:
 <?php
  
   $_FILES["img"]["tmp_name"]; 
   @$tipo_img=$_POST["tipo"];    
   $nome_img=$_POST["nome_img"];  
   $color_img=$_POST["color_img"]; 
   $connessione=
   mysql_connect('localhost','root','') or die("connessione fallita");
   mysql_select_db('vestiti') or die ("Selezione Database Fallita");
   
   if ($_FILES["img"] ["error"] >0) {
       echo" Errore nell'upload" . $_FILES["img"] ["error"]  ."<br>";
      }else{
       echo "Upload ok","<br>";
       echo "Il nome dl file caricato è".$_FILES["img"] ["name"] ."<br>";
       echo" " .$_FILES["img"] ["tmp_name"];
    }
    
    $percorso = './upload'; // indica il percorso
    $pathAndName =''.$percorso{$_FILES['img']['name']}; 
   
   if (move_uploaded_file($_FILES['img']['tmp_name'], $pathAndName)){
       $query=mysql_query("INSERT INTO $tipo_img 
       SET indirizzo='$pathAndName',nome='$nome_img',colore='$color_img'") 
       or die ("Errore query");
   } 

?>
 
Prova cosi':
PHP:
 <?php
  
   $_FILES["img"]["tmp_name"]; 
   @$tipo_img=$_POST["tipo"];    
   $nome_img=$_POST["nome_img"];  
   $color_img=$_POST["color_img"]; 
   $connessione=
   mysql_connect('localhost','root','') or die("connessione fallita");
   mysql_select_db('vestiti') or die ("Selezione Database Fallita");
   
   if ($_FILES["img"] ["error"] >0) {
       echo" Errore nell'upload" . $_FILES["img"] ["error"]  ."<br>";
      }else{
       echo "Upload ok","<br>";
       echo "Il nome dl file caricato è".$_FILES["img"] ["name"] ."<br>";
       echo" " .$_FILES["img"] ["tmp_name"];
    }
    
    $percorso = './upload'; // indica il percorso
    $pathAndName =''.$percorso{$_FILES['img']['name']}; 
   
   if (move_uploaded_file($_FILES['img']['tmp_name'], $pathAndName)){
       $query=mysql_query("INSERT INTO $tipo_img 
       SET indirizzo='$pathAndName',nome='$nome_img',colore='$color_img'") 
       or die ("Errore query");
   } 

?>


Penso che cercherò uno script bello e fatto...non va nemmeno così
 
Ho sistemato un po lo script, comunque non capisco il senso nell'avere più tabelle con la stessa struttura ma nome diverso, cioè tanto vale farne una unica aggiungendo un campo di nome tipo

PHP:
 if(!empty($_POST["tipo"]) && !empty($_POST["nome_img"]) && !empty($_POST["color_img"]) && !empty($_FILES['img'])){
      $mysqli = new mysqli('localhost','root','','vestiti') or die("Impossibile connettersi al database");
    
   if ($_FILES["img"]["error"]>0)  
       echo " Errore nell'upload" . $_FILES["img"] ["error"]  ."<br>"; 
     elseif(!in_array(end(explode('.',$_FILES["img"]["name"])),array('jpg','jpeg','gif','png')))
         echo "Estensione invalida";
      else{ 
       echo "Upload ok","<br>"; 
       echo "Il nome dl file caricato è".$_FILES["img"] ["name"] ."<br>"; 
       echo" " .$_FILES["img"]["tmp_name"]; 
    } 
     
    $percorso = './upload/'; // indica il percorso 
    $pathAndName = $percorso.$_FILES['img']['name'];  
    
   if (move_uploaded_file($_FILES['img']['tmp_name'], $pathAndName)){ 
       $mysqli->query("INSERT INTO ".$mysqli->real_escape_string($_POST['tipo'])."
       SET indirizzo='".$mysqli->real_escape_string($pathAndName)."',nome='".$mysqli->real_escape_string($_POST['nome_img'])."',colore='".$mysqli->real_escape_string($_POST['color_img'])."'")  
       or die ($mysqli->error); 
   } else echo "Errore imprevisto nell'upload";
   
}else echo "Tutti i campi devono essere compilati";

Se riscontri degli errori scrivi quali e fino a dove arriva lo script
 
Ho sistemato un po lo script, comunque non capisco il senso nell'avere più tabelle con la stessa struttura ma nome diverso, cioè tanto vale farne una unica aggiungendo un campo di nome tipo

PHP:
 if(!empty($_POST["tipo"]) && !empty($_POST["nome_img"]) && !empty($_POST["color_img"]) && !empty($_FILES['img'])){
      $mysqli = new mysqli('localhost','root','','vestiti') or die("Impossibile connettersi al database");
    
   if ($_FILES["img"]["error"]>0)  
       echo " Errore nell'upload" . $_FILES["img"] ["error"]  ."<br>"; 
     elseif(!in_array(end(explode('.',$_FILES["img"]["name"])),array('jpg','jpeg','gif','png')))
         echo "Estensione invalida";
      else{ 
       echo "Upload ok","<br>"; 
       echo "Il nome dl file caricato è".$_FILES["img"] ["name"] ."<br>"; 
       echo" " .$_FILES["img"]["tmp_name"]; 
    } 
     
    $percorso = './upload/'; // indica il percorso 
    $pathAndName = $percorso.$_FILES['img']['name'];  
    
   if (move_uploaded_file($_FILES['img']['tmp_name'], $pathAndName)){ 
       $mysqli->query("INSERT INTO ".$mysqli->real_escape_string($_POST['tipo'])."
       SET indirizzo='".$mysqli->real_escape_string($pathAndName)."',nome='".$mysqli->real_escape_string($_POST['nome_img'])."',colore='".$mysqli->real_escape_string($_POST['color_img'])."'")  
       or die ($mysqli->error); 
   } else echo "Errore imprevisto nell'upload";
   
}else echo "Tutti i campi devono essere compilati";

Se riscontri degli errori scrivi quali e fino a dove arriva lo script

In realtà non avevo proprio pensato di mettere tutto in un'unica tabella...hai ragione!

comunque...ho preso il codice e l'ho sostituito al mio, ed ecco il risultato:
Strict Standards: Only variables should be passed by reference in C:\Users\Gianni\public_html\PROGETTO\upload_file.php on line 13
Upload ok
Il nome dl file caricato è188648_470592122982708_1254301220_n.jpg
C:\xampp\tmp\php1B89.tmp
Warning: move_uploaded_file(./upload/188648_470592122982708_1254301220_n.jpg): failed to open stream: No such file or directory in C:\Users\Gianni\public_html\PROGETTO\upload_file.php on line 24

Warning: move_uploaded_file(): Unable to move 'C:\xampp\tmp\php1B89.tmp' to './upload/188648_470592122982708_1254301220_n.jpg' in C:\Users\Gianni\public_html\PROGETTO\upload_file.php on line 24
Errore imprevisto nell'upload

Vi posto gli altri due file...che non mi fanno aprire le foto...il codice di entrambi non è fatto benissimo(potrei trovare soluzioni più rapide) ma è fatto di corsa giusto per provare se riesco a visualizzare le foto.

1) Visualizza il nome dei file contenuti nelle tabelle(quando funzionerà tutto metterò tutto in un'unica tabella)
PHP:
//Connessione al database
		$connesione=
					mysql_connect('localhost','root','') or die ("Connessione Fallita");
					
					mysql_select_db('vestiti') or die ("Selezione database Fallita");
		
		//Query per ottenere l'elenco dei file
					$query= "SELECT * FROM maglia";
					$risultato=mysql_query($query);
		
		//Controlo presenza file, e stampa del risultato
					if(mysql_num_rows($risultato))
					
					while	($tmp = mysql_fetch_array($risultato))
							{
								echo "<p><a href=\"open.php?id=$tmp[id]\">$tmp[nome]</a></p>\n";
							
							}
					else
							{
								echo "<p>Nessun file presente nel database</p>";
							}

2) cliccando sul nome del file dovrebbe aprire la foto

PHP:
//Connessione al database
		$connesione=
					mysql_connect('localhost','root','') or die ("Connessione Fallita");
					
					mysql_select_db('vestiti') or die ("Selezione database Fallita");
		
		//Query per ottenere l'elenco dei file
					$query= "SELECT * FROM maglia";
					$risultato=mysql_query($query);
		
		//Controlo presenza file, e stampa del risultato
					if(mysql_num_rows($risultato))
					
					while	($tmp = mysql_fetch_array($risultato))
							{
								echo "<p><a href=\"open.php?id=$tmp[id]\">$tmp[nome]</a></p>\n";
							
							}
					else
							{
								echo "<p>Nessun file presente nel database</p>";
							}

Attualmente mi fa vedere i file contenuti, ma quando clicco per aprire l'immagine esce un'icona piccolissima di un'immagine con l'angolo in basso a destra tagliato
 
Ultima modifica:
Ragazzi penso di aver risolto!

Nel file upload_file.php ho fatto così:
PHP:
//Nella funzione move_uploaded_file come secondo parametro va messa la seguente variabile, contenente indirizzo e nome del file
			
			$pathAndName ="{$_FILES['img']['name']}";

Ho tolto il percorso(C:\\etc...)

Mentre nel file open.php all'ultima riga di codice ho fatto così:

PHP:
echo "<img src=",$img["indirizzo"],">";

l'immagine ora me la fa vedere
 

Discussioni simili