Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] condicion if else no se cumple para boton file

Estas en el tema de condicion if else no se cumple para boton file en el foro de PHP en Foros del Web. Buenas forosdelweb!!. Mi problema es el siguiente, pienso que básico pero no se porque no me funciona la condición. Tengo un formulario en el cual ...
  #1 (permalink)  
Antiguo 14/05/2014, 04:03
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Pregunta condicion if else no se cumple para boton file

Buenas forosdelweb!!.
Mi problema es el siguiente, pienso que básico pero no se porque no me funciona la condición.

Tengo un formulario en el cual hay varios campos que se pueden modificar para luego actualizar con un
Cita:
UPDATE
en otro fichero.

Bien el form contiene un campo
Cita:
type='file'
para permitir seleccionar una imagen nueva, sino se selecciona se deja la anterior.

Código HTML:
Ver original
  1. <form method='POST' action='trabajos_consultar3.php' enctype = 'multipart/form-data'>
  2. ..... otros campos
  3. (*)Imagen: <input type = 'file' name = 'imagen' />  <br/>
  4. .... otros campos....
  5. <input type='submit' value='Actualizar' name='enviar'>

Cuando relleno los campos y selecciono una nueva imagen a subir en el type='file', el código funciona sin mostrar errores.

Pero cuando no selecciono ninguna imagen en el input type='file', el fichero que procesa el UPDATE me muestra fallos en la creación de la imagen.

Estoy haciendo un IF ELSE para conocer si se pasa un valor a esa $VARIABLE, de esta forma, pero no consigo quitar el error Cuando no se elige imagen. aunque el código funciona pero muestra ell error.

El fichero es:

