2010-04-08 143 views
1

每次我嘗試提交表單時,我並沒有在年份字段中輸入任何內容,我得到Incorrect year!我怎樣才能繼續提交表單而無需輸入一年。換句話說,將年份字段留空並且不會收到警告?PHP表單驗證提交問題

這裏是PHP代碼。

if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} else { 
    $year = NULL; 
} 

if($year == NULL) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 
+0

您需要檢查'$ year === NULL'。 PHP可以並將默默地將空值轉換爲空字符串,所以空白的$ year可以等於null。 ===(內容和類型匹配)比較運算符解決了這個問題。 – 2010-04-08 21:55:26

+0

@Marc乙,我試過這個,但由於某種原因,我沒有得到它的工作。 – TaG 2010-04-08 21:57:41

回答

0
if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} else if(empty($_POST['year'])){ 
    $year = ''; 
} else { 
    $year = null; 
} 

if($year == NULL) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 

也許我誤解,但是這聽起來像你想要什麼。

+0

我仍然收到錯誤的一年。 – TaG 2010-04-08 21:43:32

+1

如果$ year設置爲空字符串,那麼$ year == null將計算爲true。將$ year == null更改爲$ year === null – webbiedave 2010-04-08 21:47:42

1
if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} else { 
    $year = false; 
} 

if ($year === false) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 

或者(如果您沒有設置YEAR別的地方)

if(preg_match('/^\d{4,}$/', $_POST['year'])) { 
    $year = mysqli_real_escape_string($mysqli, $_POST['year']); 
} 

if (!isset($year)) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 
+0

您的第二個示例一些有用但知道它允許輸入一個字符的示例。 – TaG 2010-04-08 21:48:07

+0

問題出在你的preg_match而不是我所做的改變。 – 2010-04-08 21:51:37

+0

如何?請解釋。 – TaG 2010-04-08 21:53:21

-1

嘿,你可以只取這部分出來,它會採取的回聲出,讓您與字段爲空提交

if($year == NULL) { 
    echo '<p class="error">Incorrect year!</p>'; 
} else { 
    //do something 
} 

我不會建議讓它變成空白的數據庫。也許你可以抓住服務器上的默認日期或默認值,這意味着用戶沒有填寫它。這會消除錯誤,但仍會在數據庫字段中留下一些內容。

+0

你完全誤解了驗證的概念。您不要通過完全刪除代碼來解決問題。 – mattbasta 2010-04-11 14:37:47