表单发布时发送提交按钮的值
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
?>
除了发送提交按钮值之外的一切都完美无缺。
【问题讨论】:
Usecheckbox
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_create
和 btn_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>
提交表单时需要name
和value
属性来提交值(在这种情况下不需要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
【讨论】:
以上是关于表单发布时发送提交按钮的值的主要内容,如果未能解决你的问题,请参考以下文章