Foros del Web » Programando para Internet » PHP »

actualizar BD según la fecha

Estas en el tema de actualizar BD según la fecha en el foro de PHP en Foros del Web. Hola amigos del foro, estoy con un lío con una tabla de MySQL que tengo que actualizar con los exámenes de los alumnos; me interesa ...
  #1 (permalink)  
Antiguo 01/08/2008, 00:27
Avatar de adex  
Fecha de Ingreso: marzo-2002
Ubicación: Lima, Perú, América Latina
Mensajes: 445
Antigüedad: 22 años, 1 mes
Puntos: 0
Pregunta actualizar BD según la fecha

Hola amigos del foro, estoy con un lío con una tabla de MySQL que tengo que
actualizar con los exámenes de los alumnos; me interesa cambiar el valor de
un campo "fechafinal_flag" al día siguiente de la fecha de vencimiento; detallo
un poco: tengo un campo input (file) que está activado por ejemplo 5 días
y he puesto la fecha final en la BD (06-08-2008) en 3 campos (varchar)
------------------
id_alumno
alumno_nombre
alumno_apellidos
alumno_secundaria
alumno_nota
fechafinal_dia,
fechafinal_mes,
fechafinal_anio,
fechafinal_flag
-------------------

Como verán, tengo un campo: fechafinal_flag (0,1)
este flag me permite hacer un if si está en 1 muestra el input file para subir
un archivo, sí está en 0 (cero) oculto el input y muestro un mensaje que la
fecha para presentar el archivo ha finalizado.
Esta parte lo modifico manualmente al día siguiente de la fecha que caducó
(07/08/2008); como haría la consulta para que en todas las filas que tengan
el campo fechafinal_flag con el valor 1, cambie a 0 (cero) si la fecha ya caducó?
ya que quiero programarlo en el cron job del servidor para que lo haga solo.

Gracias por su ayuda.

Última edición por adex; 01/08/2008 a las 21:05 Razón: "agregué más detalles"
  #2 (permalink)  
Antiguo 01/08/2008, 00:58
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: actualizar BD según la fecha

manual del cron... que ejecute tu script y listo
__________________
Francesc Jimenez
  #3 (permalink)  
Antiguo 01/08/2008, 01:00
Avatar de adex  
Fecha de Ingreso: marzo-2002
Ubicación: Lima, Perú, América Latina
Mensajes: 445
Antigüedad: 22 años, 1 mes
Puntos: 0
Respuesta: actualizar BD según la fecha

no tengo problema con el cron. si no la ejecución por parte de php para realizar
el cambio dependiendo de la fecha y buscando por el valor del flag
  #4 (permalink)  
Antiguo 01/08/2008, 01:04
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: actualizar BD según la fecha

haces el algoritmo a partir de la fecha del sistema y de los valores de la BDD. Y en la base de datos tienes un campo 'date' que te haría mas fácil el trato con campos fecha
__________________
Francesc Jimenez
  #5 (permalink)  
Antiguo 01/08/2008, 01:09
Avatar de adex  
Fecha de Ingreso: marzo-2002
Ubicación: Lima, Perú, América Latina
Mensajes: 445
Antigüedad: 22 años, 1 mes
Puntos: 0
Respuesta: actualizar BD según la fecha

Suena bonito, pero la fecha se pone manualmente y el problema está como hacer el algoritmo para hacer esas consultas de comparación de fechas teniendo en cuenta que son muchas filas con el campo flag 1.
  #6 (permalink)  
Antiguo 01/08/2008, 01:38
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: actualizar BD según la fecha

es una sola tabla, un solo campo a comparar y uno para seleccionar, no veo el problema. Peleate un poco con el código y veras que rápido lo consigues.
__________________
Francesc Jimenez
  #7 (permalink)  
Antiguo 01/08/2008, 01:41
Avatar de adex  
Fecha de Ingreso: marzo-2002
Ubicación: Lima, Perú, América Latina
Mensajes: 445
Antigüedad: 22 años, 1 mes
Puntos: 0
Respuesta: actualizar BD según la fecha

