otra funcion checkdate

Hola, cada vez que me pongo a trastear con una funcion, me hago un lio.He estado mirando y remirando el manual php y por mas que lo intento no me sale, me admite cualquier fecha.
¿Podeis decirme que falla en el code?
<?php 
$mes=12;
$dia=31;
$anio=2012;
$fecha=(checkdate($mes,$dia,$anio));
if (empty($fecha)) {
echo "diga fecha";
}
else {
echo $fecha;
} 
?>

<form action="validaFechas.php" method="post">
<input type="text" name="fecha" value="" />
<input type="submit" value="enviar" />
</form>
Lo mejor de caerse al tropezar, es volverse a levantar.
Aqui te digo lo mismo que alli. Pero con una diferencia: aqui se trate de hacer funcionar el checkdate.
Gracias de todas maneras.
Lo mejor de caerse al tropezar, es volverse a levantar.
a que te refieres cuando dices que te admite cualquier fecha, veo tu codigo y esta correcto, aqui el problema es que es lo que esperas que aga tu codigo?? el codigo esta correcto.
Puede que no significa que te admite cualquier fecha, sino que directamente estás dando la orden de

if(empty($fecha)){
echo"Diga día";
El script está bien y te acepta todas las "fechas" porque la única barrera que pones para que te de error es un if que solo verifica que la variable $fecha no esté vacía.

Prueba con:
if(!checkdate($día, $fecha, $mes) = true){
echo"diga fecha";
}
No he probado el Script, así que puede que ni funciones xD

El anterior código es incorrecto, su uso no debe de ser así (lo dejo para que sirva de lección: como no se debe hacer un checkdate() xD).

El código a utilizar sería:
$dia = 1;
$mes = 2;
$año = 3;
if ((int)$dia && (int)$mes && (int)$año){ // Verificamos que los valores de las variables $dia, $mes, $año son números.
if(checkdate($mes, $dia, $año)){ // Verificamos que la fecha introducida sea válida.
echo"fecha Correcta";
}else{
echo"Diga fecha";
}
}else{
echo"Introduce una fecha válida";
}
Pensando en tu código llegue a la conclusión que antes de hacer el checkdate() deberíamos de saber si los valores introducidos en las variables $dia, $mes, $año son intenger o int (números). Este código lo programé y me funciona correctamente, ahora solo es cuestión de que lo pruebes y te sirva :)

Si te sirve mi script, suéltame algo de reputación :P jsajsaj, nunca viene mal.
Pienso, comparto, aprendo, luego creo
Tal como lo tenias no funcionaba bien, ya que podia poner cualquier fecha, ejem.:500/500/5000 y ademas no recibía el valor del form, por eso le he cambiado algo para que reciba el valor del form, pero uan así, pasa lo mismo. Mira.
<?php

$dia = 1;
$mes = 2;
$año = 3;
$fecha=(checkdate($mes, $dia, $año));
if (isset($_POST["fecha"])&&((int)$dia) && ((int)$mes) && ((int)$año)){ 
if($fecha=(checkdate($mes, $dia, $año))){ 
echo $fecha=$_POST["fecha"];
}
if(!isset($_POST["fecha"])&&($fecha=(!checkdate($mes, $dia, $año)))){
echo"fecha incorrecta";
}
}else{
echo"Diga fecha";
} 
 
?>
Lo mejor de caerse al tropezar, es volverse a levantar.
El codigo tal y como lo tenias enteriormente funciona a la perfeccion, te lo digo porque lo probe, solo que estas cometiendo muchos errores:
1) para que quieres la funcion checkdate(); si no estas comparando la fecha que quieres.
2) tienes variables que le pasas a la funcion checkdate(); $mes,$dia,$año, ojo con $año porque estas usando un caracter especial, cambialo por otro nombre, dichas variables les asignas un valor, 1,2,3, respectivamente, y se las pasas ala funcion checkdate($mes,$dia,$año); eso no sirve de nada si la fecha que quieres validar esta en $_POST["fecha"].
3) checkdate() requiere que le pases los 3 numeros enteros que conforman la fecha, y tu fecha va toda junta en $_POST["fecha"], primero debes separarla en $mes, $dia,Y $año;
3) Repites dos veces esta linea $fecha=(checkdate($mes, $dia, $año)), para que?? no lo se.
Claro pedazo de melón (gjulian), estoy totalmente deacuerdo con serverdns, además metes tres if, cuando solo deberías usar dos, uno que verifica que las variables sean números enteros y otro que verifique que la fecha sea válida.

