empty() trabaja bien, el problema es que a veces se le confunde con
isset().
Viendo el bosque en lugar del árbol, ¿no sería mejor enviar mensajes personalizados según el tipo de casilla que llenó mal?
Por ejemplo, el siguiente código imprime:
Todo bien !
En pocas líneas se validaron los datos y no sólo eso, sino que el mensaje de error no es general, sino que dice exáctamente qué está mal.
Código PHP:
<?
<html>
<head><title>Ejm.</title></head>
<body>
<?
//voy a suponer los siguientes datos de entrada
$nombre = "México";
$ap1 = "Cámaras";
$ap2 = "Digitales";
$email = "[email protected]";
/////// V A L I D A N D O L O S D A T O S ////////
$lat = "a-zA-Z0-9áéíóúüñÁÉÍÓÚÜÑ"; //caracteres latinos alfanuméricos
$mensajes = ""; //almacenemos los mensajes de error
//checando que el nombre tenga al menos 3 caracteres de longitud
if ( !ereg("^[$lat]{3,}$",$nombre) ) $mensajes .= "<li>El nombre debe contener al menos 3 caracteres alfanuméricos.";
//checando que ap1 tenga al menos 3 caracteres de longitud
if ( !ereg("^[$lat]{3,}$",$ap1) ) $mensajes .= "<li>El AP_01 debe contener al menos 3 caracteres alfanuméricos.";
//checando que ap2 tenga al menos 3 caracteres de longitud
if ( !ereg("^[$lat]{3,}$",$ap2) ) $mensajes .= "<li>El AP_02 debe contener al menos 3 caracteres alfanuméricos.";
//checando que el email tenga un formato válido
if ( !ereg("^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$",$email) ) $mensajes .= "<li>El email no es válido, favor de verificar.";
////////////// T O M A D E D E C I S I C I O N E S //////////////
if( !empty($mensajes) ){ //hubo errores
//mostremos los errores en forma de lista
$mensajes = "<ul>".$mensajes."</ul>";
echo $mensajes;
}
else{ //todo en orden
echo "Todo bien !";
//$insert=mysql_query("insert into ......
}
?>
</body></html>
?>
Pero... ¿qué pasa si en lugar de
[email protected] escribió
correohotmail.com?
Entraría en el
if() e imprimiría:
El email no es válido, favor de verificar.
¿qué pasa si en lugar de
México escribió
mx?
Entraría en el
if() e imprimiría:
El nombre debe contener al menos 3 caracteres.
ADEMÁS INCREMENTA LA SEGURIDAD
En este ejemplo, no sólo se logró lo que se buscaba, sino que además incrementa la seguridad de la aplicación. Nota que si alguien quiere insertar por ejemplo TAGS de HTML, no se lo va a permitir.