Gracias por tu ayuda, de seguro no vez el problema por que sabes como hacerlo... por eso publiqué este post buscando una solución!
  #8 (permalink)  
Antiguo 01/08/2008, 03:08
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: actualizar BD según la fecha

Tendrias que hacer algo como:
Código PHP:
//CURDATE() = año-mes-dia
$sql "SELECT id_alumno, alumno_nombre, alumno_apellidos
        FROM alumno
        WHERE CONCAT(fechafinal_anio,'-',fechafinal_mes,'-',fechafinal_dia) = CURDATE()"
;
$result mysql_query($sql);
$i 0;
while(
$data mysql_fetch_array($result)){
    
$listadoFFAlumnos[$i]['id_alumno']            = $data['id_alumno'];
    
$listadoFFAlumnos[$i]['alumno_nombre']        = $data['alumno_nombre'];
    
$listadoFFAlumnos[$i]['alumno_apellidos']    = $data['alumno_apellidos'];
    
//agregamos dos datos para saber si se actualizo o no
    
$listadoFFAlumnos[$i]['ok']                    = 0;
    
$listadoFFAlumnos[$i]['error']                = 0;
    
$i++;
}
//contadores
$i 0;
$j 0;

//numero de elementos en $listadoFFAlumnos
$num count($listadoFFAlumnos);
//archivo para crear log
$archivo fopen("log.txt","a") or die("Problemas en la creacion");
$fecha date("d-m-Y H:i:s");
//Primera linea para diferenciar de otro dia
fputs($archivo"Log dia: [".$fecha."]=============================\r\n"); 
//hacemos el update
for($a=0;$a<$num;$a++){
    
$sqU "UPDATE alumno
            SET fechafinal_flag = 0
            WHERE id_alumno = "
.$listadoFFAlumnos[$a]['id_alumno'];
    
//para saber si se ejecuto
    
if(mysql_query($sql)){
        
//agregamos que ha tenido exito
        
$listadoFFAlumnos[$a]['ok'] = 1;
        
//contador de cambios exitosos
        
$i++;
    }else{
        
//agregamos que ha fallado
        
$listadoFFAlumnos[$a]['error'] = 1;
        
//contador de cambios fallidos por si quieres agregar mas info
        
$j++;
    }
}
fputs($archivo"Se han actualizado ".$i." de ".$num." alumnos");
fputs($archivo"Detalle de actualizaciones:\r\n");
//recorremos $listadoFFAlumnos para ver su detalle
for($b=0;$b<$num;$b++){
    
$estado "Sin informacion";
    if(
$listadoFFAlumnos[$b]['ok'] == 1){
        
$estado "Exitoso";
    }elseif(
$listadoFFAlumnos[$b]['error'] == 1){
        
$estado "ERROR";
    }
    
fputs($archivo$b."- ".$listadoFFAlumnos[$b]['alumno_nombre']." ".$listadoFFAlumnos[$b]['alumno_apellidos']." [".$estado."]\r\n");
}
fputs($archivo"\r\n=============================Fin Log [".$fecha."]\r\n\r\n");
fclose($archivo); 
No esta testeado pero te puede abrir una luz con respecto a lo que quieres hacer.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #9 (permalink)  
Antiguo 01/08/2008, 03:37
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: actualizar BD según la fecha

Marvin, estas en paro?¿ xD

Cita:
Iniciado por Marvin Ver Mensaje
Tendrias que hacer algo como:
Código PHP:
//CURDATE() = año-mes-dia
$sql "SELECT id_alumno, alumno_nombre, alumno_apellidos
        FROM alumno
        WHERE CONCAT(fechafinal_anio,'-',fechafinal_mes,'-',fechafinal_dia) = CURDATE()"
;
$result mysql_query($sql);
$i 0;
while(
$data mysql_fetch_array($result)){
    
$listadoFFAlumnos[$i]['id_alumno']            = $data['id_alumno'];
    
$listadoFFAlumnos[$i]['alumno_nombre']        = $data['alumno_nombre'];
    
$listadoFFAlumnos[$i]['alumno_apellidos']    = $data['alumno_apellidos'];
    
//agregamos dos datos para saber si se actualizo o no
    
$listadoFFAlumnos[$i]['ok']                    = 0;
    
$listadoFFAlumnos[$i]['error']                = 0;
    
$i++;
}
//contadores
$i 0;
$j 0;

