Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema al actualizar datos

Estas en el tema de Problema al actualizar datos en el foro de Mysql en Foros del Web. Saludos a todos, tengo problemas al querer hacer un UPDATE a los datos de una factura, he revisado uno a uno el nombre de los ...
  #1 (permalink)  
Antiguo 18/01/2015, 16:02
Avatar de heberthm  
Fecha de Ingreso: noviembre-2013
Ubicación: Cali
Mensajes: 65
Antigüedad: 10 años, 3 meses
Puntos: 1
Problema al actualizar datos

Saludos a todos, tengo problemas al querer hacer un UPDATE a los datos de una factura, he revisado uno a uno el nombre de los campos, también en revisado la sintaxis sql por medio de echo mysql_error(); y me arroja el siguiente error:
You have an error in your SQL syntax, check the manual that corresponds to your MySQL server version for the right syntax to use near " at line 3.

Pero lo más curioso del asunto, es que si omito del código la siguiente línea:
WHERE No_factura=".@$_POST['TxtNo_Factura'].""; me permite actualizar sin problemas, obviamente es un error dejar de escribir el WHERE en una actualización pués actualizará todos los datos sin discriminación.

Aquí el código de actualización:


Código MySQL:
Ver original
  1. UPDATE facturas SET
  2. cedula= '".@$_POST['TxtCedula']."',matricula_inmobiliaria='".@$_POST['TxtMatricula_inmobilaria']."' ,nombre='".@$_POST['TxtNombre']."',apellido1='".@$_POST['TxtApellido1']."',
  3. apellido2='".@$_POST['TxtApellido2']."',telefono='".@$_POST['TxtTelefono']."',direccion_cliente='".@$_POST['TxtDireccion_cliente']."',
  4. direccion_inmueble='".@$_POST['TxtDireccion_inmueble']."',dias='".@$_POST['TxtDias']."',
  5. mes='".@$_POST['TxtMeses']."', ano='".@$_POST['TxtAno']."', mes_plazo='".@$_POST['TxtMes_plazo']."',
  6. ano_plazo='".@$_POST['TxtAno_plazo']."', valor_credito='".@$_POST['TxtValor_credito']."',
  7. tasa_interes='".@$_POST['TxtTasa_interes']."', valor_interes='".@$_POST['TxtValor_interes']."',
  8. total_pagar='".@$_POST['TxtTotal_pagar']."', abono_interes='".@$_POST['TxtAbono_interes']."',
  9. abono_capital='".@$_POST['TxtAbono_capital']."'
  10. WHERE No_factura=".@$_POST['TxtNo_Factura']."
__________________
Hebeth Mazuera

Última edición por gnzsoloyo; 18/01/2015 a las 16:36 Razón: Sin etiquetar...
  #2 (permalink)  
Antiguo 18/01/2015, 16:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema al actualizar datos

Mira, a nivel de estructura de SQL, no hay ningún error, por lo que en realidad el error es seguro que se está produciendo a nivel de programación, donde muy probablemente el dato correspondiente a TxtNo_Factura está llegando como nulo.

Esto sería lo que tienes, un poco más ordenado:
Código SQL:
Ver original
  1. UPDATE facturas
  2.     SET cedula= '".@$_POST['TxtCedula']."',
  3.     matricula_inmobiliaria='".@$_POST['TxtMatricula_inmobilaria']."' ,
  4.     nombre='".@$_POST['TxtNombre']."',
  5.     apellido1='".@$_POST['TxtApellido1']."',
  6.     apellido2='".@$_POST['TxtApellido2']."',
  7.     telefono='".@$_POST['TxtTelefono']."',
  8.     direccion_cliente='".@$_POST['TxtDireccion_cliente']."',
  9.     direccion_inmueble='".@$_POST['TxtDireccion_inmueble']."',
  10.     dias='".@$_POST['TxtDias']."',
  11.     mes='".@$_POST['TxtMeses']."',
  12.     ano='".@$_POST['TxtAno']."',
  13.     mes_plazo='".@$_POST['TxtMes_plazo']."',
  14.     ano_plazo='".@$_POST['TxtAno_plazo']."',
  15.     valor_credito='".@$_POST['TxtValor_credito']."',
  16.     tasa_interes='".@$_POST['TxtTasa_interes']."',
  17.     valor_interes='".@$_POST['TxtValor_interes']."',
  18.     total_pagar='".@$_POST['TxtTotal_pagar']."',
  19.     abono_interes='".@$_POST['TxtAbono_interes']."',
  20.     abono_capital='".@$_POST['TxtAbono_capital']."'
  21. WHERE No_factura=".@$_POST['TxtNo_Factura']."

En la inmensa mayoría de los casos que nos consultan, donde crean la sentencia SQL dinámicamente, el problema es de datos, y no de SQL. Los que seinician el tema de programar para uso de BBDD no suelen tomarse la molestia de validar los datos que entran, asumiendo que siempre están bien, cosa que nadie debería asumir como cierta.
En tu caso puntual lo mas probable es lo que te digo: no está llegando el numero de factura, o bien lo que llega no es válido como tal.

