2013-08-29 182 views
-2

我正在設置此通訊訂閱表單以與我的數據庫進行通信,但在發送信息(電子郵件)之前,我只想驗證它。但是,當我輸入錯誤或空的數據時,它會顯示兩個錯誤消息。我不是PHP的專家,但似乎我錯過了一些右括號或什麼..我已經擺弄了一段時間沒有成功,所以我再次求助於你們:)php表單驗證和錯誤消息

<?php 
$host = "XXX"; 
$username = "name"; 
$password = "XXX"; 
$database = "base"; 
$connect = @mysql_connect($host, $username, $password) or die (@mysql_error()); 
$selectdb = @mysql_select_db($database, $connect) or die (@mysql_error()); 


if(isset($_POST['submit'])){ 
$email = $_POST['email']; 
if(empty($email)){ 
    echo "Hmm, you did not anything.."; 
    } 
    if (!preg_match(
    "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
    $email_address)) 
    { 
    echo "This email not valid"; 
    } 
    else{ 
    @mysql_query("INSERT INTO newsletters SET email='$email'"); 
    echo "Thanks you"; 
} 

} 
?> 

謝謝!

+2

您在'preg_match'中寫了'$ email_address'。替換爲'$ email'並將'preg_match'條件放在'if(empty($ email))' – Bora

+1

你應該停止使用'mysql_ *'函數。它們已被棄用,而是使用'mysqli_ *'或'PDO'。 – Foobar

回答

1

您目前使用的結構如下:

if (condition) { 

} 
if (condition) { 

} 
else (condition) { 

} 

更改結構:

if (condition) { 

} 
elseif (condition) { 

} 
else (condition) { 

} 

這樣一來,elseif聲明將只得到if語句計算爲FALSE第一,如果執行。

此外,在您的preg_match聲明中,您正在使用變量$email_address,這個變量在任何地方都沒有定義,據我所見。

將其更改爲$email

if (!preg_match(
    "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
    $email)) 

希望這有助於!

+0

感謝您提供清晰,簡單的答案。這個竅門! – no0ne

+0

@ThomasBLund:不客氣! :) –

-1

只是

elseif (!preg_match(

然後只顯示該錯誤的一個替代

if (!preg_match(

和的preg_match是第一次運行時,$ email是不是空的。

0

怎麼樣使用這種方式(沒有檢查正則表達式):

if(empty($email)){ 
    echo "Hmm, you did not anything.."; 
} 
else{ 
    if (!preg_match(
    "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
    $email_address)){ 
     echo "This email not valid"; 
    } 
    else{ 
     @mysql_query("INSERT INTO newsletters SET email='$email'"); 
     echo "Thanks you"; 
    } 
} 

它首先檢查電子郵件插入這樣一來,只要是真的正則表達式檢查它。如果這是準備好的查詢發送到MySQL。