Foros del Web » Programando para Internet » PHP »

Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

Estas en el tema de Comprobar si existe o se ha introducido un archivo en el campo tipo "file" en el foro de PHP en Foros del Web. Hola. Si para comprobar en un formulario que tengo relleno o existe un campo de texto lo hago así: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original ...
  #1 (permalink)  
Antiguo 26/03/2015, 01:32
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

Hola.

Si para comprobar en un formulario que tengo relleno o existe un campo de texto lo hago así:

Código PHP:
Ver original
  1. <?php if(isset($_POST["titulo"])){ echo $_POST["titulo"];} ?>

¿Cómo sería eso mismo pero para el campo de la imagen?

Código PHP:
Ver original
  1. <form method="post" action="enviar.php" enctype="multipart/form-data">
  2. <label>Título:</label><input type="text" name="titulo" value="<?php if(isset($_POST["titulo"])){ echo $_POST["titulo"];} ?>"><br />
  3. <label>Descripción:</label><input type="text" name="descripcion" value="<?php if(isset($_POST["descripcion"])){ echo $_POST["descripcion"];} ?>"><br />
  4. <input type="file" id="archivo" name="archivo" title="Enviar imagen" /><br />  
  5.   <input type="submit" value="Enviar" name="enviar">
  6.                                     </form>

El ejemplo que estoy probando es un formulario de enviar donde el usuario puede hacer el envío con o sin imágenes y entonces hago esto:

Código PHP:
Ver original
  1. <?php
  2.     //Si se ha pulsado enviar
  3.     if(isset($_POST['enviar'])) {
  4.         //Valido los campos del formulario para que no quede nada vacío.
  5.         if(empty($_POST['titulo'])){
  6.             echo "<p class=\"error\">Error: Título de la noticia vacío.</p>";
  7.         }
  8.         elseif(empty($_POST['descripcion'])){
  9.             echo "<p class=\"error\">Error: Descripción de la noticia vacío.</p>";
  10.         }                      
  11.         //Si están todos los campos completos y correctos recogemos los datos de cada campo.                      
  12.         else {//Todo rellenado correctamente, preparar el envío.            
  13.             //Opción con imagen-----------------------------------    
  14.             //Si existe el archivo
  15.             if (isset($_FILES['archivo']))
  16.             {
  17.                 echo 'Existe una imagen para enviar, preparo el envío con imagen';
  18.             }
  19.             //Fin Opción con imagen-----------------------------------
  20.             //Opción sin imagen-----------------------------------  
  21.             else{
  22.                 echo 'No existe una imagen para enviar, preparo el envío sin imágen';
  23.             }
  24.             //Fin Opción sin imagen-----------------------------------      
  25.       }//Todo rellenado correctamente, preparar el envío.          
  26.     }//Fin si se pulsa enviar
  27.     ?>

¿Hay otra manera de comprobarlo?
  #2 (permalink)  
Antiguo 26/03/2015, 09:11
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

Esta bien esa forma, si tu no envias nada mediante el formulario no se crea $_FILES['archivo'] así que el uso de isset es la forma de comprobar si se creo el arreglo con ese indice. Si despues de eso quieres comprobar si el archivo llego al servidor puedes usar http://php.net/manual/en/function.is-uploaded-file.php o verificar por un error http://php.net/manual/en/features.fi...oad.errors.php
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 26/03/2015, 10:22
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

Hola hhs, gracias por tu respuesta.

Lo malo de tenerlo solo probando si existe el archivo con if (isset($_FILES['archivo'])) no me cumple como si existe un campo de texto, no se si me explico. Ahora por ejemplo he probado así y parece que ya si me muestra las opciones que puedo tener:

Código PHP:
Ver original
  1. <?php
  2.     //Si se ha pulsado enviar
  3.     if(isset($_POST['enviar'])) {
  4.         //Valido los campos del formulario para que no quede nada vacío.
  5.         if(empty($_POST['titulo'])){
  6.             echo "<p class=\"error\">Error: Título de la noticia vacío.</p>";
  7.         }
  8.         elseif(empty($_POST['descripcion'])){
  9.             echo "<p class=\"error\">Error: Descripción de la noticia vacío.</p>";
  10.         }                      
  11.         //Si están todos los campos completos y correctos recogemos los datos de cada campo.                      
  12.         else {//Todo rellenado correctamente, preparar el envío.            
  13.             //Opción con imagen-----------------------------------    
  14.             //Si existe el archivo
  15.             if (isset($_FILES['archivo']))
  16.             {                
  17.                 //Compruebo si existe el archivo seleccionado para subir.
  18.                 if (is_uploaded_file($_FILES['archivo']['tmp_name'])) {
  19.                  echo 'Existe una imagen para enviar, preparo el envío con imagen';
  20.                 }                        
  21.                 //Fin Opción con imagen-----------------------------------
  22.                 //Opción sin imagen-----------------------------------  
  23.                 else{
  24.                     echo 'No existe una imagen para enviar, preparo el envío sin imágen';
  25.                 }
  26.                 //Fin Opción sin imagen-----------------------------------
  27.             }//Fin Si existe el archivo  
  28.       }//Todo rellenado correctamente, preparar el envío.          
  29.     }//Fin si se pulsa enviar
  30.     ?>

