Foros del Web » Programando para Internet » PHP »

Comparar campo date de mysql con valores de caja de texto

Estas en el tema de Comparar campo date de mysql con valores de caja de texto en el foro de PHP en Foros del Web. Bueno pos ese es mi problema que quiero que un usuario registrado de mi base de datos despues de validarse pueda ver los sucesos que ...
  #1 (permalink)  
Antiguo 27/03/2006, 09:47
 
Fecha de Ingreso: marzo-2006
Mensajes: 230
Antigüedad: 18 años, 8 meses
Puntos: 2
Comparar campo date de mysql con valores de caja de texto

Bueno pos ese es mi problema que quiero que un usuario registrado de mi base de datos despues de validarse pueda ver los sucesos que le han ocurrido entre una fecha y otra. En el inicio de la aplicacion tengo un formulario desde el cual eligo si quiere ver los sucesos abiertos, cerrados o los que se encuentran en seguimiento, una vez elegido esto tengo dos campos de texto a traves de los cuales tengo que meter las fechas de inicio y de fin entre los cuales quiero mirar los sucesos ocurridos.
Lo he hecho de la siguiente manera y no me funciona:

function Consulta($op,$estado,$usuario,$fec_in,$fec_fin){
$resul=mysql_db_query("********","select Empresa from Cuentas where Usuario='$usuario'");
$emp=mysql_fetch_array($resul,MYSQL_BOTH);
switch($op){
case 1:
$resul=mysql_db_query("********","Select * from Averias where Cliente='$emp[0]' and Estado='$estado' and fecha_fin between '$fec_in' and '$fec_fin'");
break;
case 2:
$resul=mysql_db_query("********","Select * from Averias where Cliente='$emp[0]' and Estado='$estado' and fecha_inicio between '$fec_in' and '$fec_fin'");
break;
case 3:
$resul=mysql_db_query("********","Select * from Averias where Cliente='$emp[0]' and Estado='$estado' and fecha_fin between '$fec_in' and '$fec_fin'");
break;
}
while($campo=mysql_fetch_array($resul,MYSQL_BOTH)) {
echo "<tr>";
for($i=0;$i<9;$i++){
echo "<td>".$campo[$i]."</td>";
}
echo "</tr>";
}
echo "</table>";
}

lo que hace es esta funcion recibe el nombre del empleado que esta en la sesion, el estado sobre el cual quiera saber los sucesos habidos, y las fechas entre las cuales tiene que buscar los sucesos, cuando lo encuentra hace la select correspondiente para cada estado y luego eso lo muestra en una tabla sacando una fila por cada resultado.

Alguien me puede ayudar?Saludos y gracias!
  #2 (permalink)  
Antiguo 27/03/2006, 10:05
Avatar de kalijunfan  
Fecha de Ingreso: febrero-2004
Ubicación: Montevideo, Uruguay
Mensajes: 96
Antigüedad: 20 años, 9 meses
Puntos: 0
bueno, tu problema es que le estás pasando las variables de fecha como string, o sea, para que mysql te tome esos valores como fecha tendrías que agregar algo así al principio de la función:
Código:
$fechaini = date("Y-m-d", strtotime($fec_in));
$fechafin = date("Y-m-d", strtotime($fec_fin));
y usar $fechaini y $fechafin en tus consultas sql, con eso debería de funcionar. evidentemente el formato de date() tiene que ser el mismo que tenés en la base de datos ;)

espero que te sirva

bye
  #3 (permalink)  
Antiguo 27/03/2006, 11:01
 
Fecha de Ingreso: marzo-2006
Mensajes: 230
Antigüedad: 18 años, 8 meses
Puntos: 2
Pos muchas gracias por la respuesta de momento he probado y no me funciona pero bueno ahora a probar mediante pruebas(el php no tiene ningun debugger o algo parecido,no?)de los valores que cogen las variables. Programo con Bluefish bajo LInux

Muchas gracias!
  #4 (permalink)  
Antiguo 27/03/2006, 11:13
Avatar de kalijunfan  
Fecha de Ingreso: febrero-2004
Ubicación: Montevideo, Uruguay
Mensajes: 96
Antigüedad: 20 años, 9 meses
Puntos: 0
bueno, no sé si tenga un debugger, pero yo lo que uso para posibles errores en consultas sql es agregarle el siguiente código después de la consulta:

or die(mysql_errno().": ".mysql_error())

o sea que en tu caso quedaría así:


mysql_db_query("********","Select * from Averias where Cliente='$emp[0]' and Estado='$estado' and fecha_fin between '$fec_in' and '$fec_fin'") or die(mysql_errno().": ".mysql_error());

con eso debería de ser suficiente. ahora para verificar los parámetros que recibe el script ya sea por post o get lo que hago es hacer un echo o print de cada uno de los parámetros que debería recibir y ver así que valores tienen. con eso me ha alcanzado para solucionar todos los errores que he tenido hasta ahora en php :)

espero que te sirva, bye
  #5 (permalink)  
Antiguo 27/03/2006, 11:21
 
Fecha de Ingreso: marzo-2006
Mensajes: 230
Antigüedad: 18 años, 8 meses
Puntos: 2
Lo he hecho y despues de utilizar la funcion me carga en la variable fechas muy raras...meto en las cajas de texto fecha inicio 02-03-2006 y en la de fecha_fin la fecha de hoy y despues de hacer lo de arriba (cambiando el formato d la fecha de Y-m-d por d-m-Y)en las variables me carga lo siguiente:
02-03-2006---->27-03-2006
27-08-2007---->26-08-2032
las de arriba son las variables que meto en las cajas de texto y las de abajo son el resultado de utilizar la funcion de arriba.

Muchas Gracias!
  #6 (permalink)  
Antiguo 27/03/2006, 17:41
 
Fecha de Ingreso: marzo-2006
Mensajes: 230
Antigüedad: 18 años, 8 meses
Puntos: 2
Mira el problema esta mas o menos solucionado aunque en las cajas de texto tengo que poner el formato en Y-m-d!alguien sabe como controlar los datos que salen de un formulario para no dejarles poner fechas erroneas, Campos obligatorios en blanco, mas caracteres de los que caben en los campos dela bd...

Venga agur eta eskerrik asko!!que contento estoy con este foro encuentro soluciones a tos mis problemas!!Espero seguir mejorar en Php y poder ayudar a los que como yo tiene problemas
  #7 (permalink)  
Antiguo 27/03/2006, 18:38
Avatar de kalijunfan  
Fecha de Ingreso: febrero-2004
Ubicación: Montevideo, Uruguay
Mensajes: 96
Antigüedad: 20 años, 9 meses
Puntos: 0
hola utopiko, bueno justamente a eso me refería que la fecha tenía que estar en el formato que está guardado en la base de datos y mysql guarda las fechas en los campos de tipo date en el formato YYYY-MM-DD o sea en php sería como vos dijiste Y-m-d.
sabés después de mucha práctica con php como solucioné yo este problema? usando listas desplegables, o sea en el formulario no uso un campo de texto, uso 3 listas desplegables, una del 1 al 31 para los días, otra del 1 al 12 para los meses y otra la armo partiendo del año actual, si el usuario puede ingresar fechas anteriores al año actual entonces empiezo el cálculo los años anteriores que corresponda y sinó empiezo en el año actual y muestro todos los años que quiera. en caso que quiera mostrar solamente el año actual lo meto en un campo oculto.
bueno y después de que envío el form armo la fecha en el formato que quiero por ejemplo:

Código PHP:
<? $esteanio date("Y");
$cincomas $esteanio 5?>
<form action="mipagina.php" method="post">
Día: <select name="dia" size="1">
<? for ($i 1$i <= 31$i++) echo '<option value="'.$i.'">'.$i.'</option>';?>
</select>
Mes: <select name="mes" size="1">
<? for ($i 1$i <= 12$i++) echo '<option value="'.$i.'">'.$i.'</option>';?>
</select>
Año: <select name="anio" size="1">
<? for ($i $esteanio$i <= $cincomas$i++) echo '<option value="'.$i.'">'.$i.'</option>';?>
</select><input type="submit">
</form>
y en el archivo mipagina.php pongo lo siguiente:

