Visualizzazione risultati 1 fino 8 di 8
Like Tree1Likes
  • 1 Post By dreadnaut

Discussione: registrazione utente crea cartella con mkdir

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

    Predefinito registrazione utente crea cartella con mkdir

    ciao e ben ritrovati sto creando un sito con registrazione e login e area privata ogni utente che si registra crea una cartella email la mia domanda è come posso fare in modo che ogni utente che esegue l'accesso e nel suo profilo legga il contenuto della cartella con i file pdf sul suo profilo? per creare la cartella in fase di registrazione ho fatto cosi: ogni utente ha un suo id

    $result = mysqli_query($con, $query);
    $dirname = "uploads/".$email;
    mkdir($dirname);

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

    Predefinito

    Usare email come nomi di directory è rischioso: un indirizzo potrebbe contenere caratteri come . e / e creare grossi problemi. Puoi sostituirli, ma due utenti potrebbero iscriversi con indirizzi molto simili, e finire nella stessa directory.

    Alternativamente, puoi usare un hash dell'indirizzo, che dovrebbe essere unico (e.g., sha1()), o complicare il sistema con id o nomi per gli utenti, etc. (più flessibile, ma più complesso).

    Se aggiungi del "sale" all'hash, diventa più facile tenere le directory dei vari utenti nascoste al pubblico:

    Codice PHP:
    # Se conosco l'email posso scovare la directory
    $hash_liscio = sha1($email);

    # Finché il $segreto resta segreto, è difficile indovinare la directory
    $segreto = "...";
    $hash_più_sicuro = sha1($segreto . $email);

    Detto questo, al tuo sistema di registrazione andrà affiancato un sistema di login. Quando l'utente si logga, puoi salvarne l'email nella sessione (vedi sessioni in PHP), e quando ti serve il percorso di un file aggiungi il prefisso corrispondente all'utente.

    Codice PHP:
    $directory_utente = sha1($segreto . $_SESSION['email']);
    $tutti_i_pdf = glob("dati_utenti/{$directory_utente}/*.pdf");

    -------
    Ipotetici passi successivi che mi vengono in mente, ma non sono necessari:
    - raccogli il codice che crea le directory e ti dice dove trovare i file in una classe, che prende l'email come parametro, così la funzionalità è in posto solo;
    - passi anche il segreto come parametro di questo classe, così puoi tenerlo al sicuro in un file di configurazione, fuori dal codice.
    - è saggio che un file di configurazione abbia un nome che comincia con ., per rimanere nascosto al pubblico.
    Ultima modifica di dreadnaut : 14-03-2023 alle ore 23.28.53
    fcfclean likes this.

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

    Predefinito

    grazie

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

    Predefinito

    salve e buona domenica :) ho cambiato tutto ora la cartella utente la creo io ho messo anche la funzione seleziona cartella ma quando provo a inviare un file lo mette dentro la directory documenti/ e no documenti/nome cartella non riesco a capire dove sbaglio :(

    Codice PHP:
    <?php
    // Check if the form was submitted
    if($_SERVER["REQUEST_METHOD"] == "POST"){
    // Check if file was uploaded without errors
    if(isset($_FILES["file"]) && $_FILES["file"]["error"] == 0){
    // Get the subdirectory from the select element
    $subdir = $_POST["subdir"];
    // Set the destination path and filename
    $target_dir = "documenti/" . $subdir . "/";
    $target_file = $target_dir . basename($_FILES["file"]["name"]);
    // Move the uploaded file to the destination
    if(move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)){
    echo
    "The file ". basename( $_FILES["file"]["name"]). " has been uploaded to " . $subdir . ".";
    } else{
    echo
    "Sorry, there was an error uploading your file.";
    }
    } else{
    echo
    "Error: " . $_FILES["file"]["error"];
    }
    }
    ?>
    <h6>carica documento</h6>
    <?php
    $subdir
    = glob("documenti/*");
    ?>

    <form action="admin.php" method="post" enctype="multipart/form-data">
    <label for="select-cartella">Scegli la cartella di destinazione</label>
    <select name="subdir" id="subdir">
    <?php foreach($subdir as $subdir): ?>
    <option value="<?= htmlspecialchars($subdir) ?>"><?= htmlspecialchars(basename($subdir)) ?></option>
    <?php endforeach ?>
    </select>
    <input type="file" name="file" id="file">
    <input type="submit" value="Upload File" name="submit">
    </form>
    Ultima modifica di dreadnaut : 26-03-2023 alle ore 14.54.26 Motivo: + tag [php] per il codice ed indentazione

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

    Predefinito

    Qualcosa non quadra...

    I tag <option> mi sembra contengano documenti/nome come valore, ma nel codice sopra aggiungi un secondo documenti/:

    Codice PHP:
    // Get the subdirectory from the select element
    $subdir = $_POST["subdir"];
    // Set the destination path and filename
    $target_dir = "documenti/" . $subdir . "/";
    Ma se i file finiscono in documenti/, vuole dire che $subdir è vuoto a quel punto. Controlla cosa finisce nell'HTML del form, e poi verifica che i parametri siano corretti — ad esempio, puoi usare id_dir per assicurarti di avere una directory valida.

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

    Predefinito

    grazie :)

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

    Predefinito

    ciao e buongiorno l'errore era sotto la scritta // Set the destination path and filename infatti ci andava solo la/ :) ora va alla grande ;) ma ho un problema a rendere visibile la sottocartella nome utente nella pagina profilo.php vedo tutti i nomi delle sottocartelle ho provato a inserire alla fine del codice strtolower username ma non funziona anzi da errore 84 86 questo è il codice grazie :)

    Codice PHP:
    <?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
    $url = urlencode($path);
    // Create a download link
    echo "Documento: <a href='download.php?file=$url'>$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".strtolower($username));
    ?>
    Ultima modifica di dreadnaut : 28-03-2023 alle ore 19.17.18 Motivo: + tag [php] attorno al codice

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

    Predefinito

    risolto:)

Regole di scrittura

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