sostituzione di un file immagine da form

  • Creatore Discussione Creatore Discussione yok
  • Data di inizio Data di inizio

yok

Utente Attivo
3 Set 2009
62
0
0
Buongiorno!
Ho una galleria di immagini dove l'utente, una volta inserito il titolo della foto, una descrizione e la foto stessa può modificare questi parametri attraverso un form(che recupera i dati già presenti su DB).
Il mio problema è soltanto relativamente all'aggiornamento delle foto, cioè se io carico una nuova foto nella stessa posizione della vecchia(cartella "/foto/") non riesco ad eliminare quest'ultima dando alla nuova lo stesso nome della vecchia.

Questo è l'intero blocco di codice, mi sembrava di aver fatto tutto giusto ma non va. Se elimino la funzione file_exists la funzione unlink funziona, altrimenti mi dice che il file che voglio rinominare già esiste.

Grazie, ciao!

PHP:
	$tit0=$_POST["titolo0"];

	$tit1=$_POST["titolo1"];

	$desc0=$_POST["descrizione0"];	

	$desc1=$_POST["descrizione1"];

	$img0=$_FILES['foto0']['name'];

	$img1=$_FILES['foto1']['name'];

include("connessione.php");

$inserimento="UPDATE descrizioni SET titolo0='$tit0', titolo1='$tit1', descrizione0='$desc0', descrizione1='$desc1' WHERE id=0";

$query=mysql_query($inserimento);


if (file_exists($img0)) {

$old_file0="foto/foto0.jpg";
if (!unlink($old_file0)) {
	echo"impossibile eliminare foto0";
}
}

    if (!move_uploaded_file($_FILES['foto0']['tmp_name'], 'foto/'.$_FILES['foto0']['name'])) {
      echo "<p><b>ATTENZIONE!</b><br />Errore nel caricamento dell'immagine_0!!<br /><br /> File <b>non</b>caricato</p>";}

	$nome_nuovo0="foto0.jpg";
	$new0="foto/".$nome_nuovo0;

	$old0="foto/".$_FILES['foto0']['name'];
	rename($old0, $new0);

if (!$query) {
	die("Errore nella query $query: " . mysql_error()); 
}



mysql_close();

echo"inserimento dati avvenuto";
 
dovresti stamparti il valore di $img0, perché magari il valore corrisponde veramente ad un file che non c'è.
 
ciao Eliox,
il file $img0 me lo riconosce, infatti me lo stampa, ciò che non riesce a fare è il passo successivo, eliminare la vecchia foto tramite unlink.

Quindi in sostanza, la parte che non funziona è solo questa:

if (file_exists($img0)) {

$old_file0="foto/foto0.jpg";
if (!unlink($old_file0)) {
echo"impossibile eliminare foto0";
}
}
 
Ultima modifica:
ciao Alessandrro,
volevo testare questo script su di una sola immagine per poi poterlo inserire in un contesto più ampio. Però, finchè non riesco a farlo su di una sola foto non posso andare avanti
 
domanda: ma file_exists funziona anche se deve controllare l'esistenza di un file immagine?
 
prova ad eliminare il controllo su unlink:
PHP:
if (file_exists($img0)) {
$old_file0="foto/foto0.jpg";
unlink($old_file0);
}
 
l'ho tolto ma il problema rimane:

"Warning: rename(foto/8531A_87175_60205.jpg,foto/foto0.jpg) [function.rename]: File exists in C:\wamp\www\gallery_2\visual_update.php on line 40"

In buona sostanza mi riconosce l'esistenza del nuovo file img ma in tutti i modi si rifiuta di cancelare il vecchio foto0.jpg.
 
Ciao!
è passato il 2009, auguri a tutti, siamo nel 2010 ma il mio problema di unlink persiste eroico e rompipalle.

Dunque vado al nocciolo. Questo passaggio viene eseguito correttamente:

PHP:
$old_file0="foto/foto0.jpg";
$old_file0_thumb="thumbs/foto/foto0.jpg";
unlink($old_file0);
unlink($old_file0_thumb);

quest'altro, che a me pare corretto e bello, non viene eseguito nemmeno con le intimidazioni:

PHP:
if (file_exists($_FILES['foto00']['name'])) {

$old_file0="foto/foto0.jpg";
$old_file0_thumb="thumbs/foto/foto0.jpg";
unlink($old_file0)
unlink($old_file0_thumb);}

qualcuno sa perchè mai?

Thanks!
 
Allora Ale, ho controllato con var_dump e, con un'immagine di nome "cornucopia_A.jpg" mi restituisce il valore:

string(16)"cornucopia_A.jpg"

corretto, no?

Il punto e virgola mancante me lo sono dimenticato in fase di copiatura, nello script originale c'è.

Grazie e alla prossima
 
ok, ho risolto!

il trucco sta nel sostituire "file_exists" con "is uploaded_file", a quel punto viene eseguito l'IF.

Grazie a tutti degli aiuti
Ciao!
 
Bravo! avevo omesso di scrivere che ho applicato is_uploaded_file con il file temporaneo, di conseguenza lo script funzionante è ora:

PHP:
if (is_uploaded_file($_FILES['foto0']['tmp_name'])) {

$old_file0="foto/foto0.jpg";

if(!unlink($old_file0)){
	echo"file0 NON cancellato";
}
else
{
	echo"file0 cancellato!!";
}

si sa mai che possa tornare utile utile a qualche altro principiante....

Ciao Alessandro, alla prossima, perchè sicuramente ci sarà una prossima volta.
 

Discussioni simili