• User

    Problemi controlli su campi $_FILES non obbligatori

    Ciao a tutti, vi scrivo perchè ho un problema che non riesco a risolvere... Inizialmente avevo pensato di modificare il codice che vi posto qui sotto, ma poi ho pensato che deve per forza esserci un modo corretto per fare in modo che le verifiche sulla $_FILES vengano effettuate solo se è stato inserito un file. Inizialmente pensavo di applicare prima del codice seguente un'istruzione [PHP]if(!empty($_FILES['logo']))[/PHP] ma ho visto non funzionare... secondo voi qual l'è il modo corretto?
    Ecco il codice:
    [PHP]
    if($_FILES['logo']['error'] != UPLOAD_ERR_OK){
    switch ($_FILES['logo']['error']){
    case UPLOAD_ERR_INI_SIZE:
    die('Il file caricato eccede le dimensioni massime indicate nel file php.ini');
    break;
    case UPLOAD_ERR_FORM_SIZE:
    die('Il file caricato eccede la dimensioni massime indicate nel form');
    break;
    case UPLOAD_ERR_PARTIAL:
    die('Il file non è stato caricato completamente');
    break;
    case UPLOAD_ERR_NO_FILE:
    die('Il file non è stato caricato');
    break;
    case UPLOAD_ERR_NO_TMP_DIR:
    die('Il server non è trova la cartella temporanea');
    break;
    case UPLOAD_ERR_CANT_WRITE:
    die('Il server non consente la scrittura su disco');
    break;
    case UPLOAD_ERR_EXTENSION:
    die('Il file non è stato carricato a causa dell'estensione');
    break;
    }
    }

        //recupero informazioni per sapere se l'immagine caricata appartiene ai formati consentiti
        list($width, $height, $type, $attr) = getimagesize($_FILES['logo']['tmp_name']);
    
        switch($type){
            case IMAGETYPE_GIF:
                $image = imagecreatefromgif($_FILES['logo']['tmp_name']) or 
                    die('L\'immagine caricata non appartiene ad un formato consentito');
                $ext = '.gif';
                break;
            case IMAGETYPE_JPEG:
                $image = imagecreatefromjpeg($_FILES['logo']['tmp_name']) or 
                    die('L\'immagine caricata non appartiene ad un formato consentito');
                $ext = '.jpg';
                break;
            case IMAGETYPE_PNG:
                $image = imagecreatefrompng($_FILES['logo']['tmp_name']) or 
                    die('L\'immagine caricata non appartiene ad un formato consentito');
                $ext = '.png';
                break;
            default:
                die('Il file caricato non é in un formato supportato');
        }
    

    [/PHP]
    Praticamente se carico dei dati senza però caricare un'immagine (perchè magari quella marca non l'ha) mi da errore... come devo fare secondo voi?
    Ciao a tutti e grazie


  • User Attivo

    Modifica il tuo codice in modo da verificare se PHP restituisce l'errore UPLOAD_ERR_NO_FILE

    http://www.php.net/manual/en/features.file-upload.errors.php


  • User

    in effetti mi restituisce proprio quell'errore e io avevo pensato di eliminare la riga incriminata per fare in modo che non verificasse se aveva caricato il file o meno... ma mi rende questo errore:

    getimagesize() [function.getimagesize]: Filename cannot be empty in ... on line** 53**
    Il file caricato non é in un formato supportato

    Quindi dovrei togliere anche questo controllo giusto? Scusa se ti disturbo... ma il mio inglese non è infallibile e non mi è sembrato di trovare quello che cerco... alla fine io vorrei che mi facesse questi controlli solo se $_FILES['logo'] è stato settato e se è diverso da vuoto, ma mettendo prima di tutto il codice sopra:
    if(isset($_FILES['logo']) && $_FILES['logo'] !="")
    non funziona... hai un'altra imbeccata da darmi? Grazie ancora e a presto ciao Gigi


  • User Attivo

    IMHO dovresti rivedere le basi di progettazione software.

    Elimina questo codice:

    [php]case UPLOAD_ERR_NO_FILE:
    die('Il file non è stato caricato');
    break;
    [/php]

    E racchiudi tutto il codice di manipolazione dell'immagine in questo IF:

    [php]if ($_FILES['logo']['error'] != UPLOAD_ERR_NO_FILE) {
    // ...
    }[/php]