Controlar la salida de un Warninig en php.

GorKo

Hola, estoy realizando una web en php en la que tengo q controlar unas fechas que los usuarios pasan a traves de un formulario, para ello utilizo la funcion checkdate para que me compruebe si realmente ha introducido una fecha o no. La cuestion es que intento controlar el error de la siguiente forma, si los caracteres introducidos son falsos (es decir no son una fecha) le muestro un tecto de error con echo y salgo de la ejecucion del script. Pero al probarlo a ver si lo hace bien el problemas es que antes del texto que hago que se muestre me pone un warning (Warning: checkdate() expects parameter 1 to be long, string given in ...almacennmaterial.reg.php on line 51), el cual no quiero que salga.

Si alguno sabe como podria hacer que no salga por pantalla los warning estaria muy agradecido.

Os pongo el codigo, decir que son dos fechas y que el ususario debe itroducir en campos distinto el dia el mes y el año.

$check_fecha_c=checkdate($mes_c, $dia_c, $ano_c);
$check_fecha_p=checkdate($mes_p, $dia_p, $ano_p);

if(($check_fecha_c==false) || ($check_fecha_p==false)){
echo "Errores en la fecha: <br>";
if ($check_fecha_c==false){
echo "La fecha de la última calibración es incorrecta <br>";
}
if ($check_fecha_p==false){
echo "La fecha de la proxima calibración es incorrecta <br>";
}
include 'nmaterial.php';
$close=mysql_close($connection);
exit();
}

cabron

En el la configuración mete esto:

display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log

Así los errores no se muestran en pantalla, pero los puedes ver en un log (según tu servidor web a l mejor tienes que cambiar el directorio)

De todas formas si te da un Warning será por algo, yo hace siglos que no toco el PHP así que ni idea de por que te lo da.

Kansei

el tema de warning y errors lo tienes que tocar en el fichero php.ini

GorKo

No era exactamente eso lo que queria, ya que entonces no salen los demas errores que me gustaria verlos al menos mientras estoy construyendo la página, pero bueno es una solucion que puedo tomar por el momento. Gracias :)

erdanblo

Pon una @ delante y con eso no aparece el error.

GorKo

Lo de la @ ya lo he intentado pero me sigue saliendo el warning, ya que creo que solo sirve para errores y no para warnings, aunque no estoy muy seguro, quizas lo utilicé mal, lo intentare de nuevo y gracias.

cabron

Veamos, ya te digo que hace siglos que no toco PHP, pero creo que el problema es que al coger las fechas de una caja de texto, las variables donde las guardas pasan a ser del tipo string. checkdate () espera números enteros, así que si conviertes las variables a int no te dará el warning:

settype ($mes_c, integer);
settype( $dia_c , integer );
settype ($ano_c, integer);

settype ($mes_p, integer);
settype( $dia_p , integer );
settype ($ano_p, integer);

Otra opcion es hacer un cast cuando asignes las variables :

$mes_c = (int) variable_post_del_formulario; //Lo mismo con las otras

GorKo

Eso me puede servir muchas gracias.

Usuarios habituales

  • GorKo
  • cabron
  • erdanblo
  • Kansei