En cualquier caso, lo mínimo que deberías hacer es al menos mostrar la consulta SQL en pantalla, verificar que esté todo bien, y no suponer que es asi.

Prueba y si tienes problemas producto de l parametro que PHP recibe postea en el foro de PHP, porque en este de MySQL sólo vemos los temas de SQL y BBDD (Ver las reglas del foro, por favor)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/01/2015, 18:25
Avatar de heberthm  
Fecha de Ingreso: noviembre-2013
Ubicación: Cali
Mensajes: 65
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Problema al actualizar datos

Gracias gnzsoloyo por tu valiosa ayuda. me pondré manos a la obra para encontrar el error de validación.
__________________
Hebeth Mazuera
  #4 (permalink)  
Antiguo 21/01/2015, 04:22
Avatar de giuli956  
Fecha de Ingreso: noviembre-2012
Mensajes: 149
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Problema al actualizar datos

Cita:
Iniciado por heberthm Ver Mensaje
Gracias gnzsoloyo por tu valiosa ayuda. me pondré manos a la obra para encontrar el error de validación.
Fijate que:
Código PHP:
Ver original
  1. No_factura=".@$_POST['TxtNo_Factura']."

parece como que todo es un string!, osea no queda la palabra POSt en negro y le nombre del campo en rojo, creo que le faltan ' (comillas simples):

Código MySQL:
Ver original
  1. UPDATE facturas
  2.     SET cedula= '".@$_POST['TxtCedula']."',
  3.     matricula_inmobiliaria='".@$_POST['TxtMatricula_inmobilaria']."' ,
  4.     nombre='".@$_POST['TxtNombre']."',
  5.     apellido1='".@$_POST['TxtApellido1']."',
  6.     apellido2='".@$_POST['TxtApellido2']."',
  7.     telefono='".@$_POST['TxtTelefono']."',
  8.     direccion_cliente='".@$_POST['TxtDireccion_cliente']."',
  9.     direccion_inmueble='".@$_POST['TxtDireccion_inmueble']."',
  10.     dias='".@$_POST['TxtDias']."',
  11.     mes='".@$_POST['TxtMeses']."',
  12.     ano='".@$_POST['TxtAno']."',
  13.     mes_plazo='".@$_POST['TxtMes_plazo']."',
  14.     ano_plazo='".@$_POST['TxtAno_plazo']."',
  15.     valor_credito='".@$_POST['TxtValor_credito']."',
  16.     tasa_interes='".@$_POST['TxtTasa_interes']."',
  17.     valor_interes='".@$_POST['TxtValor_interes']."',
  18.     total_pagar='".@$_POST['TxtTotal_pagar']."',
  19.     abono_interes='".@$_POST['TxtAbono_interes']."',
  20.     abono_capital='".@$_POST['TxtAbono_capital']."'
  21. WHERE No_factura='".@$_POST['TxtNo_Factura']."'
  #5 (permalink)  
Antiguo 21/01/2015, 05:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema al actualizar datos

@giuli956:

Eso quedó asi porque tuve que borrar todo el codigo PHP que @heberthm posteó y que no se debe poner en los foros de BBDD. Lo que mencionas es producto de no borrar todo, porque solo quite lo que afectaba la logica de SQL.
Por otro lado es totalmente incorrecto poner un valor numérico como cadena de texto en BBDD por dos razones:
1) Obliga al DBMS a realizar conversiones implícitas, y eventualmente alguno de ellos (caso Oracle), puede devovler un error porque no las admite.
2) Cuando el DBMS permite conversiones implícitas, usar una cadena esconde los errores de falta de datos, porque la conversion entre un espacio vacio y un numero es cero (0), que es un valor lícito en la consulta. Pero es un valor que no es lo que se recibe.

Un caracter vacío, y eso se debe tener presente siempre, no es NULL.

No es conveniente realizar en progrmamación codigo que pueda esconder errores que deberían manifestarse como excepciones. Eso es una mala práctica.

Te sorprendería la cantidad de veces que consultan por "errores" en la consutlta que en realidad son datos que no están llegando y que deberían ser nulos, pero se esconden porque los ponen como cadenas...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 21/01/2015, 06:39
Avatar de giuli956  
Fecha de Ingreso: noviembre-2012
Mensajes: 149
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: Problema al actualizar datos

Podria hacer un echo de la variable del POST para ver si es nula. Esa es una buena tecnica
  #7 (permalink)  
Antiguo 21/01/2015, 06:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema al actualizar datos

Cita:
Iniciado por giuli956 Ver Mensaje
Podria hacer un echo de la variable del POST para ver si es nula. Esa es una buena tecnica
Eso es tema del foro de PHP. En este no tratamos programación, sólo SQL y estructuras de datos.

Por otro lado, no sólo es una buena técnica, es obligatorio validar q ue algo llegue bien. Enviar a la base consultas-basura (consultas corruptas por datos), es una muy mala idea, pero muy usual en los que sólo programan y no se dedican de lleno a BBDD (sin pretender ofender a nadie).
Nunca se deben mandar a la base cosas sin verificar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, sql, update
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 05:40.