[PHP] Informazioni upload

Discussione in 'PHP' iniziata da Frozzen, 18 Gennaio 2019.

  1. Frozzen

    Frozzen Nuovo Utente

    Registrato:
    18 Gennaio 2019
    Messaggi:
    13
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    Programmatore macchinari di stampaggio
    Località:
    Milano
    Buonasera a tutti ragazzi,

    Ho trovato in rete un form html con i classici bottoni "carica" e "seleziona file" con abbinato un file "upload.php".

    - È possibile caricare qualsiasi genere di file senza andare ad aggiungere le estensioni?

    - Posso far apparire in anteprima l'immagie di ciò che sto caricando?

    - Inoltre, ogni qualvolta che carico un file vorrei far uscire la scritta " File caricato con successo" nella stessa pagina senza essere reindirizzati in una nuova pagina con scritto appunto, file caricato con successo...

    - È possibile caricare i file selezionando da un menù a tendina un percorso diverso nel server? Esempio: immagini, pdf, etc..etc..

    Riuscirebbe ad aiutarmi?


    Form:
    HTML:
     <body><form enctype="multipart/form-data" action="./upload.php" method="post"> 
     <input name="userimage" type="file" /> 
     <input type="submit" value="Carica foto" name="send">
    </form></body>
    
    File upload.php:
    PHP:
    <?php
    //Impostazioni varie da modificare a piacimento
    $dimensione_max '120006000000000000000000000000000000000';                         // Dimensione massima delle foto
    $upload_dir './upload';                        // Cartella dove posizione le foto
    $estensioni = array ("png""jpg""gif""pdf""doc""avi""mp4""txt");      // Tipi di File consentiti
    $noSubmitSend 'Nessun upload eseguito!';            // Messaggio di errore quando viene richiamato direttamente lo script PHP
    $wrongExt 'Estensione file non valida!';            // Messaggio di errore per tipo di file non consentito
    $tooBig 'Il file eccede la dimensione max!';        // Messaggio di errore per file troppo grande
    $thatsAll 'File caricato con successo!';            // Messaggio di OK per upload corretto
    $wrongUp 'Something wrong here!';                    // Messaggio di errore quando lo script non riesce ad eseguire l'upload
    //***************************************

    // Controllo il submit del form HTML...
    if(isset($_POST['send'])) {
        
    $file $_FILES['userimage']['name'];

        
    // Controllo il tipo di file...
        
    if(in_array(array_pop(explode('.',$file)),$estensioni)) {

            
    // Controllo la dimensione del file...
            
    $dimensione_file $_FILES['userimage']['size'];
            if (
    $dimensione_file $dimensione_max) {
                print 
    $tooBig;
            } else {
                
    doUpload($file$upload_dir);
            }
            
        } else {
            print 
    $wrongExt;
        }
    } else {
        print 
    $noSubmitSend;
    }

    function 
    doUpload($file$upload_dir) {
        global 
    $thatsAll;

        
    $nomefile $_FILES['userimage']['tmp_name'];
        
    $nomereale $_FILES['userimage']['name'];
        
    $nomereale htmlentities(strtolower($nomereale));
        
        if (
    is_uploaded_file($nomefile)) {
            
    $newname = ($nomereale);
            
            
    $ext end(explode('.',$nomereale));
            
    $filename explode('.',$nomereale);
            if (
    file_exists($upload_dir.'/'.$nomereale)) {
                
    $filename[0] .= '.';
                for (
    $a=0;$a<=9;$a++)
                    
    $filename[0] .= chr(rand(97,122));
                
    $newname $filename[0] . '.' $ext;
            }
            
            
    $newname str_replace(' ''_'$newname);
            
            @
    move_uploaded_file($nomefile,($upload_dir.'/'.$newname));
            print 
    $thatsAll;
        } else print 
    $wrongUp;
        
    }
    ?>
     
    Ultima modifica di un moderatore: 20 Gennaio 2019
  2. fratt

    fratt Nuovo Utente

    Registrato:
    19 Gennaio 2019
    Messaggi:
    33
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Occupazione:
    Dilettante
    Ciao. Provo a rispondere ad alcune delle tue domande...

    E' possibile, ma normalmente sconsigliato per ragioni di sicurezza.

    Credo che l'unico modo per generare un'anteprima sia prima caricare il file... A meno che non ci sia qualche funzione/libreria javascript o simile che lavora lato client, ma non ne conosco.

    Potresti gestire l'upload tramite ajax così non devi ricaricare la pagina (metto un esempio di codice in fondo al post... il codice non è mio, l'ho trovato in rete, ma funziona)

    Certo che è possibile. Aggiungi alla form una select e poi cambi il valore di $upload_dir di conseguenza.

    HTML:
    <!DOCTYPE html>
    <html>
    
    <head>
    <meta charset="UTF-8">
    <meta name="revisit-after" content="7">
    <meta name="keywords" content="gestione">
    <title>..:: PROVA ::..</title>
    
    <script type="text/javascript"> <!--
    function _(el) {
      return document.getElementById(el);
    }
    function uploadFile() {
      var file = _("file1").files[0];
      var formdata = new FormData();
      formdata.append("file1", file);
      var ajax = new XMLHttpRequest();
      ajax.upload.addEventListener("progress", progressHandler, false);
      ajax.addEventListener("load", completeHandler, false);
      ajax.addEventListener("error", errorHandler, false);
      ajax.addEventListener("abort", abortHandler, false);
      ajax.open("POST", "upload.php");   // avevo dimenticato di scrivere il nome dello script php
      ajax.send(formdata);
    }
    function progressHandler(event) {
      _("loaded_n_total").innerHTML = "Uploaded " + event.loaded + " bytes of " + event.total;
      var percent = (event.loaded / event.total) * 100;
      _("progressBar").value = Math.round(percent);
      _("status").innerHTML = Math.round(percent) + "% uploaded... please wait";
    }
    function completeHandler(event) {
      _("status").innerHTML = event.target.responseText;
      _("progressBar").value = 0;
    }
    function errorHandler(event) {
      _("status").innerHTML = "Upload Failed";
    }
    function abortHandler(event) {
      _("status").innerHTML = "Upload Aborted";
    }
    //-->
    </script>
    </head>
    
    <body>
    <h2>HTML5 File Upload Progress Bar Tutorial</h2>
    <form id="upload_form" enctype="multipart/form-data" method="post">
      <input type="file" name="file1" id="file1"><br>
      <input type="button" value="Upload File" onclick="uploadFile()">
      <progress id="progressBar" value="0" max="100" style="width:300px;"></progress>
      <h3 id="status"></h3>
      <p id="loaded_n_total"></p>
    </form>
    </body>
    </html>
    
    PHP:
    <?php
    $fileName 
    $_FILES["file1"]["name"]; // The file name
    $fileTmpLoc $_FILES["file1"]["tmp_name"]; // File in the PHP tmp folder
    $fileType $_FILES["file1"]["type"]; // The type of file it is
    $fileSize $_FILES["file1"]["size"]; // File size in bytes
    $fileErrorMsg $_FILES["file1"]["error"]; // 0 for false... and 1 for true
    if (!$fileTmpLoc) { // if file not chosen
        
    echo "ERROR: Please browse for a file before clicking the upload button.";
        exit();
    }
    if(
    move_uploaded_file($fileTmpLoc"test/$fileName")){
        echo 
    "$fileName upload is complete";
    } else {
        echo 
    "move_uploaded_file function failed";
    }
    ?>
     
    Ultima modifica: 19 Gennaio 2019
  3. Frozzen

    Frozzen Nuovo Utente

    Registrato:
    18 Gennaio 2019
    Messaggi:
    13
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    Programmatore macchinari di stampaggio
    Località:
    Milano
    Grazie davvero per la risposta.. riusciresti ad inserirmi quei dati nei file? Non capisco perché, ma non mi funzionano..

    Te ne sarei molto grato
     
  4. fratt

    fratt Nuovo Utente

    Registrato:
    19 Gennaio 2019
    Messaggi:
    33
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Occupazione:
    Dilettante
    Premessa: nel codice javascript avevo dimenticato di scrivere il nome dello script php da richiamare. Adesso ho corretto.

    Di quali dati parli? Della select per decidere la cartella di upload?
     
  5. Frozzen

    Frozzen Nuovo Utente

    Registrato:
    18 Gennaio 2019
    Messaggi:
    13
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    Programmatore macchinari di stampaggio
    Località:
    Milano
    Ho visto che nel form che hai postato è stata inserita una barra upload ed è molto bella come idea! In sostanza avrei bisogno che la pagina non mi ricarichi a termine upload e se possibile si, la selezione delle cartelle che saranno dentro a una principale,ovvero la cartella upload.. grazie davvero se riesci a farmi questi 3 file..
     
  6. fratt

    fratt Nuovo Utente

    Registrato:
    19 Gennaio 2019
    Messaggi:
    33
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Occupazione:
    Dilettante
    Curiosità... ma l'hai provato il codice che ho postato? Probabilmente no...

    Per la select, nella form basta inserire qualcosa così:
    HTML:
    <select id="cartella" name="cartella" >
    <option value='cartella1'>Cartella1</option>
    <option value='cartella2'>Cartella2</option>
    <option value='cartella3'>Cartella3</option>
    </select>
    
    Poi però devi gestire anche la parte php.
     
  7. Frozzen

    Frozzen Nuovo Utente

    Registrato:
    18 Gennaio 2019
    Messaggi:
    13
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    Programmatore macchinari di stampaggio
    Località:
    Milano
    Si l'ho provato ma probabilmente sbaglio qualcosa io nell'inserimento dei dati... per questo ti chiedevo se riuscivi solo a crearmi te questi tre file.. tutto qui.. però se non riesci non preoccuparti mi hai aiutato tanto
     
  8. fratt

    fratt Nuovo Utente

    Registrato:
    19 Gennaio 2019
    Messaggi:
    33
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Occupazione:
    Dilettante
    Deve funzionare...
    Salvi l'html come index.html e il php come upload.php
    Metti entrambi i files in una cartella dove puoi eseguire codice php e ci crei dentro una sottocartella che si chiama test.
    Lanci index.php nel browser e ti appare una pagina striminzita con 2 testi e 2 bottoni. Clicchi sul bottone browse e selezioni un file, poi clicchi sul bottone upload file.
    Il file che hai selezionato devi ritrovartelo nella cartella test.
    Se questo funziona ha senso pensare alle altre problematiche.
     
    A Frozzen piace questo elemento.
  9. Frozzen

    Frozzen Nuovo Utente

    Registrato:
    18 Gennaio 2019
    Messaggi:
    13
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    Programmatore macchinari di stampaggio
    Località:
    Milano
    Adesso funziona tutto, infatti non riuscivo a collegare i file.. io avevo nell'altro altri nomi, ho cercato di sostituirli prima ma non mi sono reso conto che erano differenti.. ora provo a sistemare il fatto di caricarle in cartelle separate
     
  10. fratt

    fratt Nuovo Utente

    Registrato:
    19 Gennaio 2019
    Messaggi:
    33
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Occupazione:
    Dilettante
    Facendo riferimento alla select di prima, devi passare il valore selezionato al php tramite javascript.
    Puoi provare così:
    Codice:
    function uploadFile() {
      var file = _("file1").files[0];
      var cartella = _("cartella").value;
      var formdata = new FormData();
      formdata.append("file1", file);
      formdata.append("cartella", cartella);
      var ajax = new XMLHttpRequest();
      ajax.upload.addEventListener("progress", progressHandler, false);
      ajax.addEventListener("load", completeHandler, false);
      ajax.addEventListener("error", errorHandler, false);
      ajax.addEventListener("abort", abortHandler, false);
      ajax.open("POST", "upload.php");   // avevo dimenticato di scrivere il nome dello script php
      ajax.send(formdata);
    }
    
    Poi nel php richiami il valore e lo usi
    PHP:
    <?php
    $fileName 
    $_FILES["file1"]["name"]; // The file name
    $fileTmpLoc $_FILES["file1"]["tmp_name"]; // File in the PHP tmp folder
    $fileType $_FILES["file1"]["type"]; // The type of file it is
    $fileSize $_FILES["file1"]["size"]; // File size in bytes
    $fileErrorMsg $_FILES["file1"]["error"]; // 0 for false... and 1 for true

    $cartella $_POST['cartella'];
    $updir "test/";
    if (
    $cartella == "cartella1") {
      
    $updir "pdf/";
    } elseif (
    $cartella == "cartella2") {
      
    $updir "img/";
    }

    if (!
    $fileTmpLoc) { // if file not chosen
        
    echo "ERROR: Please browse for a file before clicking the upload button.";
        exit();
    }
    if(
    move_uploaded_file($fileTmpLoc$updir $fileName)){
        echo 
    "$fileName upload is complete";
    } else {
        echo 
    "move_uploaded_file function failed";
    }
    ?>
    Il codice l'ho scritto al volo e non l'ho testato... si dovrebbe capire la logica. Poi personalizza in base alle tue esigenze.
     
    A Frozzen piace questo elemento.
  11. Frozzen

    Frozzen Nuovo Utente

    Registrato:
    18 Gennaio 2019
    Messaggi:
    13
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Occupazione:
    Programmatore macchinari di stampaggio
    Località:
    Milano
    Sei stato dettagliato al massimo, penso di aver fatto tutto apparte l'anteprima del file che vorrei mi apparisse una volta selezionato..

    Grazie dell'aiuto, purtroppo a livello di programmazione" php, java, mysql, css, etc..etc.. "sono ancora neofita, conosco qualcosa e so che bisogna collegare il tutto ma non è semplice indovinare i termini da inserire.. se hai bisogno per hardware o software chiedi pure!
     
  12. Max 1

    Max 1 Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    29 Febbraio 2012
    Messaggi:
    3.769
    Mi Piace Ricevuti:
    283
    Punteggio:
    83
    Sesso:
    Maschio
    @Frozzen
    Da regolamento del forum, come tutti noi sei tenuto ad usare il tag [​IMG] o il tag [​IMG] per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
    [​IMG]
    Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
    Grazie
    Per questa volta te lo sistemo io ma mi raccomando per il futuro
     
    A Frozzen piace questo elemento.
Sto caricando...

Condividi questa Pagina