[PHP Unlink]

Marco Candian

Nuovo Utente
26 Ott 2014
33
0
6
Buongiorno a tutti,

vi vorrei esporre il mio problema: ho uploadato delle immagini memorizzando l'indirizzo nella tabella mysql "1_album", ora vorrei poter cancellare solo le immagini legate al relativo utente.

Questo è il codice che utilizzo:

PHP:
//conto i record nella tabella 1_album per creare un ciclo che li cancella tutti
$conta = "SELECT COUNT(*) from 1_album WHERE i_art_id = '$art_id'";
$conto = @mysql_query ($conta);
$tot = @mysql_fetch_array ($conto);
$sum2 = $tot['conto'];


for ($mul = 0; $sum2 <= $mul; $mul++) {
  // recupero l'id dell'ultimo articolo inserito per abbinargli l'immagine nella tabella 1_album
$ctrl_img = ("SELECT * FROM 1_album WHERE i_id_user='$i_id_user' ORDER BY i_id_user desc limit 1");
$result_ctrl_img  = @mysql_query ($ctrl_img) or die (mysql_error());
$row_ctrl_img  = mysql_fetch_array($result_ctrl_img);
$i_immagine = $row_ctrl_img ['i_immagine'];
$i_thumb = $row_ctrl_img ['i_thumb'];


if (unlink($i_immagine)) {
  echo '';
}else{
  echo '';
}

if (unlink($i_thumb)) {
  echo '';
}else{
  echo '';
} 
//cancello il record relativo all'immagine eliminata
$delete_album= ("DELETE FROM 1_album WHERE i_id_user='$i_id_user' ORDER BY i_id_user desc limit 1");
$result_delete_album = @mysql_query ($delete_album) or die (mysql_error());

}

La pagina cancella effettivamente i file, ma poi continua come se il ciclo non fosse terminato.
Cosa sbaglio?
Grazie mille!
Marco
 
Ultima modifica:
Non avevom postato un pezzo di codice...ho integrato....grazie per la risposta...mi sembra di averla chiusa dopo l'ultima query.
 
ciao
secondo me sbagli il ciclo for
se provi questo script come hai fatto tu
PHP:
<?php
//....
$sum2=5;//ipotizziamo
echo "$sum2 <br>";
for ($mul = 0; $sum2 <= $mul; $mul++) {   
    echo "$mul <br>";
}
//....
?>
non ti da nulla (a parte l'echo della variabile iniziale)
questo invece cicla 5 volte
PHP:
<?php
//.....
$sum2=5;//ipotizziamo
echo "$sum2 <br>";
for ($mul = 0; $mul < $sum2; $mul++) {   
    echo "$mul <br>";
}
//....
?>
prova a invertire
 
Ho risolto....grazie mille a tutti!
Ho invertito il controllo delle variabili sul SELECT COUNT() e spezzato il codice rimandando alla pagina successiva l'eliminazione dei record nelle tabelle con la query DELETE FROM.

Posto il codice:

PHP:
// recupero l'id dell'ultimo articolo inserito per abbinargli l'immagine
$ctrl_login = ("SELECT * FROM 1_Articoli WHERE art_email='$email' order by art_id desc limit 1");
$result_ctrl_login = @mysql_query ($ctrl_login) or die (mysql_error());
$row_ctrl_login = mysql_fetch_array($result_ctrl_login);
$art_id = $row_ctrl_login['art_id'];
$art_id_user = $row_ctrl_login['art_id_user'];
$art_immagine = $row_ctrl_login['art_immagine'];
$art_thumb = $row_ctrl_login['art_thumb'];

if (unlink($art_immagine)) {
  echo '';
}else{
  echo '';
}

$art_thumb = $row_ctrl_login['art_thumb'];
if (unlink($art_thumb)) {
  echo '';
}else{
  echo '';
}

//conto i record nella tabella 1_album per creare un ciclo che li cancella tutti
$conta = "SELECT COUNT(*) from 1_album WHERE i_art_id = '$art_id'";
$conto = @mysql_query ($conta);
$tot = @mysql_fetch_array ($conto);
$sum2 = $tot['conto'];


for ($mul = 0; $mul < $sum2; $mul++) {
// recupero l'id dell'ultimo articolo inserito per abbinargli l'immagine nella tabella 1_album
$ctrl_img = ("SELECT * FROM 1_album WHERE i_id_user='$i_id_user' ORDER BY i_id_user desc limit 1");
$result_ctrl_img  = @mysql_query ($ctrl_img) or die (mysql_error());
$row_ctrl_img  = mysql_fetch_array($result_ctrl_img);
$i_immagine = $row_ctrl_img ['i_immagine'];
$i_thumb = $row_ctrl_img ['i_thumb'];
$i_id_user = $row_ctrl_img ['i_id_user'];

if (unlink($i_immagine)) {
  echo '';
}else{
  echo '';
}

if (unlink($i_thumb)) {
  echo '';
}else{
  echo '';
}  

}

}else{
  //controllo sessione con esito negativo
  @header("Location: ../0_login_iscrizioni/0_form_login.php");
}
 
Ultima modifica di un moderatore:
ciao
scusa, ma per capire. immagino che tu abbia una tabella (1_album) fatta circa in questo modo
Codice:
id int(xy) autoincrement primarykey
i_id_user int(xy)
i_immagine varchar(xy)
i_thumb varchar(xy)
//e forse altri campi
tu vuoi per un determinato utente (caratterizzato da i_id_user) eliminare tutte le sue immagini e i record relativi su 1_album, è così?
se è così perche fai tutto quell'ambaradan?
basta qualcosa di più semplice
PHP:
<?php
//dati di connessione
$i_id_user=$_POST['user']; //immagino che in qualche modo tu determini l'user da eliminare, da un form?
$query="SELECT * FROM 1_album WHERE i_id_user=$i_id_user";//nota se i_id_user è un itero NON devi mettere gli apici
$ris=mysql_query($query);
while($riga=mysql_fetch_assoc($ris)){
    $i_immagine = $riga['i_immagine'];
    $i_thumb = $riga['i_thumb'];
    //prima del'unlink converrebbe verificare se i file immagini esistono
    if(unlink($i_immagine)){
        echo "$i_immagine eliminata <br>";
    }else{
        echo "$i_immagine eliminazione non riuscita <br>";
    }
    if(unlink($i_thumb)){
        echo "$i_thumb eliminata <br>";
    }else{
        echo "$i_thumb eliminazione non riuscita <br>";
    }
}//e con questo hai eliminato le immagini
//ora eliminiamo tutti i record di $i_id_user
$query="DELETE FROM 1_album WHERE i_id_user=$i_id_user";
if(mysql_query($query)){
    echo "tutti i recordi di $i_id_user sono stati eliminati<br>";
}else{
    echo "errore<br>";
}
//....
?>
poi un paio di suggerimenti
abbandona le vecchie istruzioni php mysql_... deprecate e passa alle nuovie mysqli_...
non usare i silent @, gli errori non vanno nascosti, ma eliminati

poi quando posti del codice racchiudilo negli appositi bccode (riga formattazione del post "inserisci" -> "codice" e scegli code o html o php
 
Grazie mille! Non sono un esperto e sto studiando...per il momento mi "arrangio" come possso e con dreamweaver...
Ancora Grazie!
Marco
 

Discussioni simili