表单发布时发送提交按钮的值

Posted

技术标签:

【中文标题】表单发布时发送提交按钮的值【英文标题】:Send value of submit button when form gets posted 【发布时间】:2014-04-30 01:14:09 【问题描述】:

我有一个名称列表和一些带有产品名称的按钮。单击其中一个按钮时,列表的信息将发送到 php 脚本,但我无法点击提交按钮来发送其值。它是如何完成的? 我将我的代码归结为以下内容:

发送页面:

<html>
<form action="buy.php" method="post">
    <select name="name">
        <option>John</option>
        <option>Henry</option>
    <select>
    <input id='submit' type='submit' name = 'Tea'    value = 'Tea'>
    <input id='submit' type='submit' name = 'Coffee' value = 'Coffee'>
</form>
</html>

收货页面:buy.php

<?php
    $name = $_POST['name'];
    $purchase = $_POST['submit'];
    //here some database magic happens
?>

除了发送提交按钮值之外的一切都完美无缺。

【问题讨论】:

Use checkbox instead! 按钮名称未提交,因此可能未设置 php $_POST['submit'] 值。如isset($_POST['submit']) 计算结果为假。 id="submit" id 具有唯一值,但在您的情况下,您复制 id="submit" 两次 robbmj 的评论确实解决了它,但它现在正在工作。我会投票赞成,这样就可以了;) 我也认为name = 'tea' 的语法不正确。试试不带空格的name='tea' 【参考方案1】:

按钮名称未提交,因此未设置 php $_POST['submit'] 值。如isset($_POST['submit']) 计算结果为假。

<html>
<form action="" method="post">
    <input type="hidden" name="action" value="submit" />
    <select name="name">
        <option>John</option>
        <option>Henry</option>
    <select>
<!-- 
make sure all html elements that have an ID are unique and name the buttons submit 
-->
    <input id="tea-submit" type="submit" name="submit" value="Tea">
    <input id="coffee-submit" type="submit" name="submit" value="Coffee">
</form>
</html>

<?php
if (isset($_POST['action'])) 
    echo '<br />The ' . $_POST['submit'] . ' submit button was pressed<br />';

?>

【讨论】:

我已经尝试使用按钮名称 btn_createbtn_update,但我无法在 $_POST 中获取它们的值。可能还缺少其他东西吗? @nclsvh 是你的表单方法post?如果没有,它不会出现在 $_POST 集合中。 是的,IIRC 就是问题所在。感谢您的回答【参考方案2】:

改用这个:

<input id='tea-submit' type='submit' name = 'submit'    value = 'Tea'>
<input id='coffee-submit' type='submit' name = 'submit' value = 'Coffee'>

【讨论】:

啊,解决了。小错误是最难解决的 x) 试图让 Perl CGI 接收提交。 Name 参数使它开始显示。感谢您朝着正确的方向前进! 可能不应该给他们完全相同的 id - ID 应该是唯一的。它们可以有不同的 ID,但名称仍然相同。【参考方案3】:

最初的帖子提到了按钮。你也可以用按钮替换输入标签。

<button type="submit" name="product" value="Tea">Tea</button>
<button type="submit" name="product" value="Coffee">Coffee</button>

提交表单时需要namevalue 属性来提交值(在这种情况下不需要id 属性)。属性type=submit 指定单击此按钮会导致提交表单。

当服务器处理提交的表单时,$_POST['product'] 将包含值“Tea”或“Coffee”,具体取决于单击的按钮。

如果您愿意,您还可以要求用户在提交表单之前进行确认(例如,在您实现删除按钮时很有用)。

<button type="submit" name="product" value="Tea" onclick="return confirm('Are you sure you want tea?');">Tea</button>
<button type="submit" name="product" value="Coffee" onclick="return confirm('Are you sure you want coffee?');">Coffee</button>

【讨论】:

【参考方案4】:

首先,使用相同的 ID 两次并不是一个好主意。 ID 应该是唯一的,如果您需要设置元素的样式,您应该使用一个类来应用 CSS。

最后,您将提交按钮的名称定义为 Tea and Coffee,但在您的 PHP 中您使用提交作为索引。例如,您的索引应该是 $_POST['Tea'] 。这将需要您检查它是否被设置,因为它只发送一个,您可以使用 isset() 来做到这一点。

还是买吧,user4035 抢先一步,他的代码会为你“修复”这个问题。

【讨论】:

如果 OP 通过 W3C Validator 运行他的页面,它会告诉他重复的 ID 无效。 OP 的另一个提示:如果您尝试在 php 中调试表单发布/获取数据,您可以在表单调用的页面上执行以下操作:echo '
 '; var_dump($_POST);回声'
';它将清楚地显示所有传递的数据。
【参考方案5】:

正如其他人所说,您可能误解了唯一 ID 的概念。我要补充的是,我不喜欢在这里使用“值”作为标识属性的想法,因为它可能会随着时间而改变(即,如果您想提供多种语言)。

<input id='submit_tea'    type='submit' name = 'submit_tea'    value = 'Tea' />
<input id='submit_coffee' type='submit' name = 'submit_coffee' value = 'Coffee' />

在你的 php 脚本中

if( array_key_exists( 'submit_tea', $_POST ) )

  // handle tea

if( array_key_exists( 'submit_coffee', $_POST ) )

  // handle coffee

此外,如果您想检查数据是否准确发布,您可以添加 if( 'POST' == $_SERVER[ 'REQUEST_METHOD' ] ) 之类的内容。

【讨论】:

【参考方案6】:

您可以按原样维护您的 html,但使用此 php 代码

<?php
    $name = $_POST['name'];
    $purchase1 = $_POST['Tea'];
    $purchase2 =$_POST['Coffee'];
?>

【讨论】:

【参考方案7】:

你可以使用这样的东西来给你的按钮一个值:

<?php
if (isset($_POST['submit'])) 
  $aSubmitVal = array_keys($_POST['submit'])[0];
  echo 'The button value is: ' . $aSubmitVal;

?>
<form action="/" method="post">
  <input id="someId" type="submit" name="submit[SomeValue]" value="Button name">
</form>

这将为您提供字符串“SomeValue”作为结果

https://i.imgur.com/28gr7Uy.gif

【讨论】:

以上是关于表单发布时发送提交按钮的值的主要内容,如果未能解决你的问题,请参考以下文章

发送没有提交按钮的表单

使用 JavaScript 手动提交表单不会发送提交按钮

每次单击按钮时都在提交表单

单击提交按钮时如何传递单击按钮的值?

只是尝试播放框架,提交表单的值为空

在提交按钮上反应原生表单处理