//numero de elementos en $listadoFFAlumnos
$num count($listadoFFAlumnos);
//archivo para crear log
$archivo fopen("log.txt","a") or die("Problemas en la creacion");
$fecha date("d-m-Y H:i:s");
//Primera linea para diferenciar de otro dia
fputs($archivo"Log dia: [".$fecha."]=============================\r\n"); 
//hacemos el update
for($a=0;$a<$num;$a++){
    
$sqU "UPDATE alumno
            SET fechafinal_flag = 0
            WHERE id_alumno = "
.$listadoFFAlumnos[$a]['id_alumno'];
    
//para saber si se ejecuto
    
if(mysql_query($sql)){
        
//agregamos que ha tenido exito
        
$listadoFFAlumnos[$a]['ok'] = 1;
        
//contador de cambios exitosos
        
$i++;
    }else{
        
//agregamos que ha fallado
        
$listadoFFAlumnos[$a]['error'] = 1;
        
//contador de cambios fallidos por si quieres agregar mas info
        
$j++;
    }
}
fputs($archivo"Se han actualizado ".$i." de ".$num." alumnos");
fputs($archivo"Detalle de actualizaciones:\r\n");
//recorremos $listadoFFAlumnos para ver su detalle
for($b=0;$b<$num;$b++){
    
$estado "Sin informacion";
    if(
$listadoFFAlumnos[$b]['ok'] == 1){
        
$estado "Exitoso";
    }elseif(
$listadoFFAlumnos[$b]['error'] == 1){
        
$estado "ERROR";
    }
    
fputs($archivo$b."- ".$listadoFFAlumnos[$b]['alumno_nombre']." ".$listadoFFAlumnos[$b]['alumno_apellidos']." [".$estado."]\r\n");
}
fputs($archivo"\r\n=============================Fin Log [".$fecha."]\r\n\r\n");
fclose($archivo); 
No esta testeado pero te puede abrir una luz con respecto a lo que quieres hacer.

Suerte!
__________________
Francesc Jimenez
  #10 (permalink)  
Antiguo 01/08/2008, 03:59
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: actualizar BD según la fecha

Me emocione parece xD... pero mientras sirva... todo ok
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #11 (permalink)  
Antiguo 01/08/2008, 21:10
Avatar de adex  
Fecha de Ingreso: marzo-2002
Ubicación: Lima, Perú, América Latina
Mensajes: 445
Antigüedad: 22 años, 1 mes
Puntos: 0
Respuesta: actualizar BD según la fecha

Hola Marvin, de verdad muchas gracias por atender mi mensaje, todo el día peleando buscando la forma como hacer funcionar tu propuesta pero solo consigue crear el archivo log.txt pero no realiza cambios a nivel Mysql

Pego nuevamete la tabla MySql y el cpodigo PHP, Capaz yo esté haciendo algo mal.

