【问题标题】:Problem with validating forms with both Javascript and PHP使用 Javascript 和 PHP 验证表单的问题
【发布时间】:2011-10-04 16:12:15
【问题描述】:

好的,所以我想在使用 PHP 验证表单之前使用 Javascript 验证它。如果 Javascript 函数,我们称之为 validate(),检测到错误,我想阻止 PHP 被执行。

据我所知,只有一种方法可以让我这样做: 使用链接而不是提交按钮,如下所示:

<a href="javascript:validate()">Login </a>

这可能是函数 validate():

function validate() {
//Do all the validation
document.form_name.submit(); }

但是,这样做有一个问题:我的 PHP 脚本无法知道表单的确切提交时间。如果没有 Javascript,我会这样做:

if ($_POST[button_name]) 

不过,现在没有提交按钮,所以表达式已经过时了。

所以,总而言之,我的问题是:

如何使用 Javascript 验证表单并在出现错误时阻止执行 PHP 验证?

【问题讨论】:

    标签: php javascript forms validation


    【解决方案1】:

    你应该有一个提交按钮,这样即使没有启用js的用户仍然可以发送表单,并且它会被php验证。

    使用js可以阻止表单提交,然后检查验证,验证正确后提交。

    【讨论】:

    • 如何阻止提交?这正是我想要的。
    • js验证失败返回false。
    • 那会阻止表单提交?
    • 是的,在你的验证函数中,如果验证不正确,你必须返回false,它会阻止提交。
    【解决方案2】:

    我知道只有一种方法可以让我这样做:使用链接而不是提交按钮

    为了这个目的,表单上有一个submit 事件。您挂钩该事件,如果表单无效,则取消提交。然后你可以使用提交按钮。

    【讨论】:

    • 没错。试着把按钮放在那里。在form 标签内使用onsubmit='validate()'
    • 我打算使用它,但是一旦提交表单,我认为我不能通过 Javascript 停止 PHP 脚本。
    • 不要使用onsubmit='validate()',因为 (1) 它不返回任何内容,因此不会取消事件和 (2) 它不是 unobtrusive
    • @user805556 — 在提交事件执行完成之前不会提交表单,并且只有在事件处理程序没有取消它的情况下才会提交。
    • @user:submit 事件是客户端的。如果您取消该事件,则根本不会向服务器发送任何内容。你的 PHP 代码不会运行。
    【解决方案3】:

    除非有效,否则不要提交表单。

     function validate() {
    
         var isValid = true;
         //Do all the validation
         if(isValid)
         {
            document.form_name.submit(); 
         }
        }
    

    【讨论】:

    • 这正是我在问题中所说的,但我在上面说明了为什么这对我不起作用。
    • 提交按钮所做的只是向服务器发送一个带有提交按钮名称和值的变量。同样可以用 形式的隐藏输入来完成。上面的代码只有在验证通过时才调用表单提交。这与在提交按钮操作上返回 false 相同。如果您有隐藏的输入并查找您知道的以验证请求。抱歉,如果这仍然不是您要查找的内容,我没有很好地理解这个问题。
    • 这是我所要求的,我将进一步研究隐藏的输入。我以前听说过它们,但直到现在才发现它们存在的原因。
    • 隐藏输入是将其他参数传递给服务器的方法,而不是将它们全部放在表单的地址中。当您没有所需的表单中包含的所有信息时,它们很有用。
    【解决方案4】:

    使用 onsubmit="return validate()" 验证 html 表单或使用 submit() 提交表单;一个javascript方法

    【讨论】:

      猜你喜欢
      • 2015-07-18
      • 1970-01-01
      • 2011-02-17
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多