Título: Validar emails en PHP
Publicado por: inquilin@19 en 1 Diciembre 2011, 17:39 pm
Hola a todos, tengo el siguiente problema, tengo este codigo: <?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 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
Título: Re: Validar emails en PHP
Publicado por: EFEX en 1 Diciembre 2011, 18:22 pm
Haber asi: function comprobar_email($email){ $mail_correcto = 0; //compruebo unas cosas primeras //miro si tiene caracter //obtengo la terminacion del dominio //compruebo que la terminación del dominio sea correcta //compruebo que lo de antes del dominio sea correcto if ($caracter_ult != "@" && $caracter_ult != "."){ $mail_correcto = 1; } } } } } if ($mail_correcto) { return 1; }else{ return 0; } }
Título: Re: Validar emails en PHP
Publicado por: #!drvy en 1 Diciembre 2011, 19:16 pm
Podrías usar regex (expresiones regulares) para ahorrarte lineas innecesarias.. 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
Título: Re: Validar emails en PHP
Publicado por: Dusk en 20 Diciembre 2011, 20:43 pm
function ChkMail($str){ return true; }else{ return false; } }
yo uso esa :P
|