Foros del Web » Programando para Internet » PHP »

problema INSERT INTO mysql y php

Estas en el tema de problema INSERT INTO mysql y php en el foro de PHP en Foros del Web. Muy buenas a todos! Les explico el problema. En este tema: http://www.forosdelweb.com/f18/recorrer-dias-del-ano-922844/ tengo un codigo en PHP el cual saca las fechas de todo un ...
  #1 (permalink)  
Antiguo 21/06/2011, 05:36
Avatar de fbedia88  
Fecha de Ingreso: enero-2011
Ubicación: Santander
Mensajes: 83
Antigüedad: 13 años, 4 meses
Puntos: 20
problema INSERT INTO mysql y php

Muy buenas a todos! Les explico el problema.

En este tema: http://www.forosdelweb.com/f18/recorrer-dias-del-ano-922844/ tengo un codigo en PHP el cual saca las fechas de todo un año correspondientes a un dia de la semana... por ejemplo el lunes o el martes...etc.

El 2º paso, es guardar esas fechas en una tabla. La tabla tiene la siguiente estructura:

Código:
TABLA agendas_excepciones (id, id_agenda, fecha_inicio, fecha_fin, activa)
El codigo que estoy ejecutando es el siguiente, el cual hace un INSERT INTO en la tabla con las fechas correspondientes:

Código PHP:
<?php

include('../../includes/config.php');
include(
'../../includes/conexion.php');
include(
'../../includes/funciones.php');
include(
'../funciones_calendar.php');
include(
'../funciones_calendar_buscar.php');
include(
'../funciones_calendar_consulta.php');
include(
"../../includes/control_usuario.php");

/*
-------------------------------------------------------------------------------------
|                                                                                    |
|    Este codigo printa las fechas del año 2011 de un determinado dia por ejemplo    |
|    lunes (1), martes (2), viernes (5), sabado (6)...etc.                            |
|                                                            [email protected]        |
-------------------------------------------------------------------------------------
*/

//-------------------------------------- 
$id_agenda 1;
// mysql_query("INSERT INTO agendas_excepciones (id_agenda, fecha_inicio, fecha_fin, activa) VALUES ($id_agenda, '', '', 'si'", $link);
//--------------------------------------



$dia_semana 5//establece un dia: lunes=1, martes=2, miercoles=3 .... etc

// Esta funcion devuelve el dia de la semana
function calcula_numero_dia_semana($dia,$mes,$ano){ 
    
$numerodiasemana date('w'mktime(0,0,0,$mes,$dia,$ano)); 
    if (
$numerodiasemana == 0)
    {
        
$numerodiasemana 7;
    }
    return 
$numerodiasemana
}  


$mes 1//para comenzar a printar desde enero...
$ano 2011;

$dias_mes_2011 = array(1,31,28,31,30,31,30,31,31,30,31,30,31); //en la posicion 1 del array puede ir cualquier numero ya que no se usa dicha posicion.

//asigno al dia, el numero correspondiente con el calendario del año 2011 del dia de la semana dado.
switch ($dia_semana) {
    case 
'1':
        
$dia='3';
        break;
    case 
'2':
        
$dia='4';
        break;
    case 
'3':
        
$dia='5';
        break;
    case 
'4':
        
$dia='6';
        break;
    case 
'5':
        
$dia='7';
        break;
    case 
'6':
        
$dia='1';
        break;
    case 
'7':
        
$dia='2';
        break;
}

//mientras que el mes es igual a 12...
while ($mes <= 12)
{
    
//mientras que el dia no pase de los del mes... voy sumando 7
    
while ($dia <= $dias_mes_2011[$mes])
    {
        
$f_inicio "$ano-$mes-$dia 00:00:00";
        
$f_fin "$ano-$mes-$dia 23:45:00";
        
        
$sql mysql_query("INSERT INTO agendas_excepciones (id_agenda, fecha_inicio, fecha_fin, activa) VALUES (1, 'f_inicio', 'f_fin', 'si')"$link);
        echo 
"sql: $sql <br>";
        
$dia $dia 7;
    }
    
//si el dia a superado a los dias del mes, calculo el dia del mes siguiente con una simple resta...
    
if ($dia $dias_mes_2011[$mes])
    {
        
$diferencia $dia $dias_mes_2011[$mes];
        
$dia $diferencia;
    }
    
    echo 
"<br>";
    
$mes $mes +1;
}

?>
La SQL se ejecuta, pero cuando voy a ver la tabla me aparecen todos los campos asi:

Código:
332	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			347	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			348	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			349	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			350	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			351	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			352	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			353	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			354	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			355	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			356	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			357	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			346	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			345	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si
			344	1	0000-00-00 00:00:00	0000-00-00 00:00:00	si

