验证电子邮件地址 - 检查是否为空

时间:2011-11-22 17:13:25

标签: php html validation

花了几个小时后,我仍然无法弄明白。我正在尝试验证一个电子邮件地址,但每次都无论我输入的是什么,它都会给我留言,好像它是空的“你没有输入电子邮件地址!”。

编辑:修复了无效的电子邮件地址错误,因为我没有为输入文本添加名称。现在,当我输入正确的电子邮件时,它会继续加载“请稍候”。有任何想法吗?是因为它没有连接到mysql吗?

$email = mysql_real_escape_string($_POST['signup-email']);

if(empty($email)){
     $status = "error";
     $message = "You did not enter an email address!";
}
else if(!preg_match('/^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-        Z0-9_]+)*\.[a-zA-Z]{2,4}$/', $email)){ //validate email address - check if is a valid email     address
        $status = "error";
        $message = "You have entered an invalid email address!";
}
else {
    $existingSignup = mysql_query("SELECT * FROM signups WHERE signup_email_address='$email'");   
    if(mysql_num_rows($existingSignup) < 1){

        $date = date('Y-m-d');
        $time = date('H:i:s');

        $insertSignup = mysql_query("INSERT INTO signups (signup_email_address, signup_date, signup_time) VALUES ('$email','$date','$time')");
        if($insertSignup){ //if insert is successful
            $status = "success";
            $message = "You have been signed up!";  
        }
        else { //if insert fails
            $status = "error";
            $message = "Ooops, Theres been a technical error!"; 
        }
    }
    else { //if already signed up
        $status = "error";
        $message = "This email address has already been registered!";
    }
}

HTML:

<div id="signupform">
<form id="newsletter-signup" action="?action=signup" method="post">  
     <fieldset>  
        <input type="text" name="signup-email" id="signup-email" size="20" value="Email Address" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/>
        <input type="submit" id="signup-button" value="+"/>
        </br></br><p id="signup-response"></p>  
     </fieldset>  
</form>

4 个答案:

答案 0 :(得分:2)

if(strlen($_POST['signup-email'])) == 0){
  $status = "error";
  $message = "You did not enter an email address!";
}

然后为你的帖子变量命名:

<input type="text" name='signup-email' id="signup-email" size="20" value="Email Address" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/>

答案 1 :(得分:0)

您的表单中没有名为email的字段...

你也应该这样做:if(!isset($_POST['email'])) {

如果我理解正确(除非你没有发布所有代码)。

答案 2 :(得分:0)

尝试将name="email"添加到电子邮件输入的html中......此外,$email应定义为$email = $_POST['email'];

答案 3 :(得分:0)

您的输入字段没有名称,PHP从输入的name属性中检索$_POST个变量。换句话说,没有名称,也没有访问该输入的值。 采取draevor的建议并将name属性添加到您的输入中。 此外,您在[a-zA-Z0-9_]

之间的正则表达式中有大量空格

'/^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA- Z0-9_]+)*\.[a-zA-Z]{2,4}$/'

不确定这是否来自复制和粘贴,但如果这些空格位于源代码中,则可能导致正则表达式无效。我从来没有听说过preg_match()函数的“忽略空白”标志,如果我错了,请纠正我。