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