elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 04:57  


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP
| | | |-+  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 829 veces)
inquilin@19

Desconectado Desconectado

Mensajes: 66



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

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: 327


"Dinero Facil"


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

Haber asi:

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;
   }
}
 


En línea


GITHUB: github.com/empirefx
drvy | BSM


Desconectado Desconectado

Mensajes: 1.129


badstupidmonkey


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

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

Código
function comprobar_email($email){
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)) {
return 1;} else {return 0;}
}


Saludos

En línea
Dusk

Desconectado Desconectado

Mensajes: 4


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

Código
function ChkMail($str){
if(filter_var($str, FILTER_VALIDATE_EMAIL)) {
    return true;
}else{
    return false;
}
}

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 anonimos « 1 2 »
Hacking Básico
radancax 20 11,776 Último mensaje 18 Enero 2006, 01:34
por jose2c
emails
Dudas Generales
_loko_ 5 548 Último mensaje 16 Mayo 2005, 07:37
por _loko_
Emails
Programación Visual Basic
Kizar 3 451 Último mensaje 3 Enero 2006, 05:40
por NYlOn
Emails en PHP
PHP
Riki_89D 6 1,221 Último mensaje 27 Febrero 2009, 22:24
por stavrosdrv
emails c++
Programación C/C++
ffthor 4 638 Último mensaje 6 Julio 2009, 18:56
por Jaixon Jax
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines