2011-11-22 94 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