Come verificare se un utente ha SELEZIONATO un file da caricare?

su una pagina ho :

if (!empty($_FILES['logo']['name'])) {
    $dossier     = 'upload/';
    $fichier     = basename($_FILES['logo']['name']);
    $taille_maxi = 100000;
    $taille      = filesize($_FILES['logo']['tmp_name']);
    $extensions  = array('.png', '.jpg', '.jpeg');
    $extension   = strrchr($_FILES['logo']['name'], '.');

    if(!in_array($extension, $extensions)) {
        $erreur = 'ERROR you  must upload the right type';
    }

    if($taille>$taille_maxi) {
         $erreur = 'too heavy';
    }

    if(!empty($erreur)) {
      //...
    }
}

Il problema è che, se gli utenti vogliono per modificare le informazioni SENZA caricare un LOGO, si genera un errore : “errore nel caricare il tipo’

Quindi, se un utente non ha messo nulla in inputbox per caricarlo, non voglio entrare in queste condizioni di test.

ho testato :
if (!empty($_FILES['logo']['name']) e if (isset($_FILES['logo']['name'])

ma entrambi non sembra funzionare.

Tutte le idee?

edit : forse non è stato così chiaro, non voglio testare se ha caricato un logo, voglio testare SE ha selezionato un file da caricare, perché adesso, se non selezionare un file da caricare, php genera un errore dicendo che lui deve caricare con il formato giusto.

grazie.

 

5 Replies
  1. 78

    Si possono verificare con:

    if (empty($_FILES['logo']['name'])) {
        //No file was selected for upload, your (re)action goes here
    }

    Oppure è possibile utilizzare un javascript costruzione che consente solo l’upload/pulsante di invio ogni volta che il caricamento di campo ha un valore una stringa vuota (“”) per evitare l’invio del modulo, con nessun upload a tutti.

  2. 34

    C’è una sezione nella documentazione di php su la gestione dei file. Si trovare che si possono verificare errori vari e uno di loro è

    UPLOAD_ERR_OK
        Value: 0; There is no error, the file uploaded with success.
    <...>
    UPLOAD_ERR_NO_FILE
        Value: 4; No file was uploaded.

    Nel tuo caso hai bisogno di un codice come

    if ($_FILES['logo']['error'] == UPLOAD_ERR_OK) { ... }

    o

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

    Si dovrebbe prendere in considerazione il controllo (e probabilmente fornire la risposta adeguata per un utente) per altri vari errori.

    • apri gli occhi e vedi: Valore: 4; Nessun file è stato caricato
    • Schegge oooops, anzi, mi dispiace, forse è ora che ho messo i miei occhiali ;p
    • Ho controllato, per me. È davvero il modo corretto di controllo per un caso del genere. Anche la Nota: “Se nessun file selezionato per l’upload di un form, PHP return $_FILES[‘userfile’][‘size’], 0, e $_FILES[‘userfile’][‘tmp_name’] come nessuno”. (Dalla Documentazione di PHP) php.net/manual/en/features.file-upload.post-method.php
  3. 7

    Farei il test if (file_exists($_FILES['logo']['tmp_name'])) e vedere se funziona.

    O, più approperately (grazie Baloo): if (is_uploaded_file($_FILES['logo']['tmp_name']))

    • ho aggiunto alcune informazioni sul mio post. se si può guardare. thx

Lascia un commento