Foros del Web » Programando para Internet » PHP »

upload imagen

Estas en el tema de upload imagen en el foro de PHP en Foros del Web. Buenso días: A traves de formulario subo imágenes al servidor, pero si un cliente no quiere subire ninguna imagen, me da error. Que se puede ...
  #1 (permalink)  
Antiguo 29/09/2008, 01:28
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
upload imagen

Buenso días:

A traves de formulario subo imágenes al servidor, pero si un cliente no quiere subire ninguna imagen, me da error.
Que se puede hacer para que suba el resto de datos sin imagen.

Este es el script que aplico:
// compruebo si hay datos

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

// compruebo el tipo de dato

if (!((strpos($tipo_archivo, "gif")|| strpos($tipo_archivo, "png") || strpos($tipo_archivo, "jpeg")) && ($tamano_archivo < 50000)))
{ $fotomal= "* Error: La imagen o sobrepasa el tamaño de 50 Kb o no es jpg, png, gif";
}

Gracias.

$fotomal= "* Error: La imagen o sobrepasa el tamaño de 50 Kb o no es jpg, png, gif";

}
  #2 (permalink)  
Antiguo 29/09/2008, 04:47
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: upload imagen

1. Y el error es ... ¿?
2. ¿Y dónde defines $tipo_archivo?
3. Revisa las FAQ
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 29/09/2008, 05:04
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: upload imagen

hola jam.

El error es el que yo le progamo para que compare el tipo de archivo que se sube, el probelma está en que si alguien no quiere subir una imagen, se inserten el resto de los datos, pero el escript de validación al ver que el formato imagen esta vacio, da el error. Y no se que añadirle para que pase.
He intentado if (!((strpos($tipo_archivo, "") pero nada.

Te dejo el script completo para que ves de donde vienen las variables:


//datos del arhivo
$nombre_archivo = $HTTP_POST_FILES["logo"]["name"];
$tipo_archivo = $HTTP_POST_FILES["logo"]["type"];
$tamano_archivo = $HTTP_POST_FILES["logo"]["size"];
$editFormAction = $_SERVER['PHP_SELF'];
//compruebo si las características del archivo son las que deseo
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

if (!((strpos($tipo_archivo, "gif")|| strpos($tipo_archivo, "png") || strpos($tipo_archivo, "jpeg")) && ($tamano_archivo < 50000)))
{

$fotomal= "* Error: La imagen o sobrepasa el tamaño de 50 Kb o no es jpg, png, gif";
}
else
{
$logo= $nombre_archivo;

$directorio = 'imagenes/';

if (move_uploaded_file($HTTP_POST_FILES['logo']['tmp_name'],$directorio . "/" . $logo))
{
  #4 (permalink)  
Antiguo 29/09/2008, 05:39
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: upload imagen

Ooook. Necesitas hacer uso de la función empty(): www.php.net/empty

Y te sugiero utilizar el arreglo $_FILES. En serio, revisa las FAQ.

Suerte
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 29/09/2008, 09:04
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: upload imagen

Gracias por tu respuesta.

Me has dejado preocupado con lo de S_FILES. Supongo que te refieres en utilizar esta expresiçón a partir de php.4 en vez de $HTTP_POST_FILES, por problemas de seguridad.

He seguido tu consejo leyendo FAQS, pero no encontre nada al respecto.

Si tienes un minuto, por favor dime donde está el problema.

Muchas gracias.
  #6 (permalink)  
Antiguo 29/09/2008, 09:35
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 11 meses
Puntos: 49
Respuesta: upload imagen

Que tal eurodoblon, mira y analiza este aporte
http://www.forosdelweb.com/f18/aport...on-php-568511/



Saludos.
  #7 (permalink)  
Antiguo 29/09/2008, 23:23
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: upload imagen

Cita:
Iniciado por eurodoblon Ver Mensaje
He seguido tu consejo leyendo FAQS, pero no encontre nada al respecto.
.... detente un poco más: http://www.forosdelweb.com/f18/indice-faqs-php-108208/

3. Que diferencias hay entre usar para pasar variables de un script a otro: $variable_nombre, $HTTP_xxx_VARS['variable_nombre'], $_XXX['variable_nombre'].
12. ¿Cómo puedo subir archivos a través de un formulario?

Cita:
Iniciado por eurodoblon Ver Mensaje
Si tienes un minuto, por favor dime donde está el problema
Claro .

Estás haciendo una validación (edito código pero conservo la lógica):
Código PHP:
// Asignas valores a las variables
$tipo_archivo $_FILES["logo"]["type"];
$tamano_archivo $_FILES["logo"]["size"];

// Y haces tu validación.
if (!((strpos($tipo_archivo"gif")|| strpos($tipo_archivo"png") || strpos($tipo_archivo"jpeg")) && ($tamano_archivo 50000)))
{
    
$fotomal"* Error: La imagen o sobrepasa el tamaño de 50 Kb o no es jpg, png, gif";

Según tu validación, se mostrará el mensaje de error (entrará en el bloque) cuando:
- La variable $tipo_archivo NO contenga alguno de los textos "gif", "png" o "jpeg"
- Y además $tamano_archivo sea menor de 50000

¿Qué sucede cuándo no se envió el archivo? ambas variables tienen valores nulos (están vacias) por lo que:
- Cumple que $tipo_archivo NO tiene ni "gif", ni "png" ni "jpeg" (porque, de hecho, no tiene nada)
- Y $tamano_archivo es menor de 50000 (nada, osea '0', es menor que cualquier valor positivo)

¿Resultado? ... ¡Eh ahí el error! . Tienes un problema de lógica, no estás considerando esta situación donde no se envió el archivo y las variables están vacías. Entonces tu validación tendría que considerarlo y mostrar el mensaje solo cuando:
- $tamano_archivo NO este vacío (o $tipo_archivo ... o ambas ... pero con una debería bastar; sugiero el tamaño del archivo).
- Y la variable $tipo_archivo NO contenga alguno de los textos "gif", "png" o "jpeg"
- Y además $tamano_archivo sea menor de 50000

Para esa agregar esa condición faltante te puedes valer de la función empty() que mencioné anteriormente ...

Claro, eso siguiendo tu metodología y solo para que lo entendieses, la verdad es que deberías hacer uso de la función is_uploaded_file() como lo muestra la FAQ ... así, una vez más, te aconsejo darle una mirada.

Espero haberme explicado y aclarado la duda. Suerte
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 30/09/2008, 04:10
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: upload imagen

Muchas gracias Jam:

Encontre FAQS y y lo arreglé. (para el futuro, por si las moscas.)

Te agradezco mucho tu extensa explicación.
Seguire´aprendiendo gracias a vosotros.
Un saludo
  #9 (permalink)  
Antiguo 30/09/2008, 13:35
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: upload imagen

Que bueno que lo hayas solucionado. Ojalá y pudieras decir el cómo para dejar la referencia. Quizá a alguien más le sirva, ¿no crees?.

Un saludo
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #10 (permalink)  
Antiguo 30/09/2008, 15:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: upload imagen

Paciencia de oro mi estimado jam
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 11:41.