Visualizzazione risultati 1 fino 6 di 6
Like Tree2Likes
  • 1 Post By GraphOGLRisorse
  • 1 Post By dreadnaut

Discussione: eliminare una sottocartella e file compresi

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

    Predefinito eliminare una sottocartella e file compresi

    ciao e buongiorno sto tentando di eliminare una sottocartella situata in documenti/ ma non funziona chiedo aiuto ho provato a scrivere il code ma mi sono fermato perchè non so come continuare :(

    Codice PHP:
    <input type="hidden" name="username" value="username" />
    <input type="hidden" name="Selection" id="Selection" value="-1">
    <div>Seleziona la cartella da eliminare.</div>
    <select size="1" name="username" id="username">
    <?php
    $directory
    = 'documenti/' . $username;
    $filesContents = Array();
    $files = scandir( $directory ) ;

    foreach(
    $files as $file )
    {
    if ( !
    is_dir( $file ) )
    {
    $filesContents[$file] = file_get_contents($directory , $file);
    echo
    "<option>" . $file . "</option>";
    }
    }
    ?>
    </select>
    <br>
    <br>
    <form method="post">
    <input type="submit" value="Elimina" name="file">
    </form>
    <hr>
    <?php
    if($_SERVER["REQUEST_METHOD"] == "POST"){

    foreach (
    $_POST['file'] as $file) {

    }
    if(
    file_exists($file)) {
    unlink($file);
    }
    elseif(
    is_dir($file)) {
    rmdir($file);
    }
    echo
    "Files deleted successfully.";
    ?>
    Ultima modifica di dreadnaut : 31-03-2023 alle ore 23.23.35 Motivo: + tag [php] attorno al codice

  2. #2
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,285

    Predefinito

    Così, ad occhio, ci sono alcuni errori. Manca ad esempio la chiusura finale } relativa al controllo di $_SERVER["REQUEST_METHOD"]. Poi mancano i valori dichiarati con "value" nei tag <option> ed il <select></select> con relativo contenuto, va messo dentro i tag <form> </form> e un po' di altre cose.

    Inoltre, i valori delle scelte della <select></select>, nel suo caso, dovranno essere dinamici e non statici.

    Ad ogni modo, suggerisco di guardare questa guida che mi sembra spieghi bene come creare e gestire il tutto con PHP.

    PS. In generale, quando si blocca a cusa di un qualche errore, non ometta di riportarlo (anche se le può sembrare irrelevante), così da faciltarci nel darle aiuto. Srebbe anche gradito (anche da parte di altri utenti), l'uso del tag BB per codice PHP (sono solo dei suggerimenti )

    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 31-03-2023 alle ore 16.16.50
    fcfclean likes this.

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

    Predefinito

    grazie :)

  4. #4
    fcfclean non è connesso Utente
    Data registrazione
    17-09-2014
    Messaggi
    140

    Predefinito

    ciao ho cambiato tutto :) ma quando provo a eliminare la sottocartella mi appare la scritta directory nome creata con successo è pur vero che nella stessa pagina vi è per creare la sottocartella ma non elimina :(
    Codice PHP:
    <?php
    $username
    = $_POST['username'] ?? ""; // ← se manca il parametro, usiamo una stringa vuota

    function percorso_valido($dir) {
    // il nome può contenere solo lettere, numeri, e '-'
    if (!preg_match("/[a-zA-Z0-9-]+/", $dir)) {
    return
    false;
    }
    // la directory non deve già esistere
    if (is_dir($dir)) {
    return
    false;
    }
    // tutti i controlli sono passati? OK!
    return true;
    }

    // mkdir viene chiamata solo se il percorso è valido
    $creazione_riuscita = percorso_valido($username)
    &&
    mkdir("documenti/{$username}");

    ?>
    <form method="post">
    <h6>crea cartella utente</h6>
    <input type="text" name="username" id="username" placeholder="Nuova cartella" />
    <button type="submit">Crea</button>
    </form>
    <?php if ($creazione_riuscita): ?>
    <div>
    Directory <code><?= htmlspecialchars($username) ?></code> creata con successo!
    </div>
    <?php endif ?>

    <hr/>

    <h6>elimina cartella utente</h6>

    <?php
    function remove_directory($directory) {
    if (!
    is_dir($directory)) return;

    $contents = scandir($directory);
    unset(
    $contents[0], $contents[1]);

    foreach(
    $contents as $username) {
    $current_object = $directory.'/'.$username;
    if (
    filetype($current_object) === 'username') {
    remove_directory($current_object);
    } else {
    unlink($current_object);
    }
    }

    rmdir($directory);
    }

    if (
    $_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['username'])) {
    $directory = basename($_POST['username']);
    if (
    $directory[0] != '.') remove_directory("documenti/".$username);
    }

    ?>

    <form action="" method="post">
    <input type="text" name="username" id="username" placeholder="Username" autofocus="true"/>
    <input type="submit" name="username"/>
    </form>
    Ultima modifica di alemoppo : 01-04-2023 alle ore 17.01.12 Motivo: [QUOTE] -> [PHP]

  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Nel codice sopra, le righe che creano la directory vengono eseguite ogni volta che carica la pagina, quindi il risultato che vedi non è inaspettato. Dovrai aggiungere un controllo simile a quello che hai per la cancellazione.

    Mi permetto ulteriori suggerimenti generici:
    - qua sul forum, metti il codice dentro ad un tag [php]...[/php], così è più facile da leggere
    - più le pagine si complicano, più è facile confondersi; per tenere le cose in ordine, è utile separate il codice che "fa il lavoro" da quello che genera l'html della pagina
    - puoi anche mettere le funzioni in un file separato, per fare ordine

    Ad esempio:

    Codice PHP:
    <?php
    require 'funzioni-utili.php';

    $azione = $_POST['azione'] ?? '';
    $utente = $_POST['username'] ?? '';

    $risultato = match ($azione) {
    'crea-directory' => creaNuovaDirectory($utente),
    'elimina-directory' => eliminaDirectory($utente),
    default =>
    false,
    }

    function
    eliminaDirectory(string $utente) : string
    {
    if (
    remove_directory($utente)) {
    return
    "Directory {$utente} eliminata!";
    }

    return
    "Non sono riuscito ad eliminare la directory {$utente}";
    }
    ?>
    <!doctype html>
    <html>
    ...


    <?php if ($risultato): ?>
    <div class="banner success">Fatto! <?= $risultato ?></div>
    <?php endif ?>

    <form method=post>
    <h2>Crea directory utente</h2>
    <input type=hidden name=azione value=crea-cartella/>
    ...
    </form>

    <form method=post>
    <h2>Elimina directory utente</h2>
    <input type=hidden name=azione value=elimina-cartella/>
    ...
    </form>

    ...
    </html>
    Ultima modifica di dreadnaut : 01-04-2023 alle ore 19.57.39
    fcfclean likes this.

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

    Predefinito

    ciao grazie x l'aiuto :) per eliminare la sottocartella ho risolto cosi
    Codice PHP:
    <?php
    function remove_directory($directory) {
    if (!
    is_dir($directory)) return;

    $contents = scandir($directory);
    unset(
    $contents[0], $contents[1]);

    foreach(
    $contents as $object) {
    $current_object = $directory.'/'.$object;
    if (
    filetype($current_object) === 'username') {
    remove_directory($current_object);
    } else {
    unlink($current_object);
    }
    }

    rmdir($directory);
    }

    if (
    $_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['username'])) {
    $username = basename($_POST['username']);
    if (
    $username[0] != '.') remove_directory("documenti/$username");
    }

    ?>
    <form action="" method="post">
    <input type="text" name="username"/>
    <input type="submit" name="delete"/>
    </form>

Regole di scrittura

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