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

Fechas null

Estas en el tema de Fechas null en el foro de Mysql en Foros del Web. Hola! tengo un problemita o más que nada es una consulta con algo que estoy haciendo. El contexto es una página donde egreso insumos médicos ...
  #1 (permalink)  
Antiguo 26/09/2011, 15:34
 
Fecha de Ingreso: julio-2011
Mensajes: 39
Antigüedad: 8 años, 4 meses
Puntos: 0
Fechas null

Hola! tengo un problemita o más que nada es una consulta con algo que estoy haciendo. El contexto es una página donde egreso insumos médicos y bueno como no todos estos tienen fecha de vencimiento, lo dejé como campo opcional. El problema es que cuando ingreso algo que no tiene fecha de vencimiento, me almacena 0000-00-00 y no el campo vacío, cuando rescato los datos los 0000-00-00 se convierten en 01-01-1970, como podría hacer para que simplemente no guarde nada cuando no ingresa datos??.
Saludos!
  #2 (permalink)  
Antiguo 26/09/2011, 15:59
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 12 años, 11 meses
Puntos: 447
Respuesta: Fechas null

Hola pabloccontreras:

Si tu campo permite nulos, no deberías tener problemas. Checa el script:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE TuTabla (id INT, fecha DATETIME);
  2. Query OK, 0 rows affected (0.13 sec)
  3.  
  4. mysql> INSERT INTO TuTabla VALUES (1, NULL), (2, '2011-09-26');
  5. Query OK, 2 rows affected (0.04 sec)
  6. Records: 2  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> INSERT INTO TuTabla (id) VALUES (3);
  9. Query OK, 1 row affected (0.03 sec)
  10.  
  11. mysql> INSERT INTO TuTabla (id, fecha) VALUES (4, NULL), (2, '2011-02-23');
  12. Query OK, 2 rows affected (0.03 sec)
  13. Records: 2  Duplicates: 0  Warnings: 0
  14.  
  15. mysql> SELECT * FROM TuTabla;
  16. +------+---------------------+
  17. | id   | fecha               |
  18. +------+---------------------+
  19. |    1 | NULL                |
  20. |    2 | 2011-09-26 00:00:00 |
  21. |    3 | NULL                |
  22. |    4 | NULL                |
  23. |    2 | 2011-02-23 00:00:00 |
  24. +------+---------------------+
  25. 5 rows in set (0.00 sec)

observa que los id's 1, 3 y 4 contienen null en como valor. La inserción la hago de tres formas diferentes y en todas me respeta el valor null. Sería conveniente que nos pongas el script de creación de tu tabla y que pongas también la forma en que estás realizando el Insert, creo que por ahí va el problema.

Saludos
Leo.
  #3 (permalink)  
Antiguo 26/09/2011, 16:22
 
Fecha de Ingreso: julio-2011
Mensajes: 39
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Fechas null

