Upload, isset e campi form vuoti

  • Creatore Discussione Creatore Discussione RedWolf
  • Data di inizio Data di inizio

RedWolf

Nuovo Utente
7 Mag 2009
22
0
0
Roma
www.antrocom.org
Sono ormai le 4 del mattino e non riesco a risolvere un problema, e forse mi sono perso in un bicchiere d'acqua, tanto per cambiare.
Prendendo spunto dai tutorial sull'upload dei file e delle immagini qui sul sito, ho creato un form che richiede stringhe di testo e permette di inviare file. Tutti i campi, di per sè, sono facoltativi.
Direi tutto bene se tutti i campi vengono riempiti, ma se lascio uno o entrambi i campi per l'upload dei file vuoti, mi ritorna l'avviso di riempirli.
Per evitare proprio questa cosa, avevo organizzato lo script in questo modo:

PHP:
if(isset($HTTP_POST_VARS['submit']))
{
... // controlli vari e invio dati di testo al DB
if (isset($_FILES['data'])) {
... // controllo dati e upload di un file
}
if (isset($_FILES['imagefile'])) {
... // controllo dati e invio immagine
}

}

Secondo voi, come organizzazione è errata? Come posso fare per rendere effettivamente facoltativi questi due campi di upload?
Grazie in anticipo per i suggerimenti! :)
 
Vero Borgo Italia, ho toppato clamorosamente! :|

Rimane però il problema dei due campi facoltativi, che a parte i nomi sfruttano le stesse funzioni e controlli:

PHP:
if(isset($_POST['submit']))
{

//alcune variabili che mi servono dopo
$username= $_SESSION['username'];
$membro = $_POST ['membro'];
$commenti = $_POST ['commenti'];
$didascalia = $_POST ['didascalia'];

// upload del file
if (isset($_FILES ['data'])) {

// per evitare che qualcuno sovrascriva i file di un altro, rinomino i file caricati. Per prima cosa salviamo l'estensione del file con una funzione
function estensione($nome){
    $trova_punto = explode(".", $nome);
    $estensione = $trova_punto[count($trova_punto) - 1];
    $estensione = strtolower($estensione);
    if (isset($trova_punto[1]) == FALSE){
        return "Nessuna estensione";
    }
    return $estensione;
}

//prepariamo il file per l'upload con il nuovo nome
$file_temporaneo_data= $_FILES['data']['tmp_name'];
    $nome_file_data = $_FILES['data']['name'];
        // trova l'estensione del file
        $estensione_file=estensione($nome_file_data);
        // assegna un nome univoco al file
        $nome_file1=uniqid($username).".".$estensione_file;

//errore di default su false, se true restituisce un messaggio e bisogna ricompilare i campi
$errore = false;
//verifica le dimensioni del file caricato
if($_FILES['data']['size'] ==0)
{
$errore=true;
echo "Errore: campo upload nullo.<br>";
}
//questi sono i file che è possibile caricare
$file_permessi = array("application/msword","application/pdf","application/mspowerpoint","application/powerpoint", "application/rtf", "text/richtext", "text/plain", "application/excel", "application/zip");
// se il'estensione del file da caricare è nell'array, allora si procede all'upload
if(!in_array($_FILES['data']['type'], $file_permessi))
{
$errore=true;
echo "Estensione non consentita.<br>";
}
// se c'è un problema col nome temporaneo, restituisci un avviso
if(!is_uploaded_file($_FILES['data']['tmp_name']))
{
$errore=true;
echo "Errore nel caricamento.<br>";
}
//imposta il nome della directory di destinazione; purtroppo chmod 777 sul nostro server per la cartella
$cartella_upload = "../uploads/";

// carica il file e mostra un avviso se c'è un problema
if (!move_uploaded_file($_FILES['data']['tmp_name'],$cartella_upload . $nome_file1))
{$errore = true;
echo "Non è possibile caricare il file.<br>";
}
}

Perchè se il campo per l'upload è vuoto, mi dice che va riempito? :confused:
 
Alle 4 del mattino si deve dormire, non programmare! :p
Così ci si ricorderebbe che $_FILES['data'] è un array, dunque sarebbe più facile e logico fare un controllo sulla stringa del nome del file:


PHP:
if (!empty($_FILES['data']['name'])) {
...
}

In pratica, il codice verifica se la variabile "nome del file" è vuota o no, e se non è vuota procede con il resto dello script! :)
 

Discussioni simili