2010-06-02 11 views
44

en una página, tengo:¿Cómo se prueba si un usuario ha SELECCIONADO un archivo para cargar?

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)) { 
     // ... 
    } 
} 

El problema es que si los usuarios quiere editar información sin carga de logotipo, se genera un error: 'error debe cargar el tipo'

Entonces, si un usuario no colocó nada en la casilla de entrada para subirlo, no quiero ingresar en estas condiciones prueba.

Probé: if (!empty($_FILES['logo']['name']) y if (isset($_FILES['logo']['name'])

pero ambos no parece funcionar.

¿Alguna idea?

editar: tal vez no estaba tan claro, no quiero probar si cargó un logotipo, quiero probar SI seleccionó un archivo para cargar, porque ahora mismo, si no selecciona un archivo para cargar, php genera un error que dice que debe cargar con el formato correcto.

gracias.

Respuesta

77

Esto se puede comprobar con:

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

O puede utilizar una construcción javascript que sólo permite la carga/botón de enviar cada vez que el campo de subida tiene un valor distinto de una cadena vacía ("") para evitar el envío del formulario sin carga.

+1

Consulte la respuesta a continuación http://stackoverflow.com/a/2958221/84292 –

+1

que es lo que estaba buscando. gracias ... +1 para preguntas y respuestas. (y) –

7

Me gustaría probar if (file_exists ($_FILES['logo']['tmp_name'])) y ver si funciona.

O, más approperately (gracias Baloo): if (is_uploaded_file ($_FILES['logo']['tmp_name']))

+0

he agregado algo de información sobre mi publicación. si puedes mirarlo thx –

33

Hay una sección en la documentación de PHP sobre file handling. Va a find que se puede comprobar varios errores y uno de ellos es

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

En el caso de que necesite un código como

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

o

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

Debe tener en cuenta de cheques (y probablemente proporcionando la respuesta adecuada para un usuario) para otros diversos errores también.

+0

@Tristan abre los ojos y mira: Valor: 4; ** No se cargó ningún archivo ** –

+0

@Col. Shrapnel oooops, de hecho, lo siento, tal vez es hora de ponerme las gafas; p –

+1

Comprobé esto por mí mismo. De hecho, es la forma correcta de verificar un caso así. Nota: "Si no se selecciona ningún archivo para cargar en su formulario, PHP devolverá $ _FILES ['userfile'] ['size'] como 0, y $ _FILES ['userfile'] ['tmp_name'] como ninguno " (De la documentación de PHP) http://php.net/manual/en/features.file-upload.post-method.php –

-3
if ($_FILES['logo']['error'] === 0) 

es la única manera correcta

+1

Esto es contrario a lo que indica la documentación de PHP. Esto realmente se evaluará como verdadero si el archivo se cargó correctamente. http://php.net/manual/en/features.file-upload.errors.php –

+0

¿Cuál sería el error si no hay un archivo? –

Cuestiones relacionadas