Foros del Web » Programando para Internet » PHP »

INSERT de registro con imagen

Estas en el tema de INSERT de registro con imagen en el foro de PHP en Foros del Web. Buenos días a todos: Ante todo muchas gracias por su atención y espero que puedan ayudarme. Estoy trabajando en un sistema de mantenimiento con las ...
  #1 (permalink)  
Antiguo 17/01/2011, 11:34
 
Fecha de Ingreso: abril-2009
Ubicación: Vitoria
Mensajes: 160
Antigüedad: 15 años
Puntos: 1
Pregunta INSERT de registro con imagen

Buenos días a todos:

Ante todo muchas gracias por su atención y espero que puedan ayudarme.

Estoy trabajando en un sistema de mantenimiento con las funciones básicas de añadir, actualizar o borrar.

Los registros tienen un campo imagen, donde guardo la "URL" de la imagen.

Cuando añado un registro, si se selecciona una imagen esta se coloca en la carpeta del server y se guarda su URL, si no se selecciona imagen, se pone una URL por defecto, de una imagen alternativa.

Pero al realizar la comprobación de si se ha seleccionado imagen, siempre cuela y lo toma como si se hubiera seleccionado imagen.

La imagen se manda desde el formulario con el siguiente código desde el fichero add.php:

Código HTML:
Ver original
  1. <input type="file"  name="ufile" class="upimage"/>

Y en el fichero adding.php que es donde se compruban los datos la recojo asi:

Código PHP:
//Comprueba si se ha seleccionado alguna imagen.
if($_FILES['ufile']['error'] > 0){
  
//Comprobaciones de la imagen, extension, etc. y guardado.
}else{
  
//Se coloca una imagen por defecto.

No consigo que me compruebe si se ha seleccionado una imagen en el formulario, o sin embargo la variable está vacía.

El codigo de comprobación y subida de la imagen lo he sacado de la web del w3schools.

No entiendo, por que no es capaz de reconocer si la variable esta vacia o no...
Gracias de nuevo por vuestra atención
  #2 (permalink)  
Antiguo 17/01/2011, 11:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: INSERT de registro con imagen

cuando recibas el formulario has esto:
Código PHP:
var_dump($_FILES); 
¿que resultado da?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 17/01/2011, 11:39
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: INSERT de registro con imagen

Usa $_FILES['ufile']['error'] == 4

http://www.php.net/manual/en/feature...oad.errors.php
  #4 (permalink)  
Antiguo 17/01/2011, 11:46
 
Fecha de Ingreso: abril-2009
Ubicación: Vitoria
Mensajes: 160
Antigüedad: 15 años
Puntos: 1
Respuesta: INSERT de registro con imagen

En respuesta a pateketrueke, me muestra el siguiente mensaje...

array(1) { ["ufile"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } }


Ademas de...
Warning: copy() [function.copy]: Filename cannot be empty

Lo gracioso es que es lo que quiero comprobar... que el nombre esté vacío y en tal caso.. guardar la URL por defecto...

Última edición por tokero; 17/01/2011 a las 11:47 Razón: Respuesta a un usuario
  #5 (permalink)  
Antiguo 17/01/2011, 11:50
 
Fecha de Ingreso: abril-2009
Ubicación: Vitoria
Mensajes: 160
Antigüedad: 15 años
Puntos: 1
Respuesta: INSERT de registro con imagen

Ronruby

Si te fijas en el IF que he posteado, comprueba que sea mayor que 0.

0 es correcto, cualquier otro valor... significa error.
  #6 (permalink)  
Antiguo 17/01/2011, 11:54
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: INSERT de registro con imagen

Si, sin embargo mira lo que te devuelve tu array $_FILES al no subir ningun archivo:
Cita:
array(1) { ["ufile"]=> array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(4) ["size"]=> int(0) } }
Para verificar si no se subio ningun archivo, debes usar "4"
  #7 (permalink)  
Antiguo 17/01/2011, 12:02
 