Código PHP:
CREATE TABLE alumno (
  
id_alumno int(11NOT NULL auto_increment,
  
fechafinal_dia varchar(11NOT NULL default '0',
  
fechafinal_mes varchar(15NOT NULL,
  
fechafinal_anio varchar(11NOT NULL default '0',
  
alumno_nombre varchar(100NOT NULL,
  
alumno_apellidos varchar(100NOT NULL,
  
alumno_secundaria varchar(200NOT NULL,
  
alumno_nota varchar(100NOT NULL,
  
fechafinal_flag int(1NOT NULL default '0',
  
PRIMARY KEY  (id_alumno)
ENGINE=MyISAM;

INSERT INTO alumno VALUES (1'01''06''08''Pepe1''Bolitas1''Matematica''a'1);
INSERT INTO alumno VALUES (2'10''06''08''Pepe2''Bolitas2''Religion''b'1);
INSERT INTO alumno VALUES (3'27''06''08''Pepe3''Bolitas3''''a'0);
INSERT INTO alumno VALUES (4'11''07''08''Pepe4''Bolitas4''Gramatica''c'1);
INSERT INTO alumno VALUES (5'15''07''08''Pepe5''Bolitas5''Fisica''b'1);
INSERT INTO alumno VALUES (6'16''07''08''Pepe6''Bolitas6''Biologia''c'1);
INSERT INTO alumno VALUES (7'18''07''08''Pepe7''Bolitas7''Arte''a'1);
INSERT INTO alumno VALUES (8'22''07''08''Pepe8''Bolitas8''Ciencias N''c'1);
INSERT INTO alumno VALUES (9'21''07''08''Pepe9''Bolitas9''Religion''a'1);
INSERT INTO alumno VALUES (10'01''08''08''Pepe10''Bolitas10''Quimica''c'1); 
Código PHP:
<?
include("conexion.php");
//CURDATE() = año-mes-dia
$sql "SELECT id_alumno, alumno_nombre, alumno_apellidos 
                FROM alumno 
                WHERE CONCAT(fechafinal_anio,'-',fechafinal_mes,'-',fechafinal_dia) = CURDATE() 
                and fechafinal_flag=1
                "
;
$result mysql_query($sql);
$i 0;
while(
$data mysql_fetch_array($result)){
    
$listadoFFAlumnos[$i]['id_alumno']                        = $data['id_alumno'];
    
$listadoFFAlumnos[$i]['alumno_nombre']                = $data['alumno_nombre'];
    
$listadoFFAlumnos[$i]['alumno_apellidos']            = $data['alumno_apellidos'];
    
//agregamos dos datos para saber si se actualizo o no
    
$listadoFFAlumnos[$i]['ok']                   = 0;
    
$listadoFFAlumnos[$i]['error']                = 0;
    
$i++;
}
//contadores
$i 0;
$j 0;

//numero de elementos en $listadoFFAlumnos
$num count($listadoFFAlumnos);
//archivo para crear log
$archivo fopen("log.txt","a") or die("Problemas en la creacion");
$fecha date("d-m-Y H:i:s");
//Primera linea para diferenciar de otro dia
fputs($archivo"Log dia: [".$fecha."]\r\n"); 
//hacemos el update
for($a=1;$a<$num;$a++){
    
$sqU "UPDATE alumno
            SET fechafinal_flag = 0
            WHERE id_alumno = "
.$listadoFFAlumnos[$a]['id_alumno'];
    
//para saber si se ejecuto
    
if(mysql_query($sql)){
        
//agregamos que ha tenido exito
        
$listadoFFAlumnos[$a]['ok'] = 1;
        
//contador de cambios exitosos
        
$i++;
    }else{
        
//agregamos que ha fallado
        
$listadoFFAlumnos[$a]['error'] = 1;
        
//contador de cambios fallidos por si quieres agregar mas info
        
$j++;
    }
}
fputs($archivo"Se han actualizado ".$i." de ".$num." alumnos\r\n");
fputs($archivo"Detalle de actualizaciones:\r\n");
//recorremos $listadoFFAlumnos para ver su detalle
for($b=0;$b<$num;$b++){
    
$estado "Sin informacion";
    if(
$listadoFFAlumnos[$b]['ok'] == 1){
        
$estado "Exitoso";
    }elseif(
$listadoFFAlumnos[$b]['error'] == 1){
        
$estado "ERROR";
    }
    
fputs($archivo$b."- ".$listadoFFAlumnos[$b]['alumno_nombre']." ".$listadoFFAlumnos[$b]['alumno_apellidos']." [".$estado."]\r\n");
}
fputs($archivo"\r\nFin Log [".$fecha."]\r\n======================================\r\n\r\n");
fclose($archivo);  
?>
  #12 (permalink)  
Antiguo 03/08/2008, 21:29
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: actualizar BD según la fecha

Ya se porque... mira el segundo mysql_query():
Código PHP:
if(mysql_query($sql)){ 
Debe ser
Código PHP:
if(mysql_query($sqU)){ 
Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
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 14:20.