Tu código:
$dia = 1; // Esta es mi variable, asíganel una tuya
$mes = 2; // Esta es mi variable, asíganel una tuya
 $año = 3; // Esta es mi variable, asíganel una tuya
 $fecha=(checkdate($mes, $dia, $año));
if (isset($_POST["fecha"])&&((int)$dia) && ((int)$mes) && ((int)$año)){ 
if($fecha=(checkdate($mes, $dia, $año))){ 
echo $fecha=$_POST["fecha"];
}
if(!isset($_POST["fecha"])&&($fecha=(!checkdate($mes, $dia, $año)))){
echo"fecha incorrecta";
}
}else{
echo"Diga fecha";
} 


El código tal cual como te lo pasé funciona perfectamente, a las variables $dia, $mes, $ano deberías asignarles $_POST distintos y no mis números que solo era para ejemplificar el script, es decir, para que te funcione mi código usa tres <select> -> día, mes año (esta idea te la dió serverdns al principio :) ).

$dia = $_POST['dia'];
$mes = $_POST['mes'];
$año = $_POST['ano'];
if ((int)$dia && (int)$mes && (int)$año){ 
if(checkdate($mes, $dia, $año)){ 
echo $fecha=$_POST["fecha"];
}else{
echo"Fecha incorrecta. Por favor, introduzca una fecha válida";
}


Solo necesitas de un IF que verifique que los valores de las variables $_POST son números enteros y otro IF que verifique que la fecha es válida.

Los tres select.
<form id="form1" name="form1" method="post" action="">
   <label>
   <select name="mes" id="mes">
   </select>
   </label>
   <label>
   <select name="dia" id="dia">
   </select>
   </label>
   <label>
   <select>
   <select name="ano" id="ano">
   </select>
   </label>
</form>
Pienso, comparto, aprendo, luego creo
!Que dureza! No perdonais ni siquiera que sea un novato ¿eh? Bueno vale, os lo consiento porque me estais enseñando a aprehender mucho. Gracias chicos.:):) Funciona. Asi ha quedado:
<?php

$dia = $_POST["dia"];
$mes = $_POST["mes"];
$anio = $_POST["anio"];
if ((int)$dia && (int)$mes && (int)$anio){ 
if(checkdate($mes, $dia, $anio)){ 
echo "bien";
}else{
echo"Fecha incorrecta. Por favor, introduzca una fecha válida";
} 
}
 
?>
<form enctype="multipart/form-data" action="validaFechas.php" method="post">
<input type="text" name="dia" value="<?php echo $dia; ?>" size="1" />
<input type="text" name="mes" value="<?php echo $mes; ?>" size="1" />
<input type="text" name="anio" value="<?php echo $anio; ?>" size="1" />
<input type="submit" value="enviar" />
</form>
Pero tengo que decir algo en mi favor: debo de tener mal configurado los servicios de comunicacion de errores del WAMPSERVER, porque siempre que inicio una variable, ejem.: $dia, me da el mismo error:Notice: Undefined index: dia in C:\wamp\www\pruebas de php\validaFechas.php on line 10, y eso me desvia mucho.
¿No sabreis como debería estar configurado el php.ini? Aunque esto sea otro tema.
Lo mejor de caerse al tropezar, es volverse a levantar.
No es un error precisamente, es una noticia y/o nota y es porque no has declaro las variables y las usaste, para evitar esas notas se declaran primero las variables con valores nulos o vacios, o con una asignacion condicionada.

<?php
/*////////////////////////////////////////////
// Codigos Y Funciones Utilies En PHP       //
// Sitio Web: http://www.serverdns.us       //
// Soporte Tecnico: [correo eliminado]    //
////////////////////////////////////////////*/

$dia = isset($_POST["dia"])?$_POST["dia"]:'';
$mes = isset($_POST["mes"])?$_POST["mes"]:'';
$anio = isset($_POST["anio"])?$_POST["anio"]:'';

if((int)$dia && (int)$mes && (int)$anio && $_SERVER['REQUEST_METHOD']=='POST'){
if(checkdate($mes, $dia, $anio)){
echo "bien";
}else{
echo"Fecha incorrecta. Por favor, introduzca una fecha válida";
}
}

