在提交表单之前,检查是否已填写某些字段

时间:2010-06-19 19:04:44

标签: php javascript mysql forms

我有一个表单将数据发送到MySQL数据库,我想确保几个字段不留空。我想我可以弄清楚如何用JavaScript做到这一点,但我的问题是我应该吗?当我创建我正在使用的数据库表时,我创建了我想要确保填写NOT NULL的字段,以确保在空闲时我至少会收到MySQL错误(我也意识到“空“和NULL不是一回事。”

我的问题是,我应该在提交表单之前检查字段是否为空/使用JavaScript,或者我应该让用户尝试提交表单,然后根据我得到的每个MySQL错误进行纠正操作回来?

第二个问题,如果我第一个问题(使用JavaScript检查)如果我要捕获所有字段,那么在我的数据库中创建一些字段NULL和一些字段NOT NULL的重点是什么在提交的表单到达数据库之前,JavaScript可能出现“错误”?

7 个答案:

答案 0 :(得分:4)

在将数据发送到服务器之前,您应该在客户端进行验证。这将允许您在用户将数据提交到服务器之前突出显示错误。

但是你也应该在服务器端进行验证。有人可能会绕过客户端验证,恶意将无效数据发送到您的服务器。

客户端验证有助于确保用户在未正确填写表单时获得一些有用的反馈。但仅依靠验证是不安全的。确保服务器不允许无效数据。

此外,如果您允许通过某种API访问数据,则需要服务器端验证以防止无效数据进入数据库。

答案 1 :(得分:2)

  

我的问题是,我应该检查一下   如果字段为空/ null   表单之前的JavaScript   提交,或者我应该让用户   尝试提交表格然后   我的纠正措施基于什么   我回来的每一个MySQL错误?

同时执行这两项操作,请使用javascript但checking with PHP is a must进行检查。如果需要,请不要插入空值。

答案 2 :(得分:1)

无论是否有JavaScript检查,您都应该始终对后端进行检查。如果某人禁用了JavaScript,该怎么办?如果用户是恶意的并使用类似Firebug的东西来破坏您的JavaScript验证和安全性,该怎么办?它不仅可行,而且非常容易。务必检查后端。

我想先用PHP进行检查 - 如果有任何字段为空,请将它们带回表单并让它们填回。在PHP中运行后,添加JavaScript验证以使表单更有用。

答案 3 :(得分:0)

你不应该像这样搞乱这样的后端错误。确保您在客户端使用JavaScript进行验证。不是说忽略后端验证和/或是否进行了整理。

答案 4 :(得分:0)

如果您不允许用户提交带有空字段的表单,那么您是正确的,没有必要在数据库中允许这些字段为NULL。

我想说你应该使用Javascript来验证可用性问题(它可以节省用户等待页面重新加载以发现他们没有输入必填字段)。但是,这需要通过服务器端验证和适用于禁用javascript的用户的错误消息进行备份。

答案 5 :(得分:0)

您的数据库应始终强制执行有关数据结构的假设。它无需任何成本,但它可以作为防止数据库损坏的最后一道防线。

永远不要假设客户端进程会为您提供格式良好的数据。你的服务器端脚本应该考虑来自浏览器的任何内容,因为它已经从一个死马驹快车骑士的马鞍包中出来,他的马将他从边境拖进来。

检查双方。设置db列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
        }
    }
}

从even处理程序返回false会阻止提交表单。

答案 6 :(得分:0)

我是SQL的新手,所以我一直在阅读破坏和入侵数据库的方法。可怕!对我来说,底线是:在提交任何SQL查询之前,始终验证服务器上的所有内容。参考:http://www.securitydocs.com/library/3587

我还通过JS验证了很多东西,以保持响应能力,正如许多其他人之前提到的那样。

我非常喜欢并尝试遵循的规则:使用 白名单 进行验证,这是允许的事物集合。不要使用黑名单验证,不允许的事情。为什么?因为我真的无法确定黑名单中包含的所有违法信息。我的疏忽和黑客创造力的持续压力确保将有数百或数千名非法移民。

确定允许的事情要容易得多:这些家伙相对较少。