Validar campo email de un formulario con PHP
En cualquier aplicación Web que se requiera interactuar con el usuario, a menudo es necesario crear un formulario de registro o entrada al sistema en el cual se requiere la introducción de un email.
Por norma, hay que pensar que los usuarios puden introducir en dichos campos de formulario datos que no se corresponden en formato con lo que se debe introducir. Uno de esos campos vulnerables son los campos de emails.
Para validar estos campos lo que debemos hacer es crear una función que se encargue de verificar si el texto introducido en el campo de email es correcto o no.
<?php function comprobar_email($email){ $mail_correcto = 0; //compruebo unas cosas primeras if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){ if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) { //miro si tiene caracter . if (substr_count($email,".")>= 1){ //obtengo la terminacion del dominio $term_dom = substr(strrchr ($email, '.'),1); //compruebo que la terminación del dominio sea correcta if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){ //compruebo que lo de antes del dominio sea correcto $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1); $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1); if ($caracter_ult != "@" && $caracter_ult != "."){ $mail_correcto = 1; } } } } } if ($mail_correcto) return 1; else return 0; } ?>
En la función que hemos creado nos encargamos de revisar si la cadena introducida tiene los carácteres especiales que contienen los emails: @,, ., y que contenga un mínimo de 6 carácteres.
Esta función podría ser más sotisficada y por ejmplo podría comprobar también el dominio: com, es, net.
Nos podríamos ahorrar todo el código anterior reemplazando por la función siguiente:
function comprobar_email($email) { return (filter_var($email, FILTER_VALIDATE_EMAIL)) ? 1 : 0; }
Para recibir lo que se ha escrito en el campo email del formulario lo podemos hacer de la siguiente forma:
<?php if (isset($_POST['enviar'])) { if (comprobar_email($_POST['email'])) echo 'El email introducido es correcto!'; else echo 'El email introducido NO es correcto!'; } ?>
En el código anterior, si se pulsa el botón de enviar, comprobamos mediante la función anterior si el texto introducido en el campo con name=»email» es un email o no.
Finalmente, solo falta mostrar mediante HTML el formulario de la siguiente forma:
<form action="index.php" method="post"> Email:<input type="text" name="email" value="<?php echo $_POST['email']; ?>"> <input type="submit" name="enviar" value="Enviar"/> </form>
en mi codigo si se escribe mal el dominio… por ejemplo hotmaili o gmaili muestra como enviado pero no llega… Es decir no da error y parece que lo envió pero no llega.
Como se puede hacer para que eso no suceda….Gracias por cualquier ayuda
Hola,
Gracias por tu mensaje.
Para cubrir ese escenario tendrás que buscar la manera de controlar que el dominio existe en internet. No estoy seguro si PHP tiene algo para esto o tendrás que ingeniártelas tu.
Jose Aguilar,
Saludos
Jose Aguilar,
Saludos
[…] que os sirva, este magnífico aporte es del blog de José Aguilar VN:F [1.9.20_1166]espere…Rating: 0.0/10 (0 votes […]
Saludos, no es necesario realizar toda esa codificacion, se puede utilizar funciones nativas de PHP:
function comprobar_email($email)
{
return (filter_var($email, FILTER_VALIDATE_EMAIL)) ? 1 : 0;
}
Ok, gracias! Mucho ahorro de código. Interesante función!
You are my aspiration, I own few blogs and very sporadically run out from brand :). «Follow your inclinations with due regard to the policeman round the corner.» by W. Somerset Maugham.
ss