[PHP Unlink]

Discussione in 'PHP' iniziata da Marco Candian, 15 Febbraio 2017 alle 16:48.

Tag (etichette):
  1. Marco Candian

    Marco Candian Nuovo Utente

    Registrato:
    26 Ottobre 2014
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    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: 15 Febbraio 2017 alle 17:28
  2. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    15.020
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    ciao
    così a naso, verifica di aver chiuso la graffa del for, da quello che hai postato sembrebbe di no
     
  3. Marco Candian

    Marco Candian Nuovo Utente

    Registrato:
    26 Ottobre 2014
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Non avevom postato un pezzo di codice...ho integrato....grazie per la risposta...mi sembra di averla chiusa dopo l'ultima query.
     
  4. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    15.020
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    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
     
  5. Marco Candian

    Marco Candian Nuovo Utente

    Registrato:
    26 Ottobre 2014
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Hai ragione! Funziona! Però non mi cicla la query DELETE...
     
  6. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    15.020
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    ciao
    cosa intendi per "non mi cicla il delete"?
     
  7. Marco Candian

    Marco Candian Nuovo Utente

    Registrato:
    26 Ottobre 2014
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    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: 16 Febbraio 2017 alle 17:01
  8. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    15.020
    Mi Piace Ricevuti:
    68
    Punteggio:
    48
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    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
     
  9. Marco Candian

    Marco Candian Nuovo Utente

    Registrato:
    26 Ottobre 2014
    Messaggi:
    20
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Grazie mille! Non sono un esperto e sto studiando...per il momento mi "arrangio" come possso e con dreamweaver...
    Ancora Grazie!
    Marco
     
Sto caricando...

Condividi questa Pagina