【问题标题】:PHP doesn't process the formPHP 不处理表单
【发布时间】:2015-07-09 01:04:19
【问题描述】:

我在这里遇到了一个小问题。
我有一个带有 jQ​​uery 的表单,它在提交表单时禁用提交输入。
问题是:我使用 PHP 在单击输入提交时处理数据。但显然该按钮首先被禁用,然后PHP无法执行处理。我需要找到一种方法来防止这种情况,看看代码sn-ps:

<form class='send' action='{$_SERVER['PHP_SELF']}' method='post'>
    <!--Form data-->
    <input type='submit' name='finish' value='Send'/>
</form>

要禁用的jQuery函数:

$('.send').on('submit', function()
{
    $(this).find('input[type="submit"]').prop("disabled", true);
});

然后是要处理的PHP代码:

if(isset($_POST['finish']))
{
    //Do things
}

正如我所说,PHP 不处理表单,因为 JS 禁用了按钮以防止多次提交。如何在禁用按钮之前处理 PHP?谢谢!

【问题讨论】:

  • 我认为问题在于 PHP 脚本永远不会收到数据,因为您已禁用提交。我假设您想阻止刷新?您需要使用 AJAX。单击时,禁用该按钮。成功后,让用户再次知道/启用该按钮。
  • 禁用输入意味着它的名称/值对将不会被发送。在 php 中设置它的重要性是什么?
  • 如果它不违反您正在努力的任何规范,您可以隐藏按钮吗? $(this).find('input[type="submit"]').hide();。我知道这是无耻的q&d,(没有人学到任何东西)。但是嘿嘿
  • 你为什么只使用preventDefault(); ?即:stackoverflow.com/a/5169572/797495
  • @PedroLobito 我想禁用按钮,但在 PHP 进程之后。

标签: javascript php jquery


【解决方案1】:

您可以通过一个简单的按钮轻松解决它:更改提交按钮:

<form class='send' action='{$_SERVER['PHP_SELF']}' method='post'>
    <!--Form data-->
    <input type='button' name='finish' value='Send'/>
</form>

$('input[name="finish"]', '.send').on('click', function(){
    $(this).prop('disabled', true);
    $('.send').submit();
});

【讨论】:

    【解决方案2】:

    由于您禁用了提交按钮,它不会被发送到$_POST 变量中的服务器,因此您的代码无法正常工作,正如您所说。

    另一种方法是创建一个隐藏的 HTML 输入

    <input type="hidden" name="form">
    

    然后当您检查表单是否发送时,您将使用

    if(isset($_POST['form']))
    {
        //Do things
    }
    

    【讨论】:

    • 我知道,但是我需要在PHP进程之后禁用。
    • 你能给我们更多的信息吗?为什么需要禁用输入,你想达到什么目的?
    • 好吧,我的其余代码将无关紧要,只会使问题变得广泛。我基本上需要在禁用按钮之前处理 PHP。
    • 我的意思是为什么您需要在发送数据后禁用表单?当您发送表单时,您将被重定向到您在表单操作中指定的页面,因此在发送表单后执行任何操作都无关紧要。您始终可以使用 AJAX 发送表单而不会被重定向到另一个页面
    • 感谢您提供代码和所有信息!隐藏输入效果很好! :)
    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多