Foros del Web » Programando para Internet » PHP »

Problema funcion fecha

Estas en el tema de Problema funcion fecha en el foro de PHP en Foros del Web. Buenas de nuevo . Aquí os expongo una nueva duda que me trae loco jeje la funcion fecha es la siguiente function fecha() { $ahora ...
  #1 (permalink)  
Antiguo 23/05/2007, 07:28
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Problema funcion fecha

Buenas de nuevo . Aquí os expongo una nueva duda que me trae loco jeje
la funcion fecha es la siguiente

function fecha()
{
$ahora = date("Y-m-d H:i:s");
$resultado = mysql_query ("select * from users
where fecha_end='$fecha_end'");
if ($ahora > $resultado)
{
echo '<font color=#8F2D0E>';
echo "Tu periodo de prueba a finalizado.<br>";
echo "</font>";
}
else
{
echo '<font color=#8F2D0E>';
echo "Bienvenido<br>";
echo "</font>";
return ;
}

}


La variable resultado es una variable que almacena el campo que tiene la base de datos el campo se llama fecha_end.

Ese campo tiene el la fecha desde que se ha hecho el registro mas un dia sumado.

Entonces hago una comparación entre los dos:

Si $ahora(contiene el tiempo ahora mismo) es mayor que la variable $resultado el periodo de prueba ha finalizado y si no es asi pues lo deja entrar


Pero el problema es que un usuario recien registrado no le deja entrar es decir le muestra el mensaje de Tu periodo de prueba ha terminado Por que? si la variable $ahora no es mayor que $resultado ya que resultado seria el dia de mañana?

Es decir cuando llamo a la funcion fecha() con un usuario recien resitrado hasta el siguiente dia de resitro no le deberia de mostrar "Tu periodo de prueba a finalizado" si no el de bienvenido...

Pues no en mi caso me lo muestra al reves es decir si le pongo menor que...

No lo entiendo no tiene logica...
Espero respuesta impaciente Gracias a todos de nuevo un saludo
  #2 (permalink)  
Antiguo 23/05/2007, 07:31
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Re: Problema funcion fecha

Por si sirve de algo he hecho un echo de la variable $resultado y no tiene como yo pensaba el valor del campo de la bd si no que lo que me muestra es lo siguiente:

Resource id #12
qué significa ese mensaje?

Muchas Gracias de nuevo
  #3 (permalink)  
Antiguo 23/05/2007, 07:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Problema funcion fecha

Código PHP:
function fecha()
{
$ahora date("Y-m-d H:i:s");
$resultado mysql_query ("select * from users
where fecha_end='$fecha_end'"
) or die( mysql_error() );
$row mysql_fetch_array$resultado );

$ahora time();
$prueba strtotime$row[0] );
if (
$ahora $prueba)
{
echo 
'<font color=#8F2D0E>';
echo 
"Tu periodo de prueba a finalizado.<br>";
echo 
"</font>";
}
else
{
echo 
'<font color=#8F2D0E>';
echo 
"Bienvenido<br>";
echo 
"</font>";
return ;
}


  #4 (permalink)  
Antiguo 23/05/2007, 08:20
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Re: Problema funcion fecha

Gracias por la respuesta Gator.
He probado esta función y me sigue dando el mismo echo tanto como para el usuario registrado hoy como para el usuario registrado desde hace una semana y que deberia de darle el primer echo no el de bienvenida.

Aporto mas datos los dos campos son fecha_begin (contiene la fecha con la que se registro el user y fecha_end (contiene la fecha tope) en mi caso tengo puesto un dia mas para probar.

Los campos son datetime

por ejemplo un usuario registrado hoy tiene como fecha de registro:2007-05-23 07:37:29 y fecha_end 2007-05-24 07:37:29. Lo que pretengo es extraer el valor de fecha_end y compararlo con la fecha actual.

Otro usuario tiene fecha de registro 2007-05-15 10:59:22 y fecha_end 2007-05-16 10:59:22 por lo tanto este ultimo usuario si que tiene que aparecerle el primer echo pero no al anterior.

Pues le aparecen los mismos echos tanto a uno como a otro :S

Alguna sugerencia mas?Muchas gracias por las respuestas de nuevo espero impaciente :)
  #5 (permalink)  
Antiguo 23/05/2007, 08:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Problema funcion fecha

Les aparece, porque si te fijas, en tu SQL, dices que te de los usuarios donde fecha_end sea igual a $fecha_end, pero, nunca defines de donde viene $fecha_end, no es un parametro ni un global, es por eso que te pone lo mismo.

Saludos.
  #6 (permalink)  
Antiguo 23/05/2007, 08:59
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Re: Problema funcion fecha

Muchas Gracias Gatorv pro la respuesta.

Mi pregunta es como seria la consulta a la bd para que me devuelva el valor del campo correctamente?

esa variable $fecha_end es la que yo he puesto supuestamente para que almacene el resultado de la consulta a la bd, para luego poder compararla con la fecha actual, supongo que no es así...

Esto comprobación se hace al hacer loggin para saber si el usuario ha terminado su periodo de prueba o no desde la fecha que se registró.

Entonces como deberia de hacerlo correctamente para que me de un resultado u otro dependiendo de si la fecha tope se ha cumplido¿?.

Es decir si yo me logueo con alpha si se ha cumplido la fecha que muestre el primer mensaje sin embargo si yo me logueo con beta como para el la fecha todavia no se ha cumplido que me muestre el mensaje de bienvenida.

Muchas gracias de nuevo por la respuesta GatorV :)
  #7 (permalink)  
