Visualizzazione risultati 1 fino 9 di 9
Like Tree1Likes
  • 1 Post By alemoppo

Discussione: lista file sottocartella elimina file

  1. #1
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    139

    Predefinito lista file sottocartella elimina file

    Buongiorno sto tentando di eliminare un file ho una pagina dove vedo il contenuto delle sottocartelle degli utenti il problema è che elimina tutti i file lasciando le sottocartelle vuote io vorrei che eliminasse solo il file cliccato ho fatto cosi:
    Codice PHP:
    lista file <?PHP


    // Define a function to list files and subfolders
    function list_files($dir) {
    // Get an array of files and subfolders
    $files = scandir($dir);
    // Loop through the array
    foreach ($files as $file) {
    // Skip the current and parent directories
    if ($file != "." && $file != "..") {
    // Get the full path of the file or folder
    $path = $dir . "/" . $file;
    // Check if it is a file
    if (is_file($path)) {
    // Get the file name
    $name = basename($path);
    // Encode the file path
    $del = unlink($path);
    // Create a download link
    echo "Documento: <a href='delfile.php?file=$del'>$name</a><br>";
    }
    // Check if it is a folder
    if (is_dir($path)) {
    // Print the folder name
    echo "Cartella: <b>$file</b><br>";
    // Call the function recursively
    list_files($path);
    }
    }
    }
    }

    // Call the function with the main directory
    list_files("documenti/");
    ?>
    --------------------
    delfile.php
    <?php
    if(isset($_GET['file'])){
    $del=$_GET['name'];
    unlink($del) ;
    }
    ?>
    <?php
    echo "<script> location.href='pagina.php'; </script>";
    exit;
    ?>

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,175

    Predefinito

    La funzione list_files() mi sembra evidente che elimina tutti i file della cartella che le passi: elimina tutti i file e dopo averli eliminati ti scrive un link per ogni file, con il parametro get "file" che vale TRUE o FALSE a seconda che il file sia stato eliminato o meno.

    Ti consiglio quindi di riguardarti quella funzione, in particolare cosa esegue ciascuna riga.
    Se non ti è chiaro qualcosa, ovviamente, chiedi pure.

    Ciao!
    Ultima modifica di alemoppo : 30-04-2023 alle ore 12.33.30
    fcfclean likes this.

  3. #3
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    139

    Predefinito

    salve scusate la risposta in ritardo ho risolto usando tipo file manager :) ma ora ho un altro problema devo eliminare due campi ho 2 tabelle con una si chiama chats e l'altra conversations ho creato un form e un file delchat.php questo è ciò che ho fatto ma non va :(

    ------------------------
    CREATE TABLE `chats` (
    `chat_id` int(11) NOT NULL,
    `from_id` int(11) NOT NULL,
    `to_id` int(11) NOT NULL,
    `message` text NOT NULL,
    `opened` tinyint(1) NOT NULL DEFAULT 0,
    `created_at` datetime NOT NULL DEFAULT current_timestamp()
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    -- --------------------------------------------------------

    --
    -- Table structure for table `conversations`
    --

    CREATE TABLE `conversations` (
    `conversation_id` int(11) NOT NULL,
    `user_1` int(11) NOT NULL,
    `user_2` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    Codice PHP:
    <ul id="chatList"
    class="list-group mvh-50 overflow-auto">
    <?php if (!empty($conversations)) { ?>
    <?php

    foreach ($conversations as $conversation){ ?>
    <li class="list-group-item">
    <p>Elimina chat</p>
    <form action="delchat.php" method="post" enctype="multipart/form-data">
    <input type="hidden" value="<?=$user['username']?>">
    <input type="submit" name="del" value="Elimina chat">
    </form>
    <a href="chat.php?user=<?=$conversation['username']?>"
    class="d-flex
    justify-content-between
    align-items-center p-2">
    <div class="d-flex
    align-items-center">
    <img src="uploads/<?=$conversation['p_p']?>"
    class="w-10 rounded-circle">
    <h3 class="fs-xs m-2">
    <?=$conversation['username']?><br>
    <?=$conversation['name']?><br>
    <small>
    <?php
    echo lastChat($_SESSION['user_id'], $conversation['user_id'], $conn);
    ?>
    </small>
    --------------------------------------
    delchat.php

    <?php

    session_start
    ();

    # check if the user is logged in
    if(isset($_POST['del'])){

    # database connection file
    include 'app/db.conn.php';

    # get the logged in user's username from SESSION
    $user_id = $_SESSION['user_id'];
    $chat_id = $_POST['chat_id'];
    $conversation_id = $_POST['conversation_id'];

    $sql = "DELETE chats,conversations FROM chats
    INNER JOIN
    conversation_id ON conversations.ref = chats.chat_id
    WHERE
    chats.chat_id = 1;'"
    );
    $stmt= $conn->prepare($sql);
    $stmt->execute([$chat_id, $conversation_id]);


    header("Location: home.php");
    exit;
    }

    ?>
    Ultima modifica di fcfclean : 06-05-2023 alle ore 11.42.56

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,175

    Predefinito

    $stmt->error contiene qualche errore?
    Se stampi $sql e lo esegui da phpMyAdmin ottieni errori?
    Perché nella query c'è un singolo apice chiuso mai aperto?

    Ciao!

  5. #5
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    139

    Predefinito

    ciao ho tolto apice ma da eerore : Parse error: Unclosed '{' on line 8 does not match ')' in C:\xampp\htdocs\sito\delchat.php on line 21 che sarebbe chats.chat_id = 1;"); forse perchè chat_id parte da 4 e no 1?

  6. #6
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    139

    Predefinito

    eliminare due colonne non è facile :(

    ho provato cosi ma da sempre errore
    Codice PHP:
    <?php

    session_start
    ();

    # check if the user is logged in
    if(isset($_POST['del'])){

    # database connection file
    include 'app/db.conn.php';

    # get the logged in user's username from SESSION
    $username = $_SESSION['username'];
    $chat_id = $_POST['chat_id'];
    $conversation_id = $_POST['conversation_id'];

    $sql = "DELETE chat_id, conversation_id
    FROM chats
    INNER JOIN conversations ON chat_id.key = conversation_id.key
    WHERE conversation_id;"
    );
    $stmt= $conn->prepare($sql);
    $stmt->execute([$chat_id, $conversation_id]);


    header("Location: home.php");
    exit;
    }

    ?>
    Ultima modifica di fcfclean : 06-05-2023 alle ore 20.15.41

  7. #7
    kairos2020 non è connesso Utente giovane
    Data registrazione
    16-04-2020
    Residenza
    Castegnato (BS)
    Messaggi
    47

    Predefinito

    Buonasera,
    quasi certamente ho frainteso, se così fosse chiedo scusa.
    $sql = "DELETE chat_id, conversation_id FROM chats INNER JOIN conversations ON chat_id.key = conversation_id.key
    WHERE conversation_id;");
    Non credo che questa query possa funzionare, e non ne capisco la logica, ma questo solo per limiti miei.
    La sintassi mysql per cancellare un record è semplice :
    DELETE FROM table_name WHERE condition;
    Ovvero cancella dalla tabella <table_name> i record che corrispondono alla condizione <condition>.
    Non puoi cancellare dei campi..., la struttura dei record è gestita diversamente dai record stessi.
    Non sono in grado di suggerirti una soluzione ad hoc per il tuo problema, non riesco a comprenderlo, però
    se vuoi cancellare due record in due tabelle diverse io farei così (schematizzo)

    apro una transazione (per essere sicuro che entrambe le query vadano a buon fine)
    poi due query :
    delete from chats WHERE chat_id = x ( valore del post)
    delete from conversation WHERE conversation_id = x ( valore del post)

    fatto.
    Spero di essere stato utile.

  8. #8
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    139

    Predefinito

    ciao e scusa in ritardo per la risposta e grazie per avermi risposto :) proverò cosi come mi hai detto

  9. #9
    kairos2020 non è connesso Utente giovane
    Data registrazione
    16-04-2020
    Residenza
    Castegnato (BS)
    Messaggi
    47

    Predefinito

    Ciao, se le due tabelle sono collegate, ovvero tutti i
    record di conversation sono 'figli' di chats, come potrebbe essere ad esempio una fattura con le sue righe di dettaglio, potresti utilizzare una caratteristica molto utile dei Db relazionali quali mysql, l'integrità referenziale, in tal modo cancellando il record in chats automaticamente il Db cancella, a cascata, i record figli nella tabella figlia. Nella pratica é molto semplice da applicare e INNO-DB lo supporta.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •