2010-06-19 67 views
0

我有一個表單將數據發送到MySQL數據庫,我想確保幾個字段不留空白。我想我可以弄清楚如何用JavaScript做到這一點,但我的問題是我應該?當我創建了我正在使用的數據庫表時,我創建了我想確保填充的字段NOT NULL,以確保當它們留空時我至少會得到一個MySQL錯誤(我也意識到「空」和NULL是不一樣的)。檢查提交表單之前是否填寫了某些字段

我的問題是,我應該在提交表單之前檢查字段是否爲空/空,或者我應該讓用戶嘗試提交表單,然後根據我的糾正措施來處理每個MySQL錯誤回來?

第二個問題,如果我做第一個(使用JavaScript進行檢查)在我的數據庫中創建一些字段NULL和一些字段NOT NULL,如果要使用JavaScript捕捉所有可能的「錯誤」提交的表單到達數據庫之前?

回答

4

在將數據發送到服務器之前,您應該在客戶端進行驗證。這樣可以讓用戶在向服務器提交數據之前突出顯示錯誤。

但你也應該在服務器端進行驗證。有人可能會將無效數據惡意發送到服務器,繞過客戶端驗證。

客戶端驗證有助於確保用戶在未正確填寫表單時獲得一些有用的反饋。但僅僅依靠驗證是不安全的。確保服務器不允許無效數據。另外,如果您允許通過某種API訪問數據,您需要服務器端驗證以防止無效數據進入數據庫。

+0

感謝您的信息。我會做一些關於最佳表單驗證實踐的閱讀,以確保我能夠正確地得到一切。 – ubiquibacon 2010-06-19 19:40:12

0

你不應該搞這樣的後端錯誤。確保您在客戶端使用JavaScript進行驗證。不要說忽略後端驗證和/或sanatization。

0

如果您不打算允許用戶提交帶有空字段的表單,那麼您是正確的,沒有意義允許這些字段在數據庫中爲NULL。

我會說,你應該使用Javascript來驗證是一個可用性問題(它保存用戶等待頁面重新加載,發現他們沒有進入必填字段)。但是,這需要通過服務器端驗證和禁用JavaScript的用戶的適當錯誤消息來備份。

+0

聽起來不錯,我只是做一個通用的捕獲所有的錯誤頁面,「以防萬一」。如果我正確理解那個頁面很可能永遠不會被任何人看到。我還想補充一點,這是針對小型企業的,只能在那裏使用Intranet,所以我知道他們將擁有JavaScript,因爲我維護了服務器及其工作站。 – ubiquibacon 2010-06-19 19:14:16

2

我的問題是,我應該檢查 如果字段爲空/空與 JavaScript是 提交表單之前,還是應該讓用戶 嘗試提交表單,然後 基地我糾正行動上什麼 每一個MySQL錯誤我回來了?

做到這兩個,用javascript檢查,但checking with PHP is a must。如果你想要的話,不要插入空值。

+0

感謝您的鏈接,那裏的JavaScript將幫助我獲得正確的東西。 – ubiquibacon 2010-06-19 19:26:20

1

您應該總是在後端執行檢查,無論是否存在JavaScript檢查。如果有人禁用了JavaScript,該怎麼辦?如果用戶具有惡意並且使用Firebug等危害JavaScript驗證和安全性,該怎麼辦?這不僅是可能的,而且很容易做到。始終檢查後端。

我想說,首先在PHP中進行檢查 - 如果任何字段爲空,請將它們帶回表單並使其填充。在PHP中工作之後,添加JavaScript驗證以使表單更加可用。

0

您的數據庫應該始終強制您對數據結構的假設。它使你無需做任何事情,但它是防止數據庫腐敗的最後一道防線。

永遠不要假設客戶端流程會處理好您形成的數據。你的服務器端腳本應該考慮任何來自瀏覽器的東西,它們都是從一個死馬的Pony Express車手的馬鞍袋裏出來的,他的馬把他從邊界拖出來。

檢查雙方。設置你的數據庫列NOT NULL沒有成本。 Javascript使用客戶端的資源,所以它也沒有花費任何代價,並且它不需要與服務器進行通信即可爲用戶提供即時反饋。

您可以通過檢查它的value屬性不是空字符串來檢查字段是否有數據。例如:

if (formElement.attachEvent) { //handle IE 
    formElement.attachEvent('onsubmit', function() { 
     if (window.event.sourceElement.someFormElement.value === '') { 
      // outline empty form in red or otherwise alert user of bad input 
      return false; 
     } else { 
      // check other fields that can't be empty 
     } 
    } 
} else { 
    formElement.addEventListener('submit', function() { 
     if (this.someFormElement.value === '') { 
      // outline empty form in red or otherwise alert user of bad input 
      return false; 
     } else { 
      // check other fields that can't be empty 
     } 
    } 
} 

從偶處理程序返回false會阻止提交表單。

+0

非常好!也感謝代碼。我想你的數據庫有額外的防禦是正確的,它不會傷害任何東西,但它可以在未來讓我頭痛。 – ubiquibacon 2010-06-19 19:45:48

0

我是SQL的新手,所以我一直在閱讀如何破壞和破解DB。可怕!對我而言,底線是:在提交任何SQL查詢之前,始終驗證服務器上的所有內容。 Ref:http://www.securitydocs.com/library/3587

我也通過JS驗證了很多東西來保持響應,就像其他許多人之前提到的一樣。

,我想了很多,並試圖遵循一個規則:用白名單驗證,對事物的集合允許。不要驗證黑名單,禁止的事情。爲什麼?因爲我真的不能確定黑名單中是否包含所有非法的內容。我的粗心大意和黑客創造力的持續壓力確保將會有成百上千的非法移民。

確定可以允許的事情要容易得多:這些傢伙相對較少。

相關問題