2011-11-22 359 views
1

花费数小时后,我仍无法弄清楚。我试图验证一个电子邮件地址,但每次都是,无论它是什么Ii类型,它都会给我提示信息,就好像它是空的“您没有输入电子邮件地址!”。验证电子邮件地址 - 检查是否为空

编辑:修复了无效的电子邮件地址错误,因为我没有为我的输入文本添加名称。现在,当我输入正确的电子邮件时,它会一直加载“请稍等”。有任何想法吗?是否因为它没有连接到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> 

+5

请分享你定义'$ email'的地方。 – Willem

+2

http://ex-parrot.com/~pdw/Mail-RFC822-Address.html这是唯一正确的电子邮件RegEx。 – Brad

+0

“name”是输入元素的必需属性,并且需要在请求中获取参数。 详细说明:id =“signup-email”在表单上下文中是无用的(当然对CSS仍然有用)。 – Viruzzo

回答

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;"/> 
+0

好吧,这是因为我没有给我的职位变量的名称。但现在当我输入一个有效的电子邮件地址。它显示请等待并永远停留在那里。 – Art

+0

我们最好在新问题中处理该问题,而不是在评论中:-) – abcde123483

0

你没有一个场名为email您形式...

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

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

0

尝试增加name="email"到电子邮件输入的HTML ...此外,$email应定义类似$email = $_POST['email'];

0

你输入字段没有名字,PHP检索从输入的name属性$_POST变量。换句话说,没有名字,不能访问该输入的值。 采取draevor的建议,并将名称属性添加到您的输入。 还你[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()函数的“忽略空白”标记,如果我错了,请纠正我。

+0

这是复制和粘贴的错误。我的代码中没有空格 – Art