[PHP] Informazioni upload

Frozzen

Utente Attivo
18 Gen 2019
55
0
6
32
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
32
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
32
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
32
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
32
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
32
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.449
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 4
N Forum scritto in PhP ed informazioni legali... PHP 2
F INformazioni su linguaggio PHP PHP 2
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8

Discussioni simili