En cuanto a lo de comprobar si ya tengo subido el archivo tengo un ejemplo parecido en este mismo foro con todos los pasos pero ahora que lo retomo estoy comprobando y anotando de nuevo paso a paso cada opción posible, a ver si por fin machaco esta parte de una vez.

¿Sería entonces como lo tengo ahora una manera correcta para prepara un envío teniendo la imagen introducida y otro envío sin tener la imagen introducida?
  #4 (permalink)  
Antiguo 26/03/2015, 11:07
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

Puedes agregar a tu condición empty para ver si no viene con espacio en blanco
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 28/03/2015, 09:53
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

Hola de nuevo hhs.

Creo que ahora entiendo tu anterior explicación, cuando solo pones if (isset($_FILES['archivo'])) si no me equivoco no hace como un campo de texto normal (cadena) sino que hace la función de array y por tanto si le pongo "isset" me daría campo nulo y no funcionaría ya que espera un dato ['tmp_name'] en la segunda dimensión... o eso creo.

En cuanto a lo de agregar empty me ha servido, incluso he probado otras tres opciones que creo que también sirven.

Código PHP:
            ////Si el campo archivo no está vacío
            
if($_FILES['archivo']['name']!='')
            {
                echo 
"Existe algo en el campo archivo";
            }
            else{
                 echo 
"No existe algo en el campo archivo";
            }           
            
////Si el campo archivo no está vacío
            
if (!empty($_FILES['archivo']['name']))
            {
                echo 
"Existe algo en el campo archivo";
            }
            else{                
                echo 
"No existe algo en el campo archivo";
            }
            
//Preparo el nombre del archivo en el caso de que exista;
            
$nombreArchivo $_FILES['archivo']['name']; 
            
//Compruebo si el nombre del archivo no está vacío:
            
if($nombreArchivo != ""){
                 echo 
"Existe algo en el campo archivo";
            }
            else{
                echo 
"No existe algo en el campo archivo";
            } 
¿Estoy en lo correcto? Gracias de nuevo.
  #6 (permalink)  
Antiguo 28/03/2015, 12:47
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

Por cierto, volviendo al envío real del archivo final que estoy preparando (donde hago la validación final con imagen o sin imagen con if (is_uploaded_file($_FILES['archivo']['tmp_name'])) { )

Repitiendo mi inicial pregunta, para mantener los campos completados en caso de error, ¿Cómo sería eso mismo pero para el campo de la imagen?

Código PHP:
<?php if(isset($_POST["titulo"])){ echo $_POST["titulo"];} ?>
Código PHP:
    <form method="post" action="enviar.php" enctype="multipart/form-data">
    <label>Título:</label><input type="text" name="titulo" value="<?php if(isset($_POST["titulo"])){ echo $_POST["titulo"];} ?>"><br />
    <label>Descripción:</label><input type="text" name="descripcion" value="<?php if(isset($_POST["descripcion"])){ echo $_POST["descripcion"];} ?>"><br />
    <input type="file" id="archivo" name="archivo" title="Enviar imagen" /><br />  
      <input type="submit" value="Enviar" name="enviar">
</form>
Saludos.
  #7 (permalink)  
Antiguo 30/03/2015, 08:43
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

No puedes completar los campos de tipo file, siempre van a aparecer vacios
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #8 (permalink)  
Antiguo 01/04/2015, 09:26
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

Hola de nuevo.

Hice una consulta en el foro hace poco y vi que es como dices, aunque quizás más adelante pruebe tal como se indica en este tema:

http://www.forosdelweb.com/f18/recar...7/#post2678455

Gracias de nuevo por tu respuesta, saludos.
  #9 (permalink)  
Antiguo 01/04/2015, 11:22
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

Si puedes hacer lo que comentan de guardar en un campo oculto e indicar mediante js que existe el archivo.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #10 (permalink)  
Antiguo 01/04/2015, 12:35
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Comprobar si existe o se ha introducido un archivo en el campo tipo "file"

Ok, gracias por la ayuda.

Etiquetas: campo, formulario, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:52.