echo "<form enctype=\"multipart/form-data\" action=\"fechas.php\" method=\"post\">
<input type=\"text\" name=\"dia\" value=\"$dia;\" size=\"2\"/>
<input type=\"text\" name=\"mes\" value=\"$mes;\" size=\"2\"/>
<input type=\"text\" name=\"anio\" value=\"$anio;\" size=\"2\"/>
<input type=\"submit\" value=\"enviar\" />
</form>";
?>

Aunque la funcion valida una fecha, no es conveniente valerse solo de ella, ya que la misma valida fechas futuras, asi como fechas pasadas por ejemplo 1-1-1 , si lo deceamos utilizar para un sistema de pedidos a futuro debemos utilizar otro tipo de metodos de validacion.
Peudes evitar estas NOTICE poniendo un @ delante de la variable, o bien editas la línea de php.ini que indica que tipo de "errores/notas" mostrar.

Ejemplo:
@$dia = @$_POST['día'];
Con el @ delante, omitirá dicha nota.

Te dejo aquí la una publicación que dice como editar el php.ini.
Pienso, comparto, aprendo, luego creo
Osea, que si en php.ini en error_reporting = E_ALL le añado & ~E_NOTICE, me ahorro declarar primero las variables. Si no afecta al comportamiento del script ni al funcionamiento del mismo ¿me ahorro un monton de filas de codigos ¿no?
Pues Uds. dirá cual es ese otro metodo para fechas futuras, que es el que me interesa. Ya estoy impaciente.
Gracias
Lo mejor de caerse al tropezar, es volverse a levantar.
El funcionamiento seria el mismo, pero no se trata de que te ahorres o no lineas de codigo, muchas veces por seguridad es conveniente declarar todas las variables que vas ha usar, pero sin duda el funcionamiento seria el mismo, ya que php es flexifle en ese aspecto, ya que si la variable no fue declarada php la crea en el instante en la que la requiere, lo que no ocurre con otros lenguajes de programacion, en el que requieres declarar todas tus variables.
Vale, entonces volveré a ponerlo como venía por default y las declararé, ya que la seguridad es muy importante. Gracias a ambos.
Ah! y ahi te va otro point + Áldaron
Lo mejor de caerse al tropezar, es volverse a levantar.
Volviendo al tema del post. ¡No habia caido en la cuenta que checkdate te valida la fecha en ingles (mm/dd/YY)!:mad:
Que ingenuo, pensaba que con cambiar el orden de los input ó el de las variables, estaría resuelto el tema, pero NO, hay que complicarlo un poquito mas, ¿como si no lo fuera ya bastante?
¿Como se supone que debo hacer para que quede en ESPAÑOL (dd/mm/años)?
Lo mejor de caerse al tropezar, es volverse a levantar.
es indirente al formato ingles, español, eso no importa siempre y cuando el orden de las variables sea el correco checkdate($mes,$dia,$anio), independientemente del orden en que tu tengas tu formulario si tus variables de dia mes y año son independientes, checkdate() no le importa el formato siempre y cuando le pases los valores correctos en cada espacio requerido.
Ya, pero el tema está en el sujeto que valla a introducir la fecha, si es español y pretende poner 25/7/2011 se saldrá el aviso de fecha no valida, a no ser que lo introduzca en inglis 7/25/2011 y si el men no cae en la cuenta del formato, pues se puede hartar e irse.
Lo mejor de caerse al tropezar, es volverse a levantar.
gjulian, es sencillo y como dice serverdns no hay problema según el orden en que estén tus variables siempre y cuando valides con checkdate() de forma correcta, ya que siempre puedes mostrar el formato de fecha según querás (el orden).

$dia = $_POST["dia"];
$mes = $_POST["mes"];
$anio = $_POST["anio"];
if ((int)$dia && (int)$mes && (int)$anio){ 
if(checkdate($mes, $dia, $anio)){ 
echo "bien";
}else{
echo"Fecha incorrecta. Por favor, introduzca una fecha válida";
} 
}

Este es el código ¿no?, bien, pues lo único que debes hacer para mostrar el orden de la fecha según querés, es haciendo un echo y diciéndole que muestre dichas variables en el orden que prefieres.

echo" Su fecha elegida es: $dia/$mes/$anio";

Si pretendes guardarla en la BBDD podés hacer exactamente lo mismo.

mysql_query("INSERT INTO bbdd (dia, mes, anio) VALUES ('$dia','$mes','$anio')") or die ("Error al introducir fecha"); // Ves, aquí no las estoy guardando como $mes/$dia/$anio
echo"Su fecha enviada: $dia/$mes/$año, ha sido guardada en nuestra BBDD con éxito.";