[英]Check to see if certain fields have been filled out before a form is submitted
我有一個將數據發送到MySQL數據庫的表單,並且我想確保其中的幾個字段不為空。 我想我可以弄清楚如何使用JavaScript做到這一點,但是我的問題是嗎? 當我制作要使用的數據庫表時,我要確保填寫的字段為NOT NULL
以確保當它們保留為空時至少會出現MySQL錯誤(我也意識到“ empty”和NULL
不是同一回事)。
我的問題是,在提交表單之前,我應該使用JavaScript檢查字段是否為空/空,還是應該讓用戶嘗試提交表單,然后根據我得到的每個MySQL錯誤采取的糾正措施?
還有第二個問題,如果我做的是第一個問題(使用JavaScript檢查),那么在提交之前使用JavaScript捕獲所有可能的“錯誤”時,在數據庫中創建一些字段NULL
和一些字段NOT NULL
的意義何在?表格打數據庫?
在將數據發送到服務器之前,您應該在客戶端進行驗證。 這將使您可以在用戶將數據提交給服務器之前向用戶突出顯示錯誤。
但是,您還應該在服務器端進行驗證。 有人可能會繞過客戶端驗證,將惡意數據惡意發送到您的服務器。
客戶端驗證有助於確保用戶在未正確填寫表單時得到一些有用的反饋。 但是僅依靠該驗證是不安全的。 確保服務器不允許無效數據。
另外,如果您曾經允許通過某種API訪問數據,則需要服務器端驗證以防止無效數據進入數據庫。
我的問題是,在提交表單之前,我應該使用JavaScript檢查字段是否為空/空,還是應該讓用戶嘗試提交表單,然后根據我得到的每個MySQL錯誤采取的糾正措施?
兩者都使用javascript進行檢查,但是必須使用PHP進行檢查 。 如果需要,請勿插入空值。
無論是否進行JavaScript檢查,您都應該始終在后端進行檢查。 如果有人禁用了JavaScript怎么辦? 如果用戶惡意並且使用Firebug之類的東西來破壞JavaScript驗證和安全性怎么辦? 這不僅可能,而且非常容易做到。 始終檢查后端。
我會說先在PHP中進行檢查-如果有任何字段為空,請將它們帶回到表單中,並使其重新填寫。 在PHP中運行后,添加JavaScript驗證以使該表單更可用。
您不應該對這樣的后端錯誤感到困惑。 確保使用JavaScript在客戶端進行驗證。 更不用說忽略后端驗證和/或清理。
如果您不希望用戶提交帶有空字段的表單,那么您是正確的,在數據庫中沒有必要讓這些字段為NULL。
我要說的是,您應該使用Javascript來驗證是否存在可用性問題(它可以節省等待頁面重新加載以發現他們尚未輸入必填字段的用戶)。 但是,這需要通過服務器端驗證和針對禁用了javascript的用戶的適當錯誤消息進行備份。
您的數據庫應始終執行關於數據結構的假設。 它不需要您花費任何精力,但是它是防止數據庫損壞的最后一道防線。
永遠不要假設客戶端進程會處理您格式正確的數據。 您的服務器端腳本應該將來自瀏覽器的任何內容視為已死的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將阻止提交表單。
我是SQL的新手,所以我一直在閱讀有關銷毀和侵入數據庫的方法。 嚇死我了 對於我來說,最重要的是:在提交任何SQL查詢之前,始終驗證服務器上的所有內容。 參考: http : //www.securitydocs.com/library/3587
我還通過JS驗證了很多東西來保持響應能力,就像其他很多人之前提到的那樣。
我非常喜歡並嘗試遵循的一條規則:通過白名單進行驗證,以允許收集事物。 不要用黑名單來驗證,這是不允許的事情。 為什么? 因為我真的不能確定黑名單中是否包含所有違法的東西。 我的粗心和黑客發明的不斷壓力確保將有成千上萬的違法者。
確定允許的事情要容易得多:這些家伙相對很少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.