Foros del Web » Programando para Internet » PHP »

Enviar NULL a BD

Estas en el tema de Enviar NULL a BD en el foro de PHP en Foros del Web. hola ha todo como estan veran tengo mi formulario en el cual tengo combos anidados los tipicos Pais, Provincia,Departamento y Distrito bueno hasta hai no ...
  #1 (permalink)  
Antiguo 04/02/2016, 08:53
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Enviar NULL a BD

hola ha todo como estan veran tengo mi formulario en el cual tengo combos anidados los tipicos Pais, Provincia,Departamento y Distrito bueno hasta hai no hay problema el tema esta que esto combos son opcionales para llenar y pues si no se llenan deberian mandarse en NULL ya que en mi Tabla donde se guardan esta relacionadas con las tablas Pais, Provincia,Departamento y Distrito y para ello tengo el siguiente codigo
Código PHP:
Ver original
  1. $nce_data["ne_pais"] = isset($_POST["ne_pais"])?$_POST["ne_pais"]:NULL;
el problema esta en que cuando no selecciono nada no envia el NULL y me manda el error de BD
Código MySQL:
Ver original
  1. SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`d2000177_jmerpv1`.`empresa`, CONSTRAINT `empresa_pais` FOREIGN KEY (`jc_pais_id`) REFERENCES `pais` (`jc_pais_id`))NULL
no se si este realizando mal mi validacion ayuda por favor
  #2 (permalink)  
Antiguo 04/02/2016, 09:42
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: Enviar NULL a BD

Si bien recuerdo, esto sucede en SqlServer, la solución es que tu envies un parámetro único que sustituya el NULL, por ejemplo en ves de NULL puedes enviar "-1" y cuando llegue este valor a tu tabla deberás realizar la validación:

Código SQL:
Ver original
  1. INSERT INTO tablita VALUES (NULL, '".$post['nombre']."',CASE WHEN ".$POST['pais']." == -1 THEN NULL ELSE '"$POST['pais']"' END);

Saludos
  #3 (permalink)  
Antiguo 04/02/2016, 09:48
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Enviar NULL a BD

mmmm tienes razon pero desde mi aplicación podría realizar la misma validación y es por ello que uso el isset para validar se la variable existe o No pues lo que mencionas seria otra validacion mas no es asi o estoy mal
  #4 (permalink)  
Antiguo 04/02/2016, 10:15
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: Enviar NULL a BD

BlackJccl1, si es una validación adicional, pero ten cuenta que no todos los lenguajes son flexibles así como las Base de datos.

No mencionas en que Plataforma de Base de Datos Trabajas, y sería interesante que realices un tracert en el momento en que te genera el error y muestres como en realidad llegan los datos antes de realizar la insersión (por ejemplo).

Ahora esto de la flexibilidad tienen ventajas y desventajas, por ejemplo en JAVA se requiere realizar muchas mas validaciones que en PHP pero así te garantiza que lo que envías es el dato correcto (considéralo como un ejemplo).
  #5 (permalink)  
Antiguo 04/02/2016, 10:48
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Enviar NULL a BD

Gracias por tu atención al tema pues si hice un tracert que en php seria un var_dump()
Código PHP:
Ver original
  1. var_dump($nce_data["ne_pais"]);
y pues me devuelve una cadena
Código PHP:
Ver original
  1. string(4) "NULL"
Y pues la BD que uso es MySql
  #6 (permalink)  
Antiguo 04/02/2016, 11:26
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: Enviar NULL a BD

Cita:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`d2000177_jmerpv1`.`empresa`, CONSTRAINT `empresa_pais` FOREIGN KEY (`jc_pais_id`) REFERENCES `pais` (`jc_pais_id`))NULL
Tu problema se origina en un tema de integridad...
De acuerdo a la definición de tu tabla, el dato de jc_pais_id es obligatorio y no puede ser NULL, dado que no existe un jc_pais_id nulo en su tabla origen.

Tendrás que modificar tu aplicación para que obligue al usuario a seleccionar el país, o bien agregar un "Pais no definido" en la tabla de países y usar si PK como valor por default cuando el usuario no lo selecciona.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 04/02/2016, 11:31
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Enviar NULL a BD

Lo que mencionas lo se y sobre crear un valor por defecto tambien lo pense pero no se si eso este bien y pues por eso pense en enviar NULL cosa que he probado y si funciona claro lo he hecho de manera manual
  #8 (permalink)  
Antiguo 04/02/2016, 11:41
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: Enviar NULL a BD

OK...
Ahora bien, ¿te das cuenta que al permitir enviar un NULL en un campo relacional, estás rompiendo la integridad referencial y generando datos inconsistentes, no?
Eso tarde o temprano traerá problemas. Siempre.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 04/02/2016, 11:51
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años
Puntos: 2
Respuesta: Enviar NULL a BD

Pues eso también lo tengo en cuenta pues que sugieres que agregue un campo mas para cuando no se seleccione nada como lo harias tu si fuese asi
Gracias por prestarle atencion al tema
  #10 (permalink)  
Antiguo 04/02/2016, 12:17
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: Enviar NULL a BD

gnzsoloyo tiene razon, si ese campo está referenciado y el usuario no selecciona ningún país, deberías validarlo, no tiene sentido registrar un país nulo. la validación debería impedir la insersión de ese registro.

Etiquetas: bd, formulario, null, sql, tabla
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 21:59.