Fecha de Ingreso: abril-2009
Ubicación: Vitoria
Mensajes: 160
Antigüedad: 15 años
Puntos: 1
Respuesta: INSERT de registro con imagen

Muy cierto caballero...

Mientras estaba escribiendo el post anterior... me he dado cuenta del fallo.

Hay que comprobmar que el error sea == 4 para saber que no se ha seleccionado ninguna imagen.

Primero he hecho algo asi...

Código PHP:
if($_FILES['ufile']['error'] > 0
Y luego compruebo que sea igual a 4, sino muestro un mensaje de error.

Muchas gracias por vuestra ayuda! es un placer contar con ustedes... como siempre!
  #8 (permalink)  
Antiguo 17/01/2011, 12:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: INSERT de registro con imagen

Solo como tip, hay varías constantes, una de ellas es UPLOAD_ERR_NO_FILE que equivale a 4, con lo cual haces tu código más simple de leer:
Código PHP:
Ver original
  1. if ($_FILES['archivo']['error'] != UPLOAD_ERR_NO_FILE) {
  2.       // Procesas la imagen
  3. }

Saludos.
  #9 (permalink)  
Antiguo 18/01/2011, 03:43
 
Fecha de Ingreso: abril-2009
Ubicación: Vitoria
Mensajes: 160
Antigüedad: 15 años
Puntos: 1
Respuesta: INSERT de registro con imagen

Gracias GatorV!

Pero he preferido comprobar primero si se ha seleccionado alguna imagen y si no se ha seleccionado comprobar en que estado se encuentra...

Posteo todo el código de subida de imagen en mi caso, se puede aplicar a cualquier archivo...

ufile -> es la variable que se recoge del formulario en la pag anterior...

Código PHP:
// Ruta por defecto de la carpeta que contiene las imágenes.
$uploadDir "images/asistentes/";
// Variable con la comprobación de la imagen.
$fileCheck $_FILES['ufile']['error'];
            
// Comprobando la seleccion de una imagen para el asistente.
if($fileCheck 0){
// Comprobar == 4 para saber si realmente no se ha subido imagen o es un error
    
if($fileCheck == 4){
        
$saveFile "foto_vacia.jpg";
        
$filePath $uploadDir.$saveFile;
        echo 
"<br/>No se ha seleccionado imagen.";
    }else{
        echo 
"Se ha producido un error al guardar la imagen";
    }
} else {
    
        
// Recogida de los datos de la imagen que se va a subir al server.
    
$saveFile $_FILES['ufile']['name'];
    
// Y reemplazo de los caracteres no validos.
    
$saveFile str_replace("#""No."$saveFile);
    
$saveFile str_replace("$""Dollar"$saveFile);
    
$saveFile str_replace("%""Percent"$saveFile);
    
$saveFile str_replace("^"""$saveFile);
    
$saveFile str_replace("&""and"$saveFile);
    
$saveFile str_replace("*"""$saveFile);
    
$saveFile str_replace("?"""$saveFile);
    
    
// Recogida de la extensión del archivo.
    
$extensionFile $_FILES['ufile']['type'];
    
// Validación del tipo de archivo que se va a subir.
    
if(!(strpos($extensionFile"gif") || strpos($extensionFile"jpeg"))){
        
// Si la extensión del archivo es distinta a algula de estas 2.
        
echo "<script language='javascript' type='text/javascript'>
                alert('La imagen debe ser un archivo .gif o .jpg');
                history.back();</script>"
;
        exit;
    }
    
// Ruta completa añadiendole el nombre de la imagen.
    
$filePath $uploadDir.$saveFile;
    
    
//Si no ha habido problemas de copia.
    
if(copy($_FILES['ufile']['tmp_name'], $filePath)){
        echo 
"<br/>Datos procesados correctamente.";
    } else {
        echo 
"<br/>Error al subir imagen al servidor.";
    }
    

Si ven algo mejorable se lo agradecería...

Y de nuevo gracias por vuestra ayuda!

Etiquetas: insert, registro
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 12:31.