...................etc
Como ven, la fecha_inicio y la fecha_fin me las deja con todo CEROS...

Un campo de ejemplo que estaria bien seria este:
Código:
142	3	2011-11-09 00:00:00	2011-11-09 23:45:00	si

No se cual es el problema y porque me guarda los ceros...

Código PHP:
$f_inicio "$ano-$mes-$dia 00:00:00";
        
$f_fin "$ano-$mes-$dia 23:45:00";
        
        
$sql mysql_query("INSERT INTO agendas_excepciones (id_agenda, fecha_inicio, fecha_fin, activa) VALUES (1, 'f_inicio', 'f_fin', 'si')"$link); 
$f_inicio y $f_fin contienen bien lo que deberia de guardar....

mmmm.... es necesario que si por ejemplo la fecha es 1-4-2011 solo funcionara si guardo 01-04-2011??? porque igual ese es el problema... nose

Gracias
  #2 (permalink)  
Antiguo 21/06/2011, 06:50
Avatar de solhdeck  
Fecha de Ingreso: junio-2011
Mensajes: 87
Antigüedad: 12 años, 11 meses
Puntos: 32
Respuesta: problema INSERT INTO mysql y php

Te falta el $ delante de las variables
Código PHP:
        $sql mysql_query("INSERT INTO agendas_excepciones (id_agenda, fecha_inicio, fecha_fin, activa) VALUES (1, '$f_inicio', '$f_fin', 'si')"$link); 
Por otro lado, si el tipo de valor en las fechas es DATETIME (que se ve que sí) busca cómo cambiar el tipo de una variable en php a datetime y prueba hacerlo antes del insert:
Código PHP:
$f_inicio mktime (0,0,0,$mes,$dia,$ano);
$f_fin mktime (23,45,0,$mes,$dia,$ano); 
No sé si es hora,minutos, segundos u otro orden, pero vamos... que no debería serte complicado averiguarlo.

Última edición por solhdeck; 21/06/2011 a las 06:57
  #3 (permalink)  
Antiguo 22/06/2011, 03:12
Avatar de fbedia88  
Fecha de Ingreso: enero-2011
Ubicación: Santander
Mensajes: 83
Antigüedad: 13 años, 4 meses
Puntos: 20
Respuesta: problema INSERT INTO mysql y php

Cita:
Iniciado por solhdeck Ver Mensaje
Te falta el $ delante de las variables
Código PHP:
        $sql mysql_query("INSERT INTO agendas_excepciones (id_agenda, fecha_inicio, fecha_fin, activa) VALUES (1, '$f_inicio', '$f_fin', 'si')"$link); 
Por otro lado, si el tipo de valor en las fechas es DATETIME (que se ve que sí) busca cómo cambiar el tipo de una variable en php a datetime y prueba hacerlo antes del insert:
Código PHP:
$f_inicio mktime (0,0,0,$mes,$dia,$ano);
$f_fin mktime (23,45,0,$mes,$dia,$ano); 
No sé si es hora,minutos, segundos u otro orden, pero vamos... que no debería serte complicado averiguarlo.
¿Alguien me explica como puedo ser tan despistadp? era porque me faltaban las $ de las variables como bien tu dices...

No me ha echo falta la conversión de las variables PHP... lo que he echo ha sido colocar dos switch por si la fecha o el mes van del 1 al 9 que me incluya un 0 delante:

Código PHP:
switch ($mes) {
            case 
'1':
                
$mes2='01';
                break;
            case 
'2':
                
$mes2='02';
                break;
            case 
'3':
                
$mes2='03';
                break;
            case 
'4':
                
$mes2='04';
                break;
            case 
'5':
                
$mes2='05';
                break;
            case 
'6':
                
$mes2='06';
                break;
            case 
'7':
                
$mes2='07';
                break;
            case 
'8':
                
$mes2='08';
                break;
            case 
'9':
                
$mes2='09';
                break;    
        }
        switch (
$dia) {
            case 
'1':
                
$dia2='01';
                break;
            case 
'2':
                
$dia2='02';
                break;
            case 
'3':
                
$dia2='03';
                break;
            case 
'4':
                
$dia2='04';
                break;
            case 
'5':
                
$dia2='05';
                break;
            case 
'6':
                
$dia2='06';
                break;
            case 
'7':
                
$dia2='07';
                break;
            case 
'8':
                
$dia2='08';
                break;
            case 
'9':
                
$dia2='09';
                break;    
        } 
Muchas gracias de nuevo solhdeck.

Saludos

Etiquetas: insert, 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 00:20.