Foros del Web » Programando para Internet » PHP »

Validar email con php

Estas en el tema de Validar email con php en el foro de PHP en Foros del Web. Se que esto hoy en día se hace con javascript, pero estoy practicando código de php. Estoy validando el email de un formulario con este ...
  #1 (permalink)  
Antiguo 09/05/2013, 23:07
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años
Puntos: 10
Validar email con php

Se que esto hoy en día se hace con javascript, pero estoy practicando código de php.

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;
}
?>
El formulario tiene tres campos:
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
  #2 (permalink)  
Antiguo 10/05/2013, 00:20
 
Fecha de Ingreso: abril-2013
Mensajes: 75
Antigüedad: 11 años
Puntos: 2
Respuesta: Validar email con php

mmm, yo te recomendaría usar expresiones regulares para realizar cualquier tipo de validación, ya sea para validar e-mail, nombres de usuarios, contraseñas, fechas, etc...
por ejemplo, para validar un correo electrónico, podrías hacer algo así:

Código:
function validar_mail($mail)
{
    $patron = "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/";
    if ( ! preg_match($patron , $mail) )
      $errores['mail'] = "Ha introducido un email erroneo";
    else
    {
      $conexion = mysqli_connect("localhost" , "usuario_mysql" , "pass" , "base_de_datos");
      $consulta = "SELECT * FROM tb_usuarios WHERE email = '" . $mail . "'";
      mysqli_query($conexion , $consulta);
      if ( mysqli_affected_rows($conexion) != 0 )
        $errores['mail'] = "El email esta ocupado por otro usuario";
    }
    return $errores;
}
  #3 (permalink)  
Antiguo 10/05/2013, 02:07
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años
Puntos: 10
Respuesta: Validar email con php

Cita:
Iniciado por weltxo Ver Mensaje
mmm, yo te recomendaría usar expresiones regulares para realizar cualquier tipo de validación, ya sea para validar e-mail, nombres de usuarios, contraseñas, fechas, etc...
por ejemplo, para validar un correo electrónico, podrías hacer algo así:

Código:
function validar_mail($mail)
{
    $patron = "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/";
    if ( ! preg_match($patron , $mail) )
      $errores['mail'] = "Ha introducido un email erroneo";
    else
    {
      $conexion = mysqli_connect("localhost" , "usuario_mysql" , "pass" , "base_de_datos");
      $consulta = "SELECT * FROM tb_usuarios WHERE email = '" . $mail . "'";
      mysqli_query($conexion , $consulta);
      if ( mysqli_affected_rows($conexion) != 0 )
        $errores['mail'] = "El email esta ocupado por otro usuario";
    }
    return $errores;
}

Ok muchas Gracias oido y mirandolo.
Un saludo
  #4 (permalink)  
Antiguo 10/05/2013, 02:13
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años
Puntos: 10
Respuesta: Validar email con php

Cita:
Iniciado por weltxo Ver Mensaje
mmm, yo te recomendaría usar expresiones regulares para realizar cualquier tipo de validación, ya sea para validar e-mail, nombres de usuarios, contraseñas, fechas, etc...
por ejemplo, para validar un correo electrónico, podrías hacer algo así:

Código:
function validar_mail($mail)
{
    $patron = "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/";
    if ( ! preg_match($patron , $mail) )
      $errores['mail'] = "Ha introducido un email erroneo";
    else
    {
      $conexion = mysqli_connect("localhost" , "usuario_mysql" , "pass" , "base_de_datos");
      $consulta = "SELECT * FROM tb_usuarios WHERE email = '" . $mail . "'";
      mysqli_query($conexion , $consulta);
      if ( mysqli_affected_rows($conexion) != 0 )
        $errores['mail'] = "El email esta ocupado por otro usuario";
    }
    return $errores;
}
Aunque en realidad no era mi pregunta, yo para validar emails usuarios etc ya lo hago, el rollito estava pàra practicar funciones de php, en este caso era solo validar el campo de email de un formulario, pera que fuera un email y practicar:
substr_count, explode, strlen etc etc

Te repito, eso ya lo hago, lo que me cuentas, lo que te digo lo hago con javascript, es solo validar que el email introducido en el camo Correo es un correo de forma. [email protected].

Un saludo: Manyblue
  #5 (permalink)  
Antiguo 10/05/2013, 02:18
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Validar email con php

Apartir de PHP 5.2.x puedes usar filter_var() con la opción FILTER_VALIDATE_EMAIL el cual te retornará la variable o false en caso de fallar el filtro.
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #6 (permalink)  
Antiguo 10/05/2013, 20:17
Avatar de manyblue  
Fecha de Ingreso: marzo-2008
Mensajes: 329
Antigüedad: 16 años
Puntos: 10
Respuesta: Validar email con php

Gracias, esto si que me ha servido.
Un saludo: Manyblue

Etiquetas: email, formulario, html, sql, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:04.