Código PHP:
Ver original
  1. <?php
  2.              
  3.  
  4.                 /**** DATOS DE CONEXION **********/        
  5.                 $hotsdb = "localhost";  //valor de nuestra BD
  6.                 $basededatos = "control3";  //sera el valor de nuestra BD
  7.  
  8.                 $usuariodb = "root";        //sera el valor de nuestra BD
  9.                 $clavedb = "";      //sera el valor de nuestra BD
  10.  
  11.  
  12.                 $conexion_db = mysql_connect("$hotsdb","$usuariodb","$clavedb")
  13.                 or die ("Conexión denegada, el Servidor de BD que solicita
  14.                         NO EXISTE");
  15.                 $db = mysql_select_db("$basededatos", $conexion_db)
  16.                 or die ("La Base de Datos <b>$basededatos</b> NO EXISTE");
  17.  
  18.                
  19.                 $cadena = "";
  20.                
  21.                 $codtrabajo=$_POST["codtrabajo"];
  22.                 $estado=$_POST["estado"];
  23.                 $pagado=$_POST["pagado"];
  24.                 $observacion=$_POST["observacion"];
  25.                 $descripcion=$_POST["descripcion"];
  26.                 $precio=$_POST["precio"];
  27.                 $fecha_entrada=$_POST["fecha_entrada"];
  28.                 $fecha_entrega=$_POST["fecha_entrega"];
  29.                 $ac=$_POST["ac"];
  30.                
  31.                
  32.                
  33.                 //IF para nombre de la imagen, si se escribe se realiza este UPDATE sino el de ELSE
  34.                 if (isset($_FILES['imagen']) ) {
  35.  
  36.                 //$imagen = $FILES['imagen'];
  37.                
  38.                 /************ imagen visualizacion y creacion ***********/
  39.                 $nombre = "camisa-" . $codtrabajo ;
  40.                
  41.                 $im     = imagecreatefrompng($_FILES["imagen"]["tmp_name"]);
  42.                 $color = imagecolorallocate($im, 220, 210, 60);
  43.                 $px     = (imagesx($im) - 20 * strlen($cadena)) / 2 ;
  44.                 imagestring($im, 7, $px, 70, $cadena, $color);
  45.                 //imagepng($im);        //visualiza en naveg
  46.                 imagepng($im, "img/".$nombre.".png");   //guarda imagen en img/esenombre.
  47.                 imagedestroy($im);
  48.  
  49.                 $query = "
  50.                         UPDATE trabajos tr
  51.                         SET     tr.codtrabajo= '".$codtrabajo."',
  52.                                 tr.estado= '".$estado."',
  53.                                 tr.pagado= '".$pagado."',
  54.                                 tr.observacion= '".$observacion."',
  55.                                 tr.descripcion= '".$descripcion."',
  56.                                 tr.precio= '".$precio."',
  57.                                 tr.tipo_imagen = '".$nombre."',
  58.                                 tr.fecha_entrada= '".$fecha_entrada."',
  59.                                 tr.fecha_entrega= '".$fecha_entrega."',
  60.                                 tr.ac= '".$ac."'
  61.                                
  62.                         WHERE tr.codtrabajo = '".$codtrabajo."'
  63.                         ";
  64.                        
  65.                 $result = mysql_query($query);
  66.                
  67.                 if(!mysql_query($query)) echo mysql_error();
  68.                
  69.                            
  70.                 $result = mysql_query($query);
  71.    
  72.                
  73.                
  74.                 include('cierra_conexion.php');  
  75.            
  76.                 }
  77.                 else if (!isset($_FILES['imagen']) ) {
  78.                
  79.                 //$imagen = $FILES['imagen'];
  80.            
  81.                 $query = "
  82.                         UPDATE trabajos tr
  83.                         SET     tr.codtrabajo= '".$codtrabajo."',
  84.                                 tr.estado= '".$estado."',
  85.                                 tr.pagado= '".$pagado."',
  86.                                 tr.observacion= '".$observacion."',
  87.                                 tr.descripcion= '".$descripcion."',
  88.                                 tr.precio= '".$precio."',
  89.                                 tr.fecha_entrada= '".$fecha_entrada."',
  90.                                 tr.fecha_entrega= '".$fecha_entrega."',
  91.                                 tr.ac= '".$ac."'
  92.                                
  93.                         WHERE tr.codtrabajo = '".$codtrabajo."'
  94.                         ";
  95.                        
  96.                 $result = mysql_query($query);
  97.                
  98.                 if(!mysql_query($query)) echo mysql_error();
  99.                
  100.                            
  101.                 $result = mysql_query($query);
  102.    
  103.                
  104.                
  105.                 include('cierra_conexion.php');  
  106.            
  107.                 }
  108.                 else {
  109.                
  110.                     echo "No hay cambios.";
  111.                 }
  112. ?>

Los errores que muestra en pantalla cuando no selecciono ninguna imagen son estos:

Código PHP:
Ver original
  1. Warning: imagecreatefrompng(): Filename cannot be empty in C:\xampp\htdocs\controltrabajos\trabajos_consultar3.php on line 161
  2.  
  3. Warning: imagecolorallocate() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\controltrabajos\trabajos_consultar3.php on line 162
  4.  
  5. Warning: imagesx() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\controltrabajos\trabajos_consultar3.php on line 163
  6.  
  7. Warning: imagestring() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\controltrabajos\trabajos_consultar3.php on line 164
  8.  
  9. Warning: imagepng() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\controltrabajos\trabajos_consultar3.php on line 166
  10.  
  11. Warning: imagedestroy() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\controltrabajos\trabajos_consultar3.php on line 167

Y no debería ya que para eso esta la condición IF que si no selecciono imagen en el input file se salte ese trozo de código.

¿¿ Que puede ser.??

Un saludoo y gracias !!
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #2 (permalink)  
Antiguo 14/05/2014, 04:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: condicion if else no se cumple para boton file

Código PHP:
Ver original
  1. if (!empty($_FILES)) {

Intenta esto
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 14/05/2014, 04:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: condicion if else no se cumple para boton file

De hecho el array $_FILES nunca vendrá vacío, sin embargo contiene un índice de error que sirve precisamente para determinar si se eligió o no un archivo.

Hay que revisar el manual: http://php.net/manual/es/features.file-upload.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 14/05/2014, 08:36
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: condicion if else no se cumple para boton file

He intentado colocando el
Cita:
empty
en el código pero tampoco me funciona, sigue mostrando los fallos en pantalla.

Saben como puedo por lo menos ocultarlos o otra forma de comprobar si se sube un fichero o no cuando se rellena el formulario y se actualiza con el
Cita:
UPDATE.
Pateketrueke he mirado el link pero no encuentro info sobre el índice de error que me dices que podría valer para comprobar si hay archivo para subir o no en mi formulario

Gracias!! Aún no he podido solucionar este fallo. :(

Saludos
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #5 (permalink)  
Antiguo 14/05/2014, 08:43
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: condicion if else no se cumple para boton file

Cita:
Iniciado por HackID1 Ver Mensaje
Pateketrueke he mirado el link pero no encuentro info sobre el índice de error que me dices que podría valer para comprobar si hay archivo para subir o no en mi formulario

Gracias!! Aún no he podido solucionar este fallo. :(

Saludos
Yo no tengo mucha idea de php, pero vamos, diria que en el enlace que te han puesto viene el código para comprobar (entre otras) la situación que tu comentas.
__________________
Aviso: No se resuelven dudas por MP!
  #6 (permalink)  
Antiguo 14/05/2014, 09:54
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: condicion if else no se cumple para boton file

He seguido leyendo información y al fin he dado con la solución para conocer como saber si hay fichero seleccionado o no.

He cambiado la línea 34 del código anterior:

Código PHP:
Ver original
  1. if (isset($_FILES['imagen']) ) {

Por esta condición:

Código PHP:
Ver original
  1. if( $_FILES['imagen']['type'] == '' ) {
  2.     $error = true;  //si error es TRUE es Q no se selecciono fichero. pasa a ELSE
  3.     echo 'No modificada la Imagen!';
  4.                
  5. }
  6.                
  7. if(empty($error))
  8. {
  9. //aqui el resto de código de creacion de imagen...
  10. //desde la LINEA 38 hasta la 74
Con esto compruebo que el tipo de archivo no sea '' (vacio). Y esta forma me funciono.

Y por ultimo he quitado el else if y tan solo he puesto un else.
Con lo que hay solo 2 condiciones una efectua la consulta si se sube la imagen y otra si no se sube imagen.

Gracias por vuestras sugerencias me vinieron muy bien, veo que este código lo puedo mejorar mucho, hasta para permitir tamaño máx o varios formatos de imagen.

:)
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Etiquetas: boton, cumple, fecha, file, formulario, mysql, select, sql, variable
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 07:59.