【问题标题】:Multiple submit buttons php different actions多个提交按钮php不同的动作
【发布时间】:2012-05-28 07:57:18
【问题描述】:

我有一个网站,我希望有 2 个单独的提交按钮,其中一个将输入数据并对其进行一些计算以显示在同一屏幕上。我已经成功地使用了:

<form id="form1" name="form1" method="post" onsubmit="" onreset="" action="programname.php">
<input type="submit" name="calc" value="Find Angle">

然后我使用:

if (!isset($_POST['submit'])){
Do actions, display calculations}

现在我想要第二个提交按钮,它仍然会抓取他们输入的数据,但随后会转到不同的地址。有没有优雅的方法来做到这一点?

【问题讨论】:

    标签: php submit action


    【解决方案1】:

    您可以将onclick 方法添加到新的提交按钮,该方法将更改表单的操作,然后提交。

    <script type="text/javascript">
      function submitForm(action) {
        var form = document.getElementById('form1');
        form.action = action;
        form.submit();
      }
    </script>
    
    ...
    
    <form id="form1">
      <!-- ... -->
      <input type="button" onclick="submitForm('page1.php')" value="submit 1" />
      <input type="button" onclick="submitForm('page2.php')" value="submit 2" />
    </form>
    

    【讨论】:

    • 有效!非常感谢!我花了一个小时查看与我的略有不同的案例,但无法弄清楚。你在 3 秒内搞定了 :-) 我还有很多东西要学..
    • 如果用户只是按 Enter 键而不点击任何提交按钮怎么办?
    • @IstiaqueAhmed:除非您更改它,否则它将使用默认情况下的任何操作提交表单。如果这不是您想要的,您可以通过 &lt;form&gt; 元素上的 onsubmit 侦听器设置您想要的任何行为。
    • 默认提交会得到第一个按钮,所以如果用户打算使用第二个按钮,那是不可能的。如何使用onsubmit 解决这种情况?
    • @IstiaqueAhmed:听起来你在使用&lt;input type="submit"&gt;。这个答案使用&lt;input type="button"&gt;。有区别。使用表单中的常规按钮,当用户按 Enter 时不使用任何按钮。
    【解决方案2】:

    您可以通过在按钮属性中使用 formaction="page1.php" 来更改表单操作。

    <form id="form1" name="form1" method="post" onsubmit="" onreset="" action="programname.php">
        <input type="submit" name="calc" value="Find Angle">
    
        <input type="button" type="submit" formaction="page1.php">Action 0</button>
        <input type="button" type="submit" formaction="page2.php">Action 1</button>
    </form>
    

    注意:Internet Explorer 9 及更早版本不支持 button 标签的 formaction 属性。

    【讨论】:

    • HTML5标准中确实有formaction这样的属性。
    【解决方案3】:

    处理多个提交按钮的最佳方法是在动作脚本中使用 switch case

    <form action="demo_form.php" method="get">
    
        Choose your favorite subject:
    
        <button name="subject" type="submit" value="html">HTML</button>
        <button name="subject" type="submit" value="css">CSS</button>
        <button name="subject" type="submit" value="javascript">Java Script</button>
        <button name="subject" type="submit" value="jquery">jQuery</button>
    
    </form>
    

    动作/服务器端脚本:

    demo_form.php

    <?php
    
    switch($_REQUEST['subject']) {
    
        case 'html': //action for html here
                    break;
    
        case 'css': //action for css here
                    break;
    
        case 'javascript': //action for javascript here
                            break;
    
        case 'jquery': //action for jquery here
                        break;
    }
    
    ?>
    

    参考:W3Schools

    【讨论】:

    • 我知道这个问题/答案有点陈旧,但请注意:此解决方案不会按要求转到其他地址。
    【解决方案4】:

    另一种方法是您可以创建和使用一些会话变量来轻松实现它。

    例如$_SESSION['验证']。

    按钮的 HTML 和 PHP 代码

    <button type="submit" id="first_submit" style="<?php echo isset($_SESSION['validate'])?'display:none':'';?>">first submit</button>
    <button type="submit" id="second_submit" style="<?php echo isset($_SESSION['validate'])?'':'display:none';?>">second submit</button>
    

    jquery 和 ajax 脚本

    <script>
        $(document).ready(function(){
    
            $("#form").on('submit', function(e){
                e.preventDefault();
                $.ajax({
                    type: 'POST',
                    url: 'handler-file.php',
                    data:  new FormData(this),
                    dataType: "json",
                    enctype: 'multipart/form-data',
                    contentType: false,
                    cache: false,
                    processData:false,
                    error:function(error){
                        //your required code or alert
                        alert(error.responseText);
                    },
                    success: function(response){
                        if(response.status=='1')
                        {
                            //your required code or alert
                            $('#first_submit').hide();
                            $('#second_submit').show();
                        }
                        else if(response.status=='2')
                        {
                            //your required code or alert
                            $('#first_submit').show();
                            $('#second_submit').hide();
                        }
                        else
                        {
                            //your required code or alert
                        }
                    }
                });
            });
    
        });
        </script>
    

    处理 PHP 文件

    <?php
    session_start();
    
    $result['status']='0';
    $result['error']='';
    
    if(!isset($_SESSION['validate']))
    {
        if(!isset($_FILES['file'])) 
        {
            $result['error'].='[Er-02 file missing!]';
        }
        else
        {
            //your other code
            $_SESSION['validate'] = true;
            $result['status']='1';
        }
    }
    else if($_SESSION['validate']==true)
    {
        if(!isset($_FILES['file'])) 
        {
            $result['error'].='[Er-03 Validation file missing!]';
        }
        else
        {
            //your other code
            unset($_SESSION['validate']);
            $result['status']='2';
        }
    }
    else
    {
        $result['error'].='[Er-01 Invalid source!]';
    }
    echo json_encode($result); 
    

    ?>

    这可能不是最佳或有效的解决方案。我的经验水平不是太多,所以我想出了这个解决方案,在所有可用的解决方案之后,它最符合我的目的,但有它们的局限性。这不是任何地方都想在这里写的。

    注意:您可能会注意到它包括其他一些部分,例如演示文稿、脚本和后端文件之间的响应、成功和错误处理。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2018-11-24
      • 2012-09-20
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多