PDA

View Full Version : [Php]-Problema overwrite con upload file


Ginos
18-11-2008, 14:34
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

Ginos
18-11-2008, 14:34
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?

Torav
18-11-2008, 17:51
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)

cionci
19-11-2008, 10:26
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.

Ginos
19-11-2008, 16:09
grazie per i vostri consigli!
Faccio alcune prove e vi farò sapere.

Ginos
29-12-2008, 15:18
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