Bueno mi tabla la creé de esta forma
Código PHP:
CREATE TABLE IF NOT EXISTS `entrada_insum` (
  `
idint(255NOT NULL AUTO_INCREMENT,
  `
fecha_vencimientodate DEFAULT NULL,
  `
nombre_insumovarchar(150COLLATE utf8_spanish2_ci NOT NULL,
  `
cantidadint(100NOT NULL,
  `
presentacionvarchar(100COLLATE utf8_spanish2_ci NOT NULL,
  
PRIMARY KEY (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci 
Con este código inserto los datos:

Código PHP:
$fecha_vencimiento = array();
$nombre_insumo= array();
$cantidad= array();
$presentacion= array();


foreach(
$_POST['fecha_vencimiento'] as $key=>$value)
    
$fecha_vencimiento[]= $value;
    
foreach(
$_POST['nombre_insumo'] as $key=>$value)
    
$nombre_insumo[]= $value;

foreach(
$_POST['cantidad'] as $key=>$value)
    
$cantidad[]= $value;
 
foreach(
$_POST['presentacion'] as $key=>$value)
    
$presentacion[]= $value;
    

 for(
$i=0$i<count($nombre_insumo); $i++) 
{
       
$fecha=$fecha_vencimiento[$i];
       
$nuevaFecha=implode('-',array_reverse(explode('-',$fecha)));
    
mysql_select_db($database_conexion$conexion);
       
$query_ingreso "SELECT * FROM entrada_insum WHERE nombre_insumo='$nombre_insumo[$i]' AND fecha_vencimiento='$nuevaFecha'";
       
$ingreso mysql_query($query_ingreso$conexion) or die(mysql_error());
       
$row_ingreso mysql_fetch_assoc($ingreso);
       
$totalRows_ingreso mysql_num_rows($ingreso);

    if(
$totalRows_ingreso == 0){
         
mysql_query("INSERT INTO entrada_insum (fecha_vencimiento, nombre_insumo, cantidad, presentacion) VALUES('$nuevaFecha','$nombre_insumo[$i]', $cantidad[$i], '$presentacion[$i]')",$conexion)or die(mysql_error());
    }
    else{
        
mysql_query("UPDATE entrada_insum SET cantidad = cantidad+'$cantidad[$i]' where nombre_insumo='$nombre_insumo[$i]' AND fecha_vencimiento='$nuevaFecha'",$conexion);
    }
        

Los datos provienen de una tabla dinámica, por eso los arrays
  #4 (permalink)  
Antiguo 27/09/2011, 01:15
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 8 años, 4 meses
Puntos: 793
Respuesta: Fechas null

Si quieres el campo fecha como NULL simplemente quita la fecha de vencimiento de tu insert. Tu consulta quedaría así:

Código PHP:
Ver original
  1. mysql_query("INSERT INTO entrada_insum (nombre_insumo, cantidad, presentacion) VALUES ('$nombre_insumo[$i]', $cantidad[$i], '$presentacion[$i]')",$conexion)or die(mysql_error());

Lo probé así y funciona con datos manualmente, espero que no seá otra lógica de tu código PHP. Cualquier cosa estoy para ayudarte.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 27/09/2011, 09:48
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 12 años, 11 meses
Puntos: 447
Respuesta: Fechas null

Hola de nuevo pabloccontresas:

La opción del compañero AndresdzPHP es una de las diferentes opciones que tienes para hacer el insert, de hecho, los tres tipos de inserción que te puse en el primer post funcionan:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE IF NOT EXISTS `entrada_insum` (
  2.     ->   `id` INT(255) NOT NULL AUTO_INCREMENT,
  3.     ->   `fecha_vencimiento` DATE DEFAULT NULL,
  4.     ->   `nombre_insumo` VARCHAR(150) COLLATE utf8_spanish2_ci NOT NULL,
  5.     ->   `cantidad` INT(100) NOT NULL,
  6.     ->   `presentacion` VARCHAR(100) COLLATE utf8_spanish2_ci NOT NULL,
  7.     ->   PRIMARY KEY (`id`)
  8.     -> ) ENGINE=MYISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci;
  9. Query OK, 0 rows affected (0.06 sec)
  10.  
  11. mysql> #Listando los campos, excepto la fecha (Propuesta de Andresdzphp)
  12. mysql> INSERT INTO `entrada_insum`
  13.     -> (nombre_insumo, cantidad, presentacion)
  14.     -> VALUES ('uno', 1, 'presentacion 1');
  15. Query OK, 1 row affected (0.00 sec)
  16.  
  17. mysql> #Listando los campos y enviando NULL (Tal como lo tienes)
  18. mysql> INSERT INTO `entrada_insum`
  19.     -> (fecha_vencimiento, nombre_insumo, cantidad, presentacion)
  20.     -> VALUES (NULL, 'dos', 1, 'presentacion 2');
  21. Query OK, 1 row affected (0.00 sec)
  22.  
  23. mysql> #Sin Listar los campos enviando null
  24. mysql> INSERT INTO `entrada_insum`
  25.     -> VALUES (NULL, 'tres', 1, 'presentacion 3');
  26. Query OK, 1 row affected (0.00 sec)
  27.  
  28. mysql> SELECT * FROM `entrada_insum`;
  29. +----+-------------------+---------------+----------+----------------+
  30. | id | fecha_vencimiento | nombre_insumo | cantidad | presentacion   |
  31. +----+-------------------+---------------+----------+----------------+
  32. |  1 | NULL              | uno           |        1 | presentacion 1 |
  33. |  2 | NULL              | dos           |        1 | presentacion 2 |
  34. |  3 | NULL              | tres          |        1 | presentacion 3 |
  35. +----+-------------------+---------------+----------+----------------+
  36. 3 rows in set (0.00 sec)

En tu caso estás utilizando la opción (2) es decir, estás listando todos los campos de la tabla (con excepción del id que es un autoincremental):

Código PHP:
Ver original
  1. mysql_query("INSERT INTO entrada_insum (fecha_vencimiento, nombre_insumo, cantidad, presentacion) VALUES('$nuevaFecha','$nombre_insumo[$i]', $cantidad[$i], '$presentacion[$i]')"

Lo único que tienes que asegurar es que tu parámetro '$nuevaFecha' sea NULL si quieres dejar la fecha vacía, por lo que el problema pareciera con PHP, no con la tabla, utiliza la opción que más te convenga.

Saludos
Leo.

Etiquetas: null
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 22:08.