Foros del Web » Programando para Internet » PHP »

Problemas en php al insertar campo NULL en MySQL

Estas en el tema de Problemas en php al insertar campo NULL en MySQL en el foro de PHP en Foros del Web. Que tal amigo del foro, vengo con una duda que me ha estado quitando el sueño por algunos dias. Tengo una tabla en mysql de ...
  #1 (permalink)  
Antiguo 13/10/2011, 07:54
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 13 años, 1 mes
Puntos: 25
Pregunta Problemas en php al insertar campo NULL en MySQL

Que tal amigo del foro, vengo con una duda que me ha estado quitando el sueño por algunos dias. Tengo una tabla en mysql de empresa y grupo. Creo una relacion de empresa a grupo donde una empresa puede o no pertenecer a un grupo. Algo similar tengo tambien en otra tabla de contacto, donde de manera obligatoria, un contacto pertenece a una empresa, y ahi no hay problema en la relacion, puesto que en mi formulario php, se valida de manera obligatoria para el registro de un contacto con una empresa.

Al principio crei que el problema era en mi base de datos, pero hemos comprobado que no es asi. puesto que en mi campo relacionado, esta definido como NULL y si captura registro desde mysql, pero no desde mi formulario. Entonces todo apunta a que sea en mi codigo php.

Les explico rapido como esta estructurado. Retomo los valores con metodo POST de los campos de mi formulario php
Código PHP:
Ver original
  1. $nomComercial=$_POST['nombre_comercial'];
  2.     $nomGr=$_POST['grupo'];
  3.     $razSocial=$_POST['razon_social'];
  4.     $giroEmp=$_POST['giro_empresa'];
  5.     $rfcEmp=$_POST['rfc'];
  6.     $calleEmp=$_POST['calle'];
  7.     $noExter=$_POST['no_ext'];
  8.     $noInter=$_POST['no_int'];
  9.     $cpEmp=$_POST['codigo_postal_emp'];
  10.     $estadoEmp=$_POST['estado_emp'];
  11.     $municEmp=$_POST['municipio_emp'];
  12.     $coloniaEmp=$_POST['colonia_emp'];
  13.     $ladaEmp=$_POST['lada_emp'];
  14.     $telEmp=$_POST['tel_emp'];
  15.     $extEmp=$_POST['exten_emp'];
  16.     $clasifEmp=$_POST['clasif_emp'];
  17.    
  18.     $nomComercialGr=$_POST['nom_comer_gr'];
  19.     $razSocialGr=$_POST['raz_soc_gr'];
  20.     $rfcGr=$_POST['rfc_gr'];
  21.     $giroGr=$_POST['giro_gr'];
  22.     $calleGr=$_POST['calle_gr'];
  23.     $noExterGr=$_POST['no_ext_gr'];
  24.     $noInterGr=$_POST['no_int_gr'];
  25.     $cpGr=$_POST['cod_post_gr'];
  26.     $estadoGr=$_POST['estado_gr'];
  27.     $municGr=$_POST['municipio_gr'];
  28.     $coloniaGr=$_POST['colonia_gr'];
  29.     $ladaGr=$_POST['lada_gr'];
  30.     $telGr=$_POST['telefono_gr'];
  31.     $extGr=$_POST['exten_gr'];
  32.     $clasifGr=$_POST['clasif_gr'];

Despues creo una condicion validando algunos campos de manera obligatoria, que me indican si se esta llenando un solo formulario(Contacto), ó se esta llenando tambien el de empresa para crear un nuevo registro de empresa.
Código PHP:
Ver original
  1. if(!empty($nomCont) && !empty($apPatCont)&& !empty($apMatCont) && !empty($sxCont) && !empty($profCont) && !empty($puestoCont) && !empty($especCont) && !empty($dateCont) && !empty($mailCont) && !empty($ladaCont) && !empty($rangoCont) && !empty($origDat) && !empty($nomComercial) && !empty($razSocial) && !empty($giroEmp) && !empty($rfcEmp) && !empty($calleEmp) && !empty($noExter) && !empty($noInter) && !empty($cpEmp) && !empty($estadoEmp) && !empty($municEmp) && !empty($coloniaEmp) && !empty($ladaEmp) && !empty($telEmp) && !empty($extEmp) && empty($razSocialGr) && empty($rfcGr) && empty($giroGr) && empty($calleGr) && empty($noExterGr) && empty($noInterGr) && empty($cpGr) && empty($estadoGr) && empty($municGr) && empty($coloniaGr) && empty($ladaGr) && empty($telGr) && empty($extGr)){

Si esta condicion se cumple, procede a la captura del contacto y de la empresa, pero como hay una relacion de empresa a grupo, no me permite captura la empresa, y por consiguiente el contacto, sin capturar un grupo.

Código PHP:
Ver original
  1. //Empresa
  2.         $insertar=mysql_query("INSERT INTO empresa(nombre_comercial,nom_comer_gr,razon_social,giro_empresa,rfc,calle,no_ext,no_int,codigo_postal_emp,estado_emp,municipio_emp,colonia_emp,lada_emp,tel_emp,exten_emp,clasif_emp) VALUES('{$nomComercial}','{$nomComercialGr}','{$razSocial}','{$giroEmp}','{$rfcEmp}','{$calleEmp}','{$noExter}','{$noInter}','{$cpEmp}','{$estadoEmp}','{$municEmp}','{$coloniaEmp}','{$ladaEmp}','{$telEmp}','{$extEmp}','{$clasifEmp}')",$conexion);
  3.        
  4.        
  5.         //Contacto
  6.         $insertar_cont=mysql_query("INSERT INTO contacto(nombre_comercial,nombre_contacto,ap_paterno_cont,ap_materno_cont,sx_cont,profesion_cont,puesto_cont,especialidad_cont,date_cont,email_cont,lada_cont,tel_cont,ext_cont,rango_cont,perteneciente) VALUES('{$nomComercial}','{$nomCont}','{$apPatCont}','{$apMatCont}','{$sxCont}','{$profCont}','{$puestoCont}','{$especCont}','{$dateCont}','{$mailCont}','{$ladaCont}','{$telCont}','{$extCont}','{$rangoCont}','{$origDat}')",$conexion);

Al parecer el problema viene en la variable $nomComercialGr, puesto que ahi me amacena el valor del grupo, si es que existe un grupo, si no, no almacena registro alguno.

  #2 (permalink)  
Antiguo 13/10/2011, 08:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Problemas en php al insertar campo NULL en MySQL

El problema es que si es opcional el campo, tu estas armando tu query esperando siempre un valor, y lo que hace PHP al armar la query es dejarlo así:
Código MySQL:
Ver original
  1. INSERT INTO empresa (nom_comer_gr) VALUES ('NULL')

Lo cual es erroneo, en ese caso el query correcto debería ser así:
Código MySQL:
Ver original
  1. INSERT INTO empresa (nom_comer_gr) VALUES (NULL)

Sin las comillas simples, para resolverlo tienes que re-estructurar como creas las queries, por ejemplo:

Código PHP:
Ver original
  1. <?php
  2. $empresa = empty($_POST['empresa']) ? 'NULL' : "'" . mysql_real_escape_string($_POST['empresa']) . "'";
  3.  
  4. $query = "INSERT INTO empresa (nom_comer_gr) VALUES ($empresa)";

Aunque lo mejor es que uses PDO y prepared statements, así te evitas ese paso y PDO se encarga de escapar y reemplazar la variable por su valor correcto:
Código PHP:
Ver original
  1. $empresa = isset($_POST['empresa']) ? $_POST['empresa'] : null;
  2.  
  3. $db = new PDO($dsn);
  4. $sth = $db->prepare('INSERT INTO empresa (nom_comer_gr) VALUES (?)');
  5.  
  6. $sth->execute(array($empresa));

Saludos.
  #3 (permalink)  
Antiguo 13/10/2011, 08:55
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 13 años, 2 meses
Puntos: 48
Respuesta: Problemas en php al insertar campo NULL en MySQL

Nesecito saber si pasa tu if.
Agrega debajo de tu if un:
Código PHP:
Ver original
  1. echo "<script>alert('Entre en en if')</script>";

y dime si entro.
--------------------------------
debajo de esto : $nomComercialGr=$_POST['nom_comer_gr']; agrega lo siguiente:
Código PHP:
Ver original
  1. echo "<script>alert('El valor recibido es: '".$nomComercialGr.")</script>";
y dime que recibes para cuando no ingresas un grupo para esa empresa.
-----------------------------------------------------------

Recuerda que cuando no ingresas un grupo para la empresa estas recibiendo un NULL o nada(en realidad no lo se porque no pusiste el codigo del formulario en el cliente) ..... DEBES MODIFICAR TU VARIABLE y colocarle un NULL como string. osea que en la linea 18 del codigo php que mostraste debes cambiarla por esto

Código PHP:
Ver original
  1. if(!isset($_POST['nom_comer_gr'] or $_POST['nom_comer_gr']==NULL or $_POST['nom_comer_gr']=='' ){
  2.     $nomComercialGr='NULL';
  3. }else{
  4.     $nomComercialGr="'".$_POST['nom_comer_gr']."'";
  5. }
(borra la linea 18 y remplazala por eso).
fijate que en el else le agregue una comilla simple...dentro de la comillas dobles..... ahora debes borrar las comillas simples de tu query las que estan asi:
$insertar=......'{$nomComercialGr}'......
y dejar asi:
$insertar=......{$nomComercialGr}......
aqui el codigo a reemplazar:
Código MySQL:
Ver original
  1. //Empresa
  2.         /* ANTIGUO
  3. $insertar=mysql_query("INSERT INTO empresa(nombre_comercial,nom_comer_gr,razon_social,giro_empresa,rfc,calle,no_ext,no_int,codigo_postal_emp,estado_emp,municipio_emp,colonia_emp,lada_emp,tel_emp,exten_emp,clasif_emp) VALUES('{$nomComercial}','{$nomComercialGr}','{$razSocial}','{$giroEmp}','{$rfcEmp}','{$calleEmp}','{$noExter}','{$noInter}','{$cpEmp}','{$estadoEmp}','{$municEmp}','{$coloniaEmp}','{$ladaEmp}','{$telEmp}','{$extEmp}','{$clasifEmp}')",$conexion);*/
  4. //NUEVO(le borre las comillas simples)
  5.         $insertar=mysql_query("INSERT INTO empresa(nombre_comercial,nom_comer_gr,razon_social,giro_empresa,rfc,calle,no_ext,no_int,codigo_postal_emp,estado_emp,municipio_emp,colonia_emp,lada_emp,tel_emp,exten_emp,clasif_emp) VALUES('{$nomComercial}',{$nomComercialGr},'{$razSocial}','{$giroEmp}','{$rfcEmp}','{$calleEmp}','{$noExter}','{$noInter}','{$cpEmp}','{$estadoEmp}','{$municEmp}','{$coloniaEmp}','{$ladaEmp}','{$telEmp}','{$extEmp}','{$clasifEmp}')",$conexion);
  6.        
  7.         //Contacto
  8.         $insertar_cont=mysql_query("INSERT INTO contacto(nombre_comercial,nombre_contacto,ap_paterno_cont,ap_materno_cont,sx_cont,profesion_cont,puesto_cont,especialidad_cont,date_cont,email_cont,lada_cont,tel_cont,ext_cont,rango_cont,perteneciente) VALUES('{$nomComercial}','{$nomCont}','{$apPatCont}','{$apMatCont}','{$sxCont}','{$profCont}','{$puestoCont}','{$especCont}','{$dateCont}','{$mailCont}','{$ladaCont}','{$telCont}','{$extCont}','{$rangoCont}','{$origDat}')",$conexion);

(porque las comillas se las agregamos arriba). La razon por la que se hace esto es porque puedas que nesecites ingresar un NULL y si le agregas comillas seria una cadena llamada NULL como es una cadena te la va a bloquear porque esta relacionada con otra tabla que no posee una cadena llamada NULL.


si no te funciona esto entonces enviame los resultados de los alert() de arriba para saber que datos recibes en $_POST['nom_comer_gr'] cuando no ingresas un grupo
  #4 (permalink)  
Antiguo 13/10/2011, 08:57
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 13 años, 2 meses
Puntos: 48
Respuesta: Problemas en php al insertar campo NULL en MySQL

mmmmm habia dejado abierta la pestaña y no actualice. envie lo mismo que GatorV, perdon.
  #5 (permalink)  
Antiguo 17/10/2011, 15:37
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 13 años, 1 mes
Puntos: 25
Respuesta: Problemas en php al insertar campo NULL en MySQL

Gracias por su aporte a ambos. Aunque aun tengo problemas.

He usado ambos metodos. @GatorV, tu aporte me sirve muy bien, sin embargo nada mas me declara null todo valor que entre en esa variable.

@Rodrhigo, tu propuesta es interesante para declarar null o not null una variable, pero al momento de implementar el if que me recomendaste, me sale un error de sintaxis:
Código PHP:
Ver original
  1. Parse error: syntax error, unexpected T_LOGICAL_OR, expecting ',' or ')' in C:\xampp\htdocs\crm_beta\admin\registro.php on line 47

y con el script de alerta que me recomendaste que adaptara, me sale este mesaje


Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in C:\xampp\htdocs\crm_beta\admin\registro.php on line 87

pero nada mas me aparece si emplemento el script alert. Que pudiera estar pasando?
  #6 (permalink)  
Antiguo 17/10/2011, 15:41
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 13 años, 1 mes
Puntos: 25
Respuesta: Problemas en php al insertar campo NULL en MySQL

@Rodrhigo por cierto, en el error que me marca con la sentencia if, aparece error en la linea 47, y esta seria asi:
Código PHP:
Ver original
  1. if(!isset($_POST['nom_comer_gr'] or $_POST['nom_comer_gr']==NULL or $_POST['nom_comer_gr']=='' ){

Y he eliminado las comillas en {$nomComercialGr}, que es la variable que almacena el valor.
  #7 (permalink)  
Antiguo 17/10/2011, 15:45
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: Problemas en php al insertar campo NULL en MySQL

Cita:
Iniciado por Oscar_Hidro Ver Mensaje
@Rodrhigo por cierto, en el error que me marca con la sentencia if, aparece error en la linea 47, y esta seria asi:
Código PHP:
Ver original
  1. if(!isset($_POST['nom_comer_gr'] or $_POST['nom_comer_gr']==NULL or $_POST['nom_comer_gr']=='' ){
El error es bastante evidente, pues estas usando mal la función isset().
Cita:
if(!isset($_POST['nom_comer_gr']) or $_POST['nom_comer_gr']==NULL or $_POST['nom_comer_gr']=='' )
Como puedes ver te hacía falta cerrar el paréntesis.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 17/10/2011, 16:58
Avatar de Oscar_Hidro  
Fecha de Ingreso: septiembre-2011
Ubicación: Aguascalientes, Mexico.
Mensajes: 200
Antigüedad: 13 años, 1 mes
Puntos: 25
Respuesta: Problemas en php al insertar campo NULL en MySQL

Por fin, despues de batallar algun tiempo, y con la aportacion de ustedes, se ha resuelto este problema. Les comento:

La variable $nomComercialGr puede tomar un valor null o not null, dependiendo si se genera un dato de un grupo, que es la variable que va ligada a ese campo en mi formulario.

Tenia dos problemas. Uno era el declarar una variable, y que identificara si era NULL, para poder meter el valor a mi base de datos. Eso, gracias a su aportacion se resolvio.

Peeeeeero, tenia yo un pequeño gran detalle.

Como la variable $nomComercialGr la utilizo para emplear tres condiciones, tenia que hacer el comparativo de si era o no null en la condicion correspondiente a la relacion entre grupo y empresa.

Si me hicieron notar este detalle, y yo caia en el error de hacer la comparacion en donde le declaraba mi variable.

Tema cerrado, y gracias nuevamente por su aportacion :D

Etiquetas: formulario, mysql
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:48.