[PHP] Informazioni upload

Frozzen

Utente Attivo
18 Gen 2019
55
0
6
29
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:

fratt

Nuovo Utente
19 Gen 2019
33
4
8
Ciao. Provo a rispondere ad alcune delle tue domande...

- È possibile caricare qualsiasi genere di file senza andare ad aggiungere le estensioni?
E' possibile, ma normalmente sconsigliato per ragioni di sicurezza.

- Posso far apparire in anteprima l'immagie di ciò che sto caricando?
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.

- 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...
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)

- È possibile caricare i file selezionando da un menù a tendina un percorso diverso nel server? Esempio: immagini, pdf, etc..etc..
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:

Frozzen

Utente Attivo
18 Gen 2019
55
0
6
29
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
 

fratt

Nuovo Utente
19 Gen 2019
33
4
8
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?
 

Frozzen

Utente Attivo
18 Gen 2019
55
0
6
29
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..
 

fratt

Nuovo Utente
19 Gen 2019
33
4
8
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.
 

Frozzen

Utente Attivo
18 Gen 2019
55
0
6
29
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
 

fratt

Nuovo Utente
19 Gen 2019
33
4
8
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.
 
  • Like
Reactions: Frozzen

Frozzen

Utente Attivo
18 Gen 2019
55
0
6
29
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
 

fratt

Nuovo Utente
19 Gen 2019
33
4
8
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.
 
  • Like
Reactions: Frozzen

Frozzen

Utente Attivo
18 Gen 2019
55
0
6
29
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!
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.397
338
83
@Frozzen
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code-gif.6007
o il tag
php-png.6009
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.6008

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
 
  • Like
Reactions: Frozzen
Discussioni simili
Autore Titolo Forum Risposte Data
elpirata Update dinamico informazioni scritte in una pagina php jQuery 11
M [PHP] Elenco con "classifica" delle informazioni nel db PHP 3
cobra_72 [Joomla] [PHP] come attingere informazioni specifiche da database PHP 18
H Informazioni principali PHP PHP 3
A Accesso e recupero informazioni su db mysql e 2 tabelle. Php lento nell'esecuzione. PHP 5
N Forum scritto in PhP ed informazioni legali... PHP 2
F INformazioni su linguaggio PHP PHP 2
G Invio form con PHP PHP 2
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
I Eecuzione di javascript in ciclo foreach php. PHP 7
S Libreria PHP per creare file dwg o dxf PHP 0
A [cerco - retribuito] Sviluppatore Php freelance per progetti vari Offerte e Richieste di Lavoro e/o Collaborazione 2
L Google chart php mysql PHP 2
R Download file multipli da directory php PHP 0
F pagina dinamica PHP PHP 3

Discussioni simili