我遇到的问题是我在一个表单中有多个提交输入。这些提交输入中的每一个都有不同的值,我宁愿将它们保留为提交。
每当用户按下回车键时,就好像按下了最顶层的提交输入一样,因此导致代码检查点击了哪个输入时出现问题。
有没有办法让PHP确定是否点击了输入,或者只是用户按下Enter键时选择的输入?
答案 0 :(得分:11)
如果正确构建HTML,您可以确定使用了哪个按钮
<input type="submit" name="action" value="Edit">
<input type="submit" name="action" value="Preview">
<input type="submit" name="action" value="Post">
$_POST
数组(或$_GET/$_REQUEST
)将包含带有已设置按钮值的关键字“操作”(无论是否点击)。
现在,“点击”显然是客户端行为 - 如果您想要区分点击和按键,您需要在表单中添加一些脚本以帮助确定。
或者,您可以“偷偷摸摸”并使用隐藏的提交,该提交应正确识别按键提交,但这可能会对可访问性产生一些重大影响。
<?php
if ( 'POST' == $_SERVER['REQUEST_METHOD'] )
{
echo '<pre>';
print_r( $_POST );
echo '</pre>';
}
?>
<form method="post">
<input type="text" name="test" value="Hello World">
<input type="submit" name="action" value="None" style="display: none">
<input type="submit" name="action" value="Edit">
<input type="submit" name="action" value="Preview">
<input type="submit" name="action" value="Post">
</form>
答案 1 :(得分:5)
罗伯特,
PHP是服务器端技术,因此在服务器上运行 - 因此无法确定在客户端(即用户)按下哪些键。也就是说,除非您专门编写客户端代码以将此类信息包含在服务器请求中(发布表单数据也是请求的一种形式)。
实现这一目标的一种方法是在客户端代码中使用Javascript。
请参阅此页面,作为使用Javascript处理表单提交事件的起点。 http://www.w3schools.com/jsref/jsref_onSubmit.asp
您可能还需要在页面上为按键事件添加一个侦听器,以便捕获用户按Enter键然后记录此信息。 http://www.howtocreate.co.uk/tutorials/javascript/domevents提供了关于在Javascript中添加/删除事件侦听器的主题的讨论,但是在使用事件时必须非常小心,因为使用不当它们可能是内存泄漏的来源,难以调试并导致不满意的用户:)
答案 2 :(得分:2)
仅凭PHP无法确定如何触发表单提交事件,因为这是在客户端发生的,而PHP是服务器端语言。您必须实现Javascript来监听 - 并登录到服务器端 - 按键和鼠标点击,然后分析该数据以找到您要查找的内容。
现在,PHP可以告诉触发了哪些提交输入,因为它将显示在表单数据中,而其他人则不会。大多数浏览器将第一个提交输入设置为默认值(在 Enter 键按下时触发的输入)。您可以重新订购所有提交的内容,以便控制触发哪个提交。
答案 3 :(得分:1)
PHP无法真正了解客户端发生了什么。
我建议使用javascript。当用户执行操作时,捕获它并将其存储在将随表单提交的隐藏字段中。您还可以跟踪哪些输入处于活动状态并将其存储在隐藏字段中。
代码会有点像(我没有检查语法)
<input type="text" onfocus="setCurrent(this)" id="1" />
<input type="hidden" id="hid" />
function setCurrent(o){
$('hid').value = o.id;
}
我认为玩事件捕捉和隐藏字段可以为您提供所需的结果。
希望有所帮助
答案 4 :(得分:0)
这就是你在客户端编写标记的方式。
例如,这里有一种(非XHTML)方式:
在HTML文件中:
<form method="post" action="myform.php" id="myform">
... form items here ...
<input type="submit" name="enter_key" value="true" style="display:none">
<input type="hidden" name="pressed_button" id="pressed_button" value="false">
<input type="button" value="Submit"
onclick="document.getElementById('pressed_button').value='true';document.getElementById('myform').submit();">
</form>
在myform.php中:
if ($_POST['pressed_button']=='false') {
// Logic for enter key
} else {
// Logic for button press
}