| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  18-11-2008, 15:34 | #1 | 
| Member Iscritto dal: Jun 2006 
					Messaggi: 188
				 | 
				
				[Php]-Problema overwrite con upload file
			 
		Salve ragazzi, volevo un consiglio riguardo questo "semplice" ma fastidioso problemino che sto avendo. Per farla breve...ho scritto un codice che mi permette di gestire testi e immagini (un piccolo admin) Il problema è che non riesco a filtrare bene i file che vengono uploadati. Non riesco a bloccare il processo di upload quando l'utente scarica un file (identico) ad un altro file già esistente nella cartella del upload. $desc = (rtrim (strip_tags (stripslashes (strtolower (htmlentities ($_POST ['desc' ])))))); $path = $_POST ['avatarfile' ]; $pubb = ['pubblica' ]; $conn = mysql_connect ("localhost" ,"root" ,"" ); $db = mysql_select_db ("upload" ,$conn)or die ("Problemi con la connessione" . mysql_error() ); $query="Select path from upimage WHERE path='" . $path. "'" ; $risp = mysql_query ($query, $conn) or die ("Errore nella query: " . mysql_error() ); $array= mysql_fetch_array ($risp); Qui la connessione al database, la query che mi estrae solo il path(campo della tabella) uguale al valore che viene passato dalla variabile del form "avatarfile" e il ciclo mysql_fetch_array per la verifica ciclica. Qui sotto invece l'if che mi crea i problemi. Mi fa uploadare lo stesso l'identico file. if ($array[ path] === "$path" ) { echo "File già esistente! - <a href=\"upload_form.html\">back</a>" ; exit() ; } else { if ($_FILES ['avatarfile' ]['error' ] == UPLOAD_ERR_OK ) { $ext = strtolower (pathinfo ($_FILES ['avatarfile' ]['name' ], PATHINFO_EXTENSION )); switch ($ext) { case 'jpg' : case 'jpeg' : $fileType = 'image/jpeg'; break; case 'gif': $fileType = 'image/gif' ; break; case 'png': $fileType = 'image/png' ; break; case 'bmp': $fileType = 'image/bmp' ; break; default: echo "File non valido - <a href=\"upload_form.html\">back</a>" ; exit() ; } $destfile = './images/' .basename ($_FILES ['avatarfile' ]['name' ]); $ret = @move_uploaded_file ($_FILES ['avatarfile' ]['tmp_name' ], $destfile); $fsize = filesize ($destfile); $ins = mysql_query ( "insert into upimage(path,size,testo,pubblica,data) VALUES (\"$destfile\",\"$fsize\",\"$HTTP_POST_VARS[desc]\",\"$pubb\",now())" ) ; } } Aspetto vostri consigli Grazie mille | 
|   |   | 
|  18-11-2008, 15:34 | #2 | 
| Member Iscritto dal: Jun 2006 
					Messaggi: 188
				 | 
		Verificando meglio il codice che ho postate ho notato che se attribuisco alla variabile $path il valore dell'input avatarfile la condizione non potrà mai essere vera in quanto il valore che passa attraverso l'input non è uguale a quello inserito nel database (mio errore!). Per ovviare ho provato ad attribuire alla variabile "$path" la variabile "$destfile" ($path = $destfile) che contiene il nome esatto che verrà poi copiato nel database. Purtroppo però la modifica non ha dato esito positivo. Il sistema continua a non filtrare bene gli upload. consigli? | 
|   |   | 
|  18-11-2008, 18:51 | #3 | 
| Senior Member Iscritto dal: Dec 2005 
					Messaggi: 558
				 | 
		potresti usare la funzione is_file che ti controlla direttamente se il file esiste su disco (nel caso dai errore) o meno (in questo caso continui l'upload normalmente)
		 | 
|   |   | 
|  19-11-2008, 11:26 | #4 | 
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | 
		Non mettere i file su disco con il nome originale, ma rinominali usando il loro id sul database. Mi spiego: inserisci il nome del file in una tabella MySQL che ha come campo semplicemente ID (chiave, autoincrementante), NomeDelFile, Utente. A questo punto recupera l'ultimo ID inserito e rinomina il file usando questo id.
		 | 
|   |   | 
|  19-11-2008, 17:09 | #5 | 
| Member Iscritto dal: Jun 2006 
					Messaggi: 188
				 | 
		grazie per i vostri consigli! Faccio alcune prove e vi farò sapere. | 
|   |   | 
|  29-12-2008, 16:18 | #6 | 
| Member Iscritto dal: Jun 2006 
					Messaggi: 188
				 | 
		Salve ragazzi, scusate se vi ringrazio solo ora ma sono stato fuori per qualche sett. Riguardo il mio vecchio problema...ho utilizzato etrambe i metodi che mi avete consigliato e mi son trovato bene. grazie | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 01:04.









 
		 
		 
		 
		







 
  
 



 
                        
                        