Código PHP:
<? if (isset($dia) && isset($mes) && isset($anio)) {
    
$lafecha date("Y-m-d"strtotime("$anio-$mes-$dia"));
    echo 
$lafecha;
?>
en este caso simplemente estoy mostrando el valor de la variable $lafecha pero evidentemente una vez que tenés ese valor en la variable podés usarla para lo que quieras :)

espero que te sirva, bye
  #8 (permalink)  
Antiguo 28/03/2006, 00:05
Avatar de icebeam  
Fecha de Ingreso: marzo-2006
Mensajes: 27
Antigüedad: 18 años, 8 meses
Puntos: 0
Lo de las fechas válidas lo puedes checar con la función checkdate en la página donde procesas la info.

Con respecto a lo de campos obligatorios o limitar la extenstión de lo tecleado, eso lo haces con javascript. Antes de dar el submit puedes poner una funcion en javascript que te cuente la longitud de la caja de texto donde el usuario tecleó la fecha. Ahí mismo puedes checar si hay longitud 0 (que el usuario no escribió la fecha).

Saludos
  #9 (permalink)  
Antiguo 28/03/2006, 07:51
Avatar de kalijunfan  
Fecha de Ingreso: febrero-2004
Ubicación: Montevideo, Uruguay
Mensajes: 96
Antigüedad: 20 años, 9 meses
Puntos: 0
bueno, si vas a usar simples campos de texto lo de la longitud máxima permitida lo podés hacer estableciendo el atributo maxlength, por ej. para un campo de tipo fecha en el formato que lo necesitás vos sería de un máximo de diez caracteres, eso lo solucionás simplemente así:

Código:
<input type="text" name="fecha" size="10" maxlength="10">
también sería una muy buena idea que aclararas en alguna parte, el formato en que el usuario debe poner la fecha, si usamos el código anterior podría quedar así:

Código:
<input type="text" name="fecha" size="10" maxlength="10"><br>
Formato de fecha válido: aaaa-mm-dd, por ej: <? echo date("Y-m-d"); ?>
y para validar que el usuario ingresó la fecha en ese formato podés usar el siguiente código con javascript incluído:

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
<script language="JavaScript" type="text/javascript">
<!--
function validarfecha(){
    var formatovalido=/^\d{4}\-\d{1,2}\-\d{1,2}$/
    if (!formatovalido.test(document.miformulario.fecha.value)) {
        alert("Formato de fecha inválido. Debe ser en formato aaaa-mm-dd. Corríjalo y vuelva a intentarlo.");
        document.miformulario.fecha.focus();
        return false;
    } else {
        return true;
    }
}
//-->
</script>
</head>

<body>

<form action="mipagina.php" method="post" name="miformulario">
<input type="text" name="fecha" size="10" maxlength="10" onblur="validarfecha()"><br>Formato de fecha válido: aaaa-mm-dd, por ej: <? echo date("Y-m-d"); ?><br>
<input type="submit">
</form>

</body>
</html>
el script lo podés llamar incluso en el evento onsubmit del formulario, eso como vos prefieras. espero que todo esto te sirva

bye
  #10 (permalink)  
Antiguo 09/04/2007, 11:04
 
Fecha de Ingreso: diciembre-2006
Mensajes: 6
Antigüedad: 17 años, 11 meses
Puntos: 0
Re: Comparar campo date de mysql con valores de caja de texto

Cita:
Iniciado por kalijunfan Ver Mensaje
bueno, tu problema es que le estás pasando las variables de fecha como string, o sea, para que mysql te tome esos valores como fecha tendrías que agregar algo así al principio de la función:
Código:
$fechaini = date("Y-m-d", strtotime($fec_in));
$fechafin = date("Y-m-d", strtotime($fec_fin));
y usar $fechaini y $fechafin en tus consultas sql, con eso debería de funcionar. evidentemente el formato de date() tiene que ser el mismo que tenés en la base de datos ;)

espero que te sirva

bye
Muchas gracias compatriota, me sacaste de un apuro

Saludos!
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 22:24.