elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Validar emails en PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Validar emails en PHP  (Leído 2,643 veces)
inquilin@19

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Validar emails en PHP
« en: 1 Diciembre 2011, 17:39 pm »

Hola a todos,  tengo el siguiente problema, tengo este codigo:

Código:
<?php
//Establecemos un par de funciones
function doDB() {
global $mysqli;
//Conectamos con el servidor y la DB
     $mysqli = mysqli_connect("localhost", "root",
         "", "test");
//Si la conexión falla, paramos el script execution
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
}
function emailChecker($email) {
global $mysqli, $check_res;
//Probamos que el email no esté ya en lista
$check_sql = "SELECT id FROM SUBSCRIBERS
              WHERE email = '".$email."'";
$check_res = mysqli_query($mysqli, $check_sql)
or die(mysqli_error($mysqli));
}
//Determinamos si es necesario mostrar el formulario o no
if (!$_POST) {
//Es necesario mostrarle, luego creamos la caja del formulario
$display_block = "
<form method=\"POST\" action=\"".$_SERVER["PHP_SELF"]."\">
<p><strong>Your E-Mail Address:</strong><br/>
<input type=\"text\" name=\"email\" size=\"40\">
<p><strong>Action:</strong><br/>
<input type=\"radio\" name=\"action\"
value=\"sub\" checked> subscribe
<input type=\"radio\" name=\"action\"
            value=\"unsub\"> unsubscribe
<p><input type=\"submit\" name=\"submit\"
        value=\"Submit Form\"></p>
</form>";
} else if (($_POST) && ($_POST["action"] == "sub")) {
//Validamos el email para la suscripcion
if ($_POST["email"] == "") {
header("Location: manage.php");
exit;
} else {
//Conectamos con la DB
doDB();
//Miramos si el email esta en lista
emailChecker($_POST["email"]);
//Cojemos el numero del resultado y hacemos algo
if (mysqli_num_rows($check_res) < 1) {
mysqli_free_result($check_res);
//Lo grabamos
$add_sql = "INSERT INTO subscribers (email)
                        VALUES('".$_POST["email"]."')";
$add_res = mysqli_query($mysqli, $add_sql)
                       or die(mysqli_error($mysqli));
$display_block = "<p>Thanks for signing up!</p>";
//Cerramos conexion con MySQL
mysqli_close($mysqli);
} else {
//Mostramos mensaje de error
$display_block = "<p>You're already subscribed!</p>";
}
}
} else if (($_POST) && ($_POST["action"] == "unsub")) {
//Intentamos darle de baja
if ($_POST["email"] == "") {
header("Location: manage.php");
exit;
} else {
//Conectamos con BD
doDB();
emailChecker($_POST["email"]);
if (mysqli_num_rows($check_res) < 1) {
mysqli_free_result($check_res);
$display_block = "<p>Couldn't find your address!</p>
<p>No action was taken.</p>";
} else {
while ($row = mysqli_fetch_array($check_res)) {
$id = $row["id"];
}
$del_sql = "DELETE FROM subscribers
WHERE id = '".$id."'";
$del_res = mysqli_query($mysqli, $del_sql)
or die(mysqli_error($mysqli));
$display_block = "<P>You're unsubscribed!</p>";
}
mysqli_close($mysqli);
}
}
?>
<html><head><title>
Subscribe/Unsubscribe to a Mailing List
</title></head>
<body>
<h1>Subscribe/Unsubscribe to a Mailing List</h1>
<?php echo "$display_block"; ?>
</body>
</html>

Tambien tengo el codigo para validarlo
Código:
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;
}


EL problema que tengo es que, lo ponga como lo ponga me lee el codigo como valido pero no me filtra los correos que introduzco, da igual que empiecen por @ o por espacios (en el codigo de filtrado se supone que nos tiene que dar error), no me lo filtra
Alguna sugerencia??
Agradezco muchisimo la ayuda, estoy bastante perdido
Saludos


En línea

Sólo mirando al frente se puede seguir, llevar lastres en el camino no te lo permiten
EFEX


Desconectado Desconectado

Mensajes: 1.171


"Dinero Facil"


Ver Perfil WWW
Re: Validar emails en PHP
« Respuesta #1 en: 1 Diciembre 2011, 18:22 pm »

Haber asi:

Código
  1. function comprobar_email($email){
  2.    $mail_correcto = 0;
  3.    //compruebo unas cosas primeras
  4.    if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@")&& (substr($email,strlen($email)-1,1) != "@")){
  5.        if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) &&(!strstr($email,"\$")) && (!strstr($email," "))) {
  6.            //miro si tiene caracter
  7.            if (substr_count($email,".")>= 1){
  8.                //obtengo la terminacion del dominio
  9.                $term_dom = substr(strrchr ($email, '.'),1);
  10.                //compruebo que la terminación del dominio sea correcta
  11.                if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){
  12.                    //compruebo que lo de antes del dominio sea correcto
  13.                    $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1);
  14.                    $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1);
  15.                    if ($caracter_ult != "@" && $caracter_ult != "."){
  16.                        $mail_correcto = 1;
  17.                    }
  18.                }
  19.            }
  20.        }
  21.    }
  22.    if ($mail_correcto) {
  23.        return 1;
  24.    }else{
  25.        return 0;
  26.    }
  27. }
  28.  


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Validar emails en PHP
« Respuesta #2 en: 1 Diciembre 2011, 19:16 pm »

Podrías usar regex (expresiones regulares) para ahorrarte lineas innecesarias..

Código
  1. function comprobar_email($email){
  2. if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email)) {
  3. return 1;} else {return 0;}
  4. }


Saludos

En línea

Dusk

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Validar emails en PHP
« Respuesta #3 en: 20 Diciembre 2011, 20:43 pm »

Código
  1. function ChkMail($str){
  2. if(filter_var($str, FILTER_VALIDATE_EMAIL)) {
  3.     return true;
  4. }else{
  5.     return false;
  6. }
  7. }

yo uso esa :P
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Emails
Programación Visual Basic
Kizar 3 1,633 Último mensaje 3 Enero 2006, 05:40 am
por NYlOn
Emails en PHP
PHP
Riki_89D 6 2,830 Último mensaje 27 Febrero 2009, 22:24 pm
por stavrosdrv
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines