使用 PHP 提交带有三个按钮的相同表单


Submit the same form with three buttons using PHP

我在提交三次相同的表格时遇到问题,但操作不同。请参阅以下代码:

if(isset($_POST['btn_submit'])){
     // Some code here
}
if(isset($_POST['btn_sub'])){
    // Some other code here
}

我的HTML代码如下:

<form name="form" id="form" action="" method="" enctype="multipart/form-data">
  <table>
    <tr>
        <!-- Some input fields -->
        <input type="submit" name="btn_submit" id="btn_submit" value="Submit" />
    </tr>
    <tr>
        <!-- Some more input fields -->
        <input type="submit" name="btn_sub" id="btn_sub" value="Submit" />
    </tr>
  </table>
</form>

现在,当我单击第一个提交按钮时,我在 POST 数组中获得了已发布的值(按钮名称即 $_POST['btn_submit']=> Submit ),但是当我单击第二个按钮时,我也得到了 POST 数组中除按钮名称(即 $_POST['btn_sub'] => Submit 之外的所有发布值)。

在第二个按钮上,单击"我想更新一些数据库记录,但由于其条件if(isset($_POST['btn_sub']))不为真,因此它不会进入此条件,并且我的数据库记录未更新。显示数组元素的其余部分,但不显示提交按钮。

此功能在我的本地服务器上工作,但在将其上传到实时服务器后它不起作用。

为什么会发生这种情况,我该如何解决?

试试这段代码

<form name="form" id="form" action="" method="POST" enctype="multipart/form-data">
      <table>
      <tr>
          <!-- Some input fields -->
          <input type="submit" name="btn_submit" id="btn_submit" value="Submit2" />
      </tr>
      <tr>
          <!-- Some more input fields -->
          <input type="submit" name="btn_sub" id="btn_sub" value="Submit1" />
      </tr>
      </table>
    </form>

对提交按钮使用相同的名称:

<form name="form" id="form" action="" method="POST" enctype="multipart/form-data">
  <table>
    <tr>
      <!-- Common input fields -->
      <input type="text" name="commontxt" id="commontxt" value="common text field" />
    </tr>
    <tr>
      <!-- Some input fields -->
      <input type="submit" name="btn_submit" id="btn_submit1" value="Submit 1" />
    </tr>
    <tr>
      <!-- Some more input fields -->
      <input type="submit" name="btn_submit" id="btn_submit2" value="Submit 2" />
    </tr>
  </table>
</form>

检查以这种方式单击哪个提交按钮:

if (!empty( $_POST))
{
  if ($_POST['btn_submit'] == 'Submit 1') {
    // Action for Submit 1 here
    $commontxt = $_POST['commontxt'];
    echo 'Submit 1<br/>';
    echo $commontxt;
  } else if ($_POST['btn_submit'] == 'Submit 2') {
    // Action for Submit 2 here
    $commontxt = $_POST['commontxt'];
    echo 'Submit 2<br/>';
    echo $commontxt;
  }
}

您可以在此处遵循许多方法:

方法1:

如果您可以在提交时更改页面,这意味着单击提交按钮,请求将转到两个不同的页面。有一种新的HTML5方法可以解决这个问题:

<button type="submit" formaction="/action_one">SUBMIT</button>
<button type="submit" formaction="/action_two">SUBMIT</button>

显然这在Internet Explorer 9及更早版本中不起作用,但对于其他浏览器,您应该没问题(请参阅:w3schools.com,HTML <按钮>formaction 属性)。

方法2

JavaScript 方法:

<input type="submit" value="dosomething" onclick="javascript:
form.action='actionurl1';"/>
<input type="submit" value="dosomethingelse" onclick="javascript:
form.action='actionurl2';"/>

方法3

如果要在提交时保持相同的页面:

<input type="submit" name="row[1]" value="Submit">
<input type="submit" name="row[2]" value="Submit">

然后在服务器端(在我的示例中为 PHP),您可以将"row"读取为数组以获取索引:

$index = key($_POST['row']);

$_POST['row'] 将是一个只有一个元素的数组,格式为 index => 值(例如:"2" => 'something")。

在此处阅读有关索引的信息

根据OP方法的新答案

我已经尝试了您的表单结构,并且完美地获得了第二个按钮名称。

<?php
if(isset($_POST['btn_submit']) && empty($_POST['btn_sub']) ){
     echo "First Submit-----------<br/>";
     print_r($_POST);
}
else if(isset($_POST['btn_sub']) && empty($_POST['btn_submit'])){
    echo "Second Submit-----------<br/>";
    print_r($_POST);
}

?>

.HTML

<form name="form" id="form" action="" method="post" enctype="multipart/form-data">
  <table>
  <tr>
      <input type="text" value="Form1" name="form1_input" />
      <input type="submit" name="btn_submit" id="btn_submit" value="Submit" />
  </tr>
  <tr>
      <input type="text" value="Form2" name="form2_input" />
      <input type="submit" name="btn_sub" id="btn_sub" value="Submit" />
  </tr>
  </table>
</form>

检查一下,并确认您是否也没有在页面上重复相同的名称......

我在第二次提交时的输出:

Second Submit-----------
Array ([form1_input] => Form1 [form2_input] => Form2 [btn_sub] => Submit)