Estoy validando el email de un formulario con este código:
Código PHP:
<?php
$nombre = $_POST["nombre"];
$email = $_POST["email"];
$texto = $_POST["texto"];
// Definir las variables para la captura de errores y estatus
$error = "<b>OCURRIERON UNOS O MÁS ERRORES: </b><br>";
$status = false; // false es variable booleana (false,true) o (1,0)
// Comprobamos que los campos del formulario recibido no estén vacios
if ($nombre == "") {
$error .= "El campo Nombre está vacio <br>";
$status = true;
}
if ($email == "") {
$error .= "El campo Correo está vacio <br>";
$status = true;
}
if ($texto == "") {
$error .= "El campo Texto está vacio <br>";
$status = true;
}
//Comprobabos si el email electrónico es válido:
// [email protected]
// Comprobamos si el email contiene la "@"
if (substr_count($email, "@") != 1) {
$error .= 'El correo no es válido, falta el signo "@" <br>';
$status = true;
}
// Comprobamos si el email contiene el "."
if (substr_count($email, ".") != 1) {
$error .= 'El correo no es válido, falta el signo "." <br>';
$status = true;
}
// Comprobamos si el correo contiene el nombre del email
// Definimos variable para el control del nombre del email
$nombre_email = explode("@", $email);
$dominio_email = explode(".", $nombre_email[1]);
if (strlen($nombre_email[0]) < 2) {
$error .= "El nombre del correo no es válido <br>";
$status = true;
}
// Comprobamos si el correo contiene el dominio del email
if ((count($dominio_email) < 2) && (strlen($dominio_email[0]) < 2)) {
$error .= 'El nombre del dominio no es válido <br>';
$status = true;
}
$mensaje = "DATOS RECIBIDOS \n";
$mensaje .= "NOMBRE: $nombre \n";
$mensaje .= "NOMBRE: $email \n";
$mensaje .= "NOMBRE: $texto \n";
$encabezado = "From: $email \n";
$encabezado .= "Replay-to: $email \n\n";
if ($status == false) {
mail ("[email protected]","Formulario de Contacto",$mensaje,$encabezado);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ENVIAR CORREO ELECTRONICO</title>
</head>
<body>
<h2 align="center">EL FORMULARIO HA SIDO ENVIADO CORRECTAMENTE !! <br />
</h2>
<div align="center"><b>DATOS RECIBIDOS:</b><br />
</div>
<table width="632" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="632"><b>Nombre:</b> <?php echo $nombre; ?><br />
<b>Correo:</b> <?php echo $email; ?><br />
<b>Texto:</b><br /><?php echo $texto; ?></td>
</tr>
</table>
<div align="center"><br />
<strong>Muchas gracias por haber contactado con nosotros, a la mayor brevedad posible le responderemos.<br />
Pincha en este enlace para redirigirte a la:</strong> <a href="enviar_form.php">Página de contacto</a></div>
</body>
</html>
<?php
}
else
{
echo $error;
}
?>
Nombre
Correo
Texto
Si relleno el formulario con los tres campos bien, con un email verdadedo, solo me da el error de la funcion mail, que como estoy en local es lógico pues no hay un smtp instalado. Pero si por ejemplo relleno todos los campos bien excepto por ejemplo el email que solo le pongo una "a", me salta el siguiente error:
Notice: Undefined offset: 1 in C:\wamp\www\curso_php_mysql\Basico_1\enviar_form.p hp on line 45
OCURRIERON UNOS O MÁS ERRORES:
El correo no es válido, falta el signo "@"
El correo no es válido, falta el signo "."
El nombre del correo no es válido
El nombre del dominio no es válido
que es esta línea:
$dominio_email = explode(".", $nombre_email[1]);
Alguna sugerencia ??
Muchas gracias de antemano: Manyblue