Antiguo 23/05/2007, 09:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Problema funcion fecha

Necesitas comparar si fecha_end es mayor o igual a la fecha actual, en ese caso, entonces si marcar el error:
Código PHP:
function finalizo($idUsuario)
{
$hoy date("Y-m-d H:i:s");
$resultado mysql_query ("select * from users
where fecha_end<='$hoy' and idUsuario='$idUsuario'"
) or die( mysql_error() );
if (
mysql_num_rows($resultado) > 1)
{
echo 
'<font color=#8F2D0E>';
echo 
"Tu periodo de prueba a finalizado.<br>";
echo 
"</font>";
}
else
{
echo 
'<font color=#8F2D0E>';
echo 
"Bienvenido<br>";
echo 
"</font>";
}


Adicionalmente debes de hacer este chequeo por usuario para que sepas si ese usuario ya caduco o no.

Supongo que tienes una columna con un idUsuario y por eso lo agregue a la consulta.

Saludos.
  #8 (permalink)  
Antiguo 23/05/2007, 09:58
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Re: Problema funcion fecha

Gracias por la respuesta GatorV :)

Siento ser un poco torpe, se refiere a crear las dos funciones por separado? y llamarlas por separadas a las dos?

O esta ultima función utilizarla sola y no utilizar la función de fecha?

la columna se llama user_id por lo tanto he cambiado el nombre demi columna por idUsuario,

Espero respuesta jeje estoy deseando probarla Muchas gracias de nuevo por la respuesta :)
  #9 (permalink)  
Antiguo 23/05/2007, 10:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Problema funcion fecha

Seria reemplazar tu funcion fecha por esa funcion, le cambie el nombre porque asi es mas explicita.

Saludos.
  #10 (permalink)  
Antiguo 23/05/2007, 10:34
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Re: Problema funcion fecha

Gracias de nuevo GatorV

He probado esta función y me sigue dando el mismo resultado para ambos users tanto el que tiene la fecha caducada como el que no.

Yo el problema donde lo veo es que en el campo fecha_end dentro de la función no contiene el valor de dicho campo que tiene la base de datos,

yo para pasar parametros en las funciones como esta por ejemplo:


function login($username, $passwd)
// check username and password with db
// if yes, return true
// else return false
{
// connect to db
$conn = db_connect();
if (!$conn)
return 0;

// check if username is unique
$result = mysql_query("select * from users
where username='$username'
and passwd ='$passwd'");
if (!$result)
return 0;

if (mysql_num_rows($result)>0)
return 1;
else
return 0;
}


En esta función le paso dos parametro a esta función que se toman al hacer login el usuario.
Luego hago la consulta con esos parametros a la base de datos para comparar.

Pero en el caso del valor de la fecha_end no puedo meter ningun parametro a la función ya que la fecha final queda grabada cuando el usuario realiza el alta.

Lo que he podido comprobar es que si hago echo de la variable resultado lo que me muestra en pantalla es Resource id #12
por eso creo que no compara bién y muestra siempre el mismo resultado tanto para un user como para otro.

Como hago para alamacenar en una variable dentro de esa función el valor del campo através de la consulta?

Alguna idea? me estoy volviendo crazy .

Gracias de nuevo GatorV por las respuestas
  #11 (permalink)  
Antiguo 23/05/2007, 11:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Problema funcion fecha

El echo de la variable $resultado es porque mysql_query te devuelve un recurso o un booleano dependiendo del tipo de consulta.

En la funcion lo que hace es comparar directamente en SQL, si la fecha de hoy es mayor o igual a la fecha que caduco, y si es igual al usuario que le enviaste (por parametro) Entonces se le niega el acceso.
  #12 (permalink)  
Antiguo 23/05/2007, 11:31
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Re: Problema funcion fecha

gracias de nuevo GatorV.

Entonces porque me sigue devolviendo el mismo mensaje para el usuario que se ha registrado hoy como para el usuario que se ha registrado hace mas de un dia?

El mensaje que me devuelve es el de Bienvenido es decir el del else.

Para el usuario que se ha registrado hoy esta bién pero con el user que se registro estos dias atras me deberia de devolver el primer echo "Tu periodo de prueba a finalizado".

El parametro que le paso de donde lo obtengo en el script? el user_id? he probado a pasarle el username y el password que los obtengo al hacer login de los campos respectivos pero el user_id es el primer campo de la tabla tiene un autoincrement y es un integer. Como obtengo ese dato?

Muchas Gracias de nuevo siento ser tan torpe :(
  #13 (permalink)  
Antiguo 23/05/2007, 12:04
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Problema funcion fecha

holas hyperrjas

por lo que veo, no sé por qué no puedes agregar parámetros a la función fecha() que tienes O_O...

revisando tu función más el código ofrecido por GatorV, no sé si esto será problema, pero al menos cuando yo uso la función mysql_query además de la consulta, agrego el objeto de conexión como segundo parámetro:

Código PHP:
$resultado mysql_query($consulta$conexion); 
tengo entendido que si no damos el objeto de conexión, asume automáticamente el último objeto de conexión abierto. sin embargo, cuando trabajamos dentro de una función, creo que ese tipo de referencias se pierden, y puede ser que el resultado de tu consulta simplemente esté dando vacío o erróneo... no sé, habría que probar.

por otro lado, reitero lo que dice GatorV, que en $resultado lo que se guarda no es el valor consultado a la BD, sino un objeto tipo "resultado de consulta a una base de datos". Es un objeto, no un string o número (salvo si la consulta fuera de actualización, donde el resultado sería booleano... pero este no es el caso).

por ello, ante cualquier error, es lógico que te dé como salida de la función el mensaje contenido en el else, pues no hay mayor filtro en cuanto a eso.

en mi opinión personal, te sugiero que hagas la pregunta a la BD y no en PHP. si tienes todos los datos en variables, es cosa de preguntar a la BD, obtener su respuesta en forma de un 1 ó un cero (booleano) y allí definir el mensaje.
me explico:

Código PHP:
function fecha($user_id)
{
 
# OPCIONAL :
 # Utiliza una función aparte para crear la conexion a la BD :
 
$conexion MiFuncionParaConectar();

 
# ESTO SÍ :
 
 # En esta variable devolveremos el resultado de la funcion :
 
$finalizado 0;

 
# Esta es la fecha actual :
 
$hoy date("Y-m-d H:i:s");

 
# Obtienes la fecha de termino de periodo de prueba :
 
$fecha_end "";
 
$res mysql_query("select fecha_end from users wher user_id = '$user_id'"$conexion);

 if (
mysql_num_rows($res) > 0)
 {
  while (
$tmp mysql_fetch_array($res))
  {  
$fecha_end $tmp[0];  }
 }
 
mysql_free_result($res);

 
# Si hay fecha de termino registrada :
 
if ($fecha_end != "")
 {
  
# Consulta si esta dentro o fuera del periodo de prueba
  
$res mysql_query("select if ('$hoy' > fecha_end, 1, 0)"$conexion);

  if (
mysql_num_rows($res) > 0)
  {
    while (
$tmp mysql_fetch_array($res))
    {  
$finalizado $tmp[0];  }
  }
  
mysql_free_result($res);
 }

 
# Retornas desde la función un Boolean :
 
return $finalizado;
}

# En tu pagina :
$prueba_finalizado fecha("usuario");

if (
$prueba_finalizado)
{
 echo 
'<font color=#8F2D0E>';
 echo 
"Tu periodo de prueba a finalizado.<br>";
 echo 
"</font>";
}
else
{
 echo 
'<font color=#8F2D0E>';
 echo 
"Bienvenido<br>";
 echo 
"</font>";

ahora, debo decir que viendo la lógica de la pregunta final, creo que debieran haber tres opciones:
- si el usuario está en período de prueba : $hoy < $fecha_end
- si el usuario acaba de finalizar su período de prueba : $hoy > $fecha_end y $hoy < $fecha_end + 1 día
- si el usuario ya ha superado el período de prueba : $hoy > $fecha + 1 día

creo que esto lo preguntaste en mensajes anteriores, pero bueno, no lo vi en el código, por eso lo comento ^_^

Suerte!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #14 (permalink)  
Antiguo 23/05/2007, 14:24
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Re: Problema funcion fecha

muchas gracias por la respuesta quinqui . Siento no haber podido contestar antes, ahora me pondre con el a probarlo y os cuento que tal.

Muchas gracias de nuevo un saludo
  #15 (permalink)  
Antiguo 14/06/2007, 08:42
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Re: Problema funcion fecha

Buenas de nuevo despues de algun tiempo he intentado implementar la función. El valor que me devuelve en ambos casos tanto con usuarios registrados con acceso al periodo de prueba de un dia como los que han pasado el periodo de prueba es el mismo. El resultado es que devuelve la función en ambos casos es el mismo

Tengo que decir que la función que hace la conexion a la bbase de datos está incluida en el archivo con un include pero esta en un archivo aparte.

Si me lee kinki estaria muy agradecido si me ayudase de nuevo o gator
Muchas gracias de nuevo espero respuesta lo antes posible 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 21:49.