Foros del Web » Programando para Internet » PHP »

Que problema veis en este codigo.

Estas en el tema de Que problema veis en este codigo. en el foro de PHP en Foros del Web. Lo que me pasa esque no se si el problema es del codigo o de los registros de la base de datos. En la comprobacion ...
  #1 (permalink)  
Antiguo 15/04/2004, 04:26
 
Fecha de Ingreso: diciembre-2002
Mensajes: 130
Antigüedad: 21 años, 4 meses
Puntos: 0
Que problema veis en este codigo.

Lo que me pasa esque no se si el problema es del codigo o de los registros de la base de datos. En la comprobacion de fecha no se pq hay veces que me la comprueba y otras veces no.

Código PHP:
<? 
ob_start
();

include_once (
"../auth.php");
include_once (
"../authconfig.php");
include_once (
"../check.php");
include (
"../nivel.php");

$tabla mysql_query("SELECT fecha_ultimo_apunte FROM PERSONAL WHERE CODIGO= '$codigo'");    
    
$rows mysql_fetch_array($tabla);
    
    
$codigo $check["CODIGO"];
    
$fecha $check["fecha_ultimo_apunte"];
 
    
$dia=substr($fecha,8,2);
    
$mes=substr($fecha,5,2);
    
$anio=substr($fecha,0,4);
    
$fechagraba=$dia.'/'.$mes.'/'.$anio;
    
    if(
substr($fecha1,1,1) == '/')
{
    
$dia1='0'.substr($fecha1,0,1);    
    if(
substr($fecha1,3,1) == '/')
    {
    
$mes1='0'.substr($fecha1,2,1);
    }
    else
    {
    
$mes1=substr($fecha1,2,2);
    }
}
    else
{
    
$dia1=substr($fecha1,0,2);    
    
    if(
substr($fecha1,4,1) == '/')
    {
    
$mes1='0'.substr($fecha1,3,1);
    }
    else
    {
    
$mes1=substr($fecha1,3,2);
    }
}
    
    
$anio1=substr($fecha1,-4);
    
    
$fechagraba1=$dia1.'/'.$mes1.'/'.$anio1;
    
    
$fecha=$anio1.'/'.$mes1.'/'.$dia1;
    
    
?>
<html>
<head>
<title>Proyectos</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php

if ($fechagraba $fechagraba1)
{
    echo 
"&nbsp;<img src=\"../Itsmo.gif\" width=\"50\" height=\"25\">";
    echo 
"La fecha introducida es anterior al ultimo apunte introducido.\n";
}
if (
$fechagraba <= $fechagraba1)
{
    
$Update=mysql_query("UPDATE PERSONAL SET fecha_ultimo_apunte ='$fecha' WHERE CODIGO ='$codigo'");
    
$result1 mysql_query($Update); 
        
$sql "INSERT INTO HORAS (PERSONA, FECHA, PROYECTO, HORAS, COMENTARIO, COSTE) VALUES ('$codigo', '$fecha', '$proyecto', '$horas', '$comentario', '$coste')";
$result mysql_query($sql);
echo 
"&nbsp;<img src=\"../Itsmo.gif\" width=\"50\" height=\"25\">";
echo 
"Sus datos han sido introducidos.\n";
header ("Location: horas2.php");
}
echo 
"<a href=horas2.php>volver</a>";
?>

</body>
</html>
<?
ob_end_flush
();
?>
Saludos. Muchas gracias.
  #2 (permalink)  
Antiguo 15/04/2004, 04:46
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Una preguntita, ¿donde usas la variable $rows? Es que en tu codigo solo la usas para leer el primer registro, pero en ningun sitio veo que la uses para acceder a los campos. Es mas, los campos los coges de otro array, $check, que no tenemos ni idea de donde sale (bueno, del include).

Es que no vaya a ser que te has liado con el codigo y tenias que leer de $rows en lugar de $check y por eso los resultados no son los esperados.

De todas formas, quizas te has complicado un poco la vida para convertir el formato de fecha1. Creo que podrias hacerlo mas facil con un explode() y un sprintf(). O si las fechas las sacas de campos datetime de base de datos, puedes usar funciones como DATE_FORMAT de MySQL (www.mysql.com/date_format).

Y otra cosa, estas haciendo la comparacion de texto con un formato de fecha dd/mm/yyyy, con lo que solo te compara el dia, es decir el 01/01/2004 es menor que el 02/12/1969, simplemente porque 01 es menor que 02. La comparacion de texto de las fechas debe ser en formato yyyy/mm/dd, es decir, que solo compara el mes si el año es el mismo, y el dia solo si el año y el mes son iguales.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 16/04/2004, 01:45
 
Fecha de Ingreso: diciembre-2002
Mensajes: 130
Antigüedad: 21 años, 4 meses
Puntos: 0
Esto no deberia de aparecer pq no sirve para nada:

$tabla = mysql_query("SELECT fecha_ultimo_apunte FROM PERSONAL WHERE CODIGO= '$codigo'");
$rows = mysql_fetch_array($tabla);


El codigo cambiado es el siguiente:

Código PHP:
<? 
ob_start
();

include_once (
"../auth.php");
include_once (
"../authconfig.php");
include_once (
"../check.php");
include (
"../nivel.php");

$codigo $check["CODIGO"];
$fecha $check["fecha_ultimo_apunte"];

    
$dia=substr($fecha,8,2);
    
$mes=substr($fecha,5,2);
    
$anio=substr($fecha,0,4);
    
$fechagraba=$dia.'/'.$mes.'/'.$anio;
    
    if(
substr($fecha1,1,1) == '/')
{
    
$dia1='0'.substr($fecha1,0,1);    
    if(
substr($fecha1,3,1) == '/')
    {
    
$mes1='0'.substr($fecha1,2,1);
    }
    else
    {
    
$mes1=substr($fecha1,2,2);
    }
}
    else
{
    
$dia1=substr($fecha1,0,2);    
    
    if(
substr($fecha1,4,1) == '/')
    {
    
$mes1='0'.substr($fecha1,3,1);
    }
    else
    {
    
$mes1=substr($fecha1,3,2);
    }
}
    
    
$anio1=substr($fecha1,-4);
    
    
$fechagraba1=$dia1.'/'.$mes1.'/'.$anio1;
    
$fecha_cal=$anio1.'-'.$mes1.'-'.$dia1;
    
    
?>
<html>
<head>
<title>Proyectos</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php

if ($fecha $fecha_cal)
{
    echo 
"&nbsp;<img src=\"../Itsmo.gif\" width=\"50\" height=\"25\">";
    echo 
"La fecha introducida es anterior al ultimo apunte introducido.\n";
}
if (
$fecha <= $fecha_cal)
{
    
$Update=mysql_query("UPDATE PERSONAL SET fecha_ultimo_apunte ='$fecha_cal' WHERE CODIGO ='$codigo'");
    
$result1 mysql_query($Update); 
        
$sql "INSERT INTO HORAS (PERSONA, FECHA, PROYECTO, HORAS, COMENTARIO, COSTE) VALUES ('$codigo', '$fecha_cal', '$proyecto', '$horas', '$comentario', '$coste')";
$result mysql_query($sql);
echo 
"&nbsp;<img src=\"../Itsmo.gif\" width=\"50\" height=\"25\">";
echo 
"Sus datos han sido introducidos.\n";
header ("Location: horas2.php");
}
echo 
"<a href=horas2.php>volver</a>";
?>

</body>
</html>
<?
ob_end_flush
();
?>
  #4 (permalink)  
Antiguo 16/04/2004, 01:47
 
Fecha de Ingreso: diciembre-2002
Mensajes: 130
Antigüedad: 21 años, 4 meses
Puntos: 0
Ya me hace bien la comparacion excepto cuando es igual la fecha, esta mal puesto el if:

if ($fecha <= $fecha_cal)
{
}

Hace falta otro igual.

Por favor estoy .

Saludos. Muchas gracias.
  #5 (permalink)  
Antiguo 16/04/2004, 01:54
 
Fecha de Ingreso: diciembre-2002
Mensajes: 130
Antigüedad: 21 años, 4 meses
Puntos: 0
El doble igual no funciona, he creado incluso otro if con lo siguiente y siempre que intento meter un registro con la misma fecha que la fecha_del_ultimo_apunte me dice que la fecha es anterior. No se que probar mas.

Probe cambiando el if
Código PHP:
if ($fecha $fecha_cal)
{
    
$Update=mysql_query("UPDATE PERSONAL SET fecha_ultimo_apunte ='$fecha_cal' WHERE CODIGO ='$codigo'");
    
$result1 mysql_query($Update); 
        
$sql "INSERT INTO HORAS (PERSONA, FECHA, PROYECTO, HORAS, COMENTARIO, COSTE) VALUES ('$codigo', '$fecha_cal', '$proyecto', '$horas', '$comentario', '$coste')";
$result mysql_query($sql);
echo 
"&nbsp;<img src=\"../Itsmo.gif\" width=\"50\" height=\"25\">";
echo 
"Sus datos han sido introducidos.\n";
header ("Location: horas2.php");
}
if (
$fecha == $fecha_cal)
{
    
$Update=mysql_query("UPDATE PERSONAL SET fecha_ultimo_apunte ='$fecha_cal' WHERE CODIGO ='$codigo'");
    
$result1 mysql_query($Update); 
        
$sql "INSERT INTO HORAS (PERSONA, FECHA, PROYECTO, HORAS, COMENTARIO, COSTE) VALUES ('$codigo', '$fecha_cal', '$proyecto', '$horas', '$comentario', '$coste')";
$result mysql_query($sql);
echo 
"&nbsp;<img src=\"../Itsmo.gif\" width=\"50\" height=\"25\">";
echo 
"Sus datos han sido introducidos.\n";
header ("Location: horas2.php");

No se que puede ser. Algunas otras ideas que probar.
Gracias
  #6 (permalink)  
Antiguo 16/04/2004, 04:58
 
Fecha de Ingreso: diciembre-2002
Mensajes: 130
Antigüedad: 21 años, 4 meses
Puntos: 0
Alguien que me heche una manita por favor
  #7 (permalink)  
Antiguo 16/04/2004, 05:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Veamos, es una comparacion de cadenas. Asi que la cuestion es que las cadenas deben ser iguales. $fecha parece que la sacas de un campo de una base de datos. ¿Que tipo de dato tiene esa columna? ¿En que formato lo sacas? Porque ya te digo que es una comparacion de cadenas, no interpreta la fecha de esas cadenas. Haz un echo de las 2 variables para ver exactamente las 2 cadenas que comparas. Porque aunque '2004-04-16' y '2004-04-16 00:00:00' (formato que te da por defecto una columna DATETIME) representan el mismo dia del año, como es una comparacion de cadenas, resulta que '2004-04-16' es menor que '2004-04-16 00:00:00' por el simple hecho de que tiene menos caracteres. Primero va comparando caracter a caracter. Y en caso de igualdad de los caracteres, es menor la de menor numero de caracteres.

Estos son los inconvenientes de que no exista un tipo de dato en PHP que sea fecha.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 16/04/2004, 05:15
 
Fecha de Ingreso: diciembre-2002
Mensajes: 130
Antigüedad: 21 años, 4 meses
Puntos: 0
Asi es:

$fecha me devuelve 2004-04-16 00:00:00

$fecha_cal me devuelve 2004-04-16

Voy a cambiar $fecha para que me salga en el mismo formato de $fecha_cal.

Luego te comentare como me ha ido.

Mil gracias.
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 02:21.