2011-04-03 128 views
1

我正在嘗試使用php/sql創建一個非常原始的搜索功能。 基本上,我使用GET方法在幾個領域提交表單查詢中/search.php.使用GET方法發送空數據

所以查詢將在下面的形式被髮送:

clothes.php?type=sometype&color=somecolor&mat=somemat&pat=somepattern&uprc=price&brand=brand 

不過,我照本宣科clothes.php這樣它所有的字段不必填寫一個成功的查詢。

clothes.php?type=sometype將返回指定類型的衣服。

對於search.php中的所有字段,我使用(select)和(option)列出每個字段下的可用選項。

問題是,在/search.php,我想阻止search.php發送表單數據,如果一個特定的字段爲空。

我試着創建<select name="type"><option value = ""></option>...</select>作爲每個下拉框中的第一個選項,但它仍然在該字段下發送一些數據。

是否有解決方法?

+1

http://stackoverflow.com/editing-help – deceze 2011-04-03 07:28:36

+0

什麼是該字段發送的「一些數據」?有個例子嗎? – 2011-04-03 07:29:43

+0

通過讓'search.php'忽略任何空字符串值可以更好地解決這個問題。沒有什麼可靠的,你可以做,以防止提交空字符串。 – Quentin 2011-04-03 07:34:27

回答

1
  1. HTML表單將發送填充或設置的任何內容。空值與其他值一樣好。

  2. 你可以使用javascript來檢查是否有一些字段沒有填充。

  3. 但是,您無法阻止用戶的瀏覽器發送任何數據。這是他們的瀏覽器,他們可以根據需要發送任何內容。例如通過禁用JS。

  4. 您不能阻止用戶發送無效數據,但您可以和應該在服務器端驗證它。在clothes.php您可以檢查空字段,並顯示一些錯誤,而不是搜索結果

0

我不認爲有一種方法,以防止HTML表單從發送空數據項空白表單域的短將提交事件掛鉤在javascript中並手動創建表單帖子。

1

使用純HTML可以做的最好的事情是提交空值的空字符串(""),例如, foo=&bar=baznull是不可能的,HTTP沒有null值的概念。如果你想從這個查詢字符串中刪除空的foo,你需要在提交表單時在客戶端上使用Javascript。因爲總是有沒有Javascript的客戶端,所以總是會有你收到一個空的foo的情況,所以你需要爲它做好準備。

如果你堅持使用「乾淨」的URL,無論如何,你可以在服務器上重定向並過濾掉空的參數。例如。通過POST提交搜索表單,然後用非空參數構建一個GET URL並重定向到它。儘管如此,這會產生額外HTTP請求的開銷。

0

您無法阻止用戶向您發送數據,尤其是您的示例中不包含GET數據。

您可以嘗試在您的提交按鈕或其他東西中添加onclick處理程序,但您的用戶可能已禁用JavaScript。即使他們啓用了JavaScript,也沒有任何東西阻止某人前往他們的地址欄並手動輸入www.example.com/file.php?var=value。地獄,即使您將方法從GET更改爲POST,仍有仍然方式來提交數據而不使用您的頁面。

你唯一能做的就是檢查該字段是否有值,如果有,請將用戶重定向回搜索頁面,並告知他們再次嘗試。

if (!isset($_GET['field']) || empty($_GET['field])) { 
    // regenerate page with error 
} 

您的標題也不準確。您永遠不會從表單中獲取空數據。就PHP而言,無論是包含變量還是不包含變量。如果包含它,那麼最糟糕的可能是空白。例如www.example.com/file.php?field會導致$_GET['field']值爲空,而不爲空。

有一些類型 - 如單選按鈕和複選框 - 如果它們爲空將不會發送值,但PHP不會爲它們創建$_GET值。他們只會在isset()檢查中失敗,而不會產生null值。

0

你將不得不使用PHP條件語句是這樣的:

if($_GET['field_name'] != NULL) { 
    // do sql stuff here 
} 
else { 
    echo "Please select a field"; 
} 

我哪裏有「空」就可以進入默認選項值的選擇菜單有。

+0

不是POST,而是GET – 2011-04-03 08:03:46