2013-03-14 102 views
0

我有一個HTML表單,指向一個PHP腳本,該腳本搜索我的MySQL數據庫。如果用戶不在表單中輸入任何值,我想向他們返回錯誤消息。我已經嘗試了下面的代碼,但是現在發生的是,即使我已經將值輸入到表單字段中,它也會返回下面的錯誤消息。 你能指出什麼是錯的,或者甚至建議一個替代方案,如果下面的命令不是最好的。防止PHP搜索表單中的空白字段

if ($_POST['checkbox01'] == "on") 
{ 
    $result = mysql_query("SELECT * FROM colour", $connection) or die("Cannot run  query"); 
    //Search for all records 
} 

elseif (!$_POST['']) 
//Or else, if no fields are filled in... 
{ 
    die('Please complete at least one search field'); 
    //Give an error message 
} 

else 
... //Search the MySQL db using vaues entered into the form 

(我也試過......)

elseif(empty($_POST[''])) 
{ 
die('Please complete at least one search field'); 
} 
+6

[**請不要使用'mysql_ *'功能新代碼**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – j0k 2013-03-14 12:55:55

+0

其中是文本框。請粘貼表格代碼。 – 2013-03-14 13:10:02

+0

更好地實現javascript :-) .Atleast它將節省請求和響應所需的輪迴時間 – Samy 2013-03-14 13:12:11

回答

0

也許看一看this? 這是一個實時驗證,這對我的表單非常有效。

0

在一個側面說明,它可能會幫助,如果你正在檢查對複選框指定值,即:

<input type="checkbox" name="search_active" value="t" /> 

....然後用

if ($_POST['search_active'] == "t") { // box checked } else { //box not checked } 

檢查它在PHP無論如何,要檢查列,我會用強制列填充數組,然後通過POST數組檢查列是否全部存在。

...甚至更好的辦法是使用某種jQuery驗證的,這意味着你不需要甚至重新加載頁面:)

下面是一些示例代碼填充強制性列的陣列:)

$field_check = array("field1", "field2", "field3"); 
foreach ($field_check as $field) { 
    if (empty($_POST[$field])) { 
     die("Please enter a value into $field"); 
    } 
} 
// if we have got to here - continue with the search. 
mysql_query(....); 
+0

啊,謝謝你修復錯字@ PeeHaa :) – Modul8 2013-03-14 13:08:36

+0

np。雖然你不應該簡單地使用'empty()':http://codepad.viper-7.com/staVQJ – PeeHaa 2013-03-14 13:10:07

+0

那麼,它顯然取決於他期望的輸入類型 - 但如果它應該是0是文字或任何:)。這並不意味着是一個完整的100%解決方案,只是一個更好的編碼實踐的簡單演示,用於檢查多個字段的「」或「」或類似的無用數據。 :) – Modul8 2013-03-14 13:12:26

-1

像這樣的事情應該更容易實現在客戶端使用一些JavaScript。 jQuery有一些這方面的非常有用的方法,例如:

$('#Your_Form input').blur(function() 
{ 
    if($(this).val().length == 0) { 
     $('#warningDiv').addClass('warning'); 
    } 
    else{ 
     $('#warningDiv').removeClassClass('warning'); 
    } 
}); 

#warningDiv可能是被變成了紅色當輸入爲空一個div。您還可以在輸入按鍵/更改事件中實施類似的行爲,以定期檢查值。

如果你堅持在服務器端做到這一點,我會建議用不同的答案。

+0

如果我禁用JavaScript? – PeeHaa 2013-03-14 13:04:35

+0

自然,如果Javascript被禁用,jQuery方法不起作用。這個問題有點多餘。 – FLClover 2013-03-14 13:06:45

0

$ _POST ['']不會執行任何操作,$ _POST是從窗體發送的字段數組。例如,如果你有一個簡單的登錄表單(用戶名/密碼),$ _POST數組看起來是這樣的:

array('username' => 'value', 'password' => 'value'); 

如果你想檢查是否所有的領域都是空的,你最好在數組中運行一個循環。例如: -

foreach($_POST as $key => $value) { 
    if($value == "") { die("Please enter a value into $key") } 
} 
+0

我不擔心他們留下一些表單域爲空,只要他們提交表單時,他們已經輸入了至少1個字段的詳細信息,所以他們至少有1個值來搜索數據庫。並非每個字段都必須包含一個值。 – user2165827 2013-03-14 13:10:12

1

我覺得isset功能是你所需要的東西,我將與邏輯結合起來,以檢查所有的表單輸入字段,例如(快速哈克的例子 - 雖然不使用死一個真正的解決方案):

vfield1 = ""; 
vfield2 = ""; 
vfield3 = ""; 

if (isset($_POST['field1'])) { vfield1 = $_POST['field1']; } 
if (isset($_POST['field2'])) { vfield2 = $_POST['field2']; } 
if (isset($_POST['field3'])) { vfield3 = $_POST['field3']; } 

if (vfield1.vfield2.vfield3 == "") { 
    die('Please complete at least one search field'); 
} 
0

這也將工作:

<?php 

echo ' 
<form action="" method="post"> 
<input type="text" name="search"><input type="submit" name="submit" value="Search"> 
</form>'; 

if(isset($_POST['submit'])) { 

    // Check if NOT searchfield is emty 
    if(!$_POST['search'] == "") { 
     echo $_POST['search']; 
    } 

    else { 
     echo 'You have to search for something!'; 
    } 

} 

?>