PHP表单检查是否已按提交
在过去的3个小时里,我一直在为这个问题发疯。我已经让它完全工作了……事实上它仍然是,但在另一页上。唯一的问题是,在另一个页面上,它停止工作。以下是基本情况:PHP表单检查是否已按提交,php,forms,submit,form-submit,isset,Php,Forms,Submit,Form Submit,Isset,在过去的3个小时里,我一直在为这个问题发疯。我已经让它完全工作了……事实上它仍然是,但在另一页上。唯一的问题是,在另一个页面上,它停止工作。以下是基本情况: 用户访问页面,点击按钮,JavaScript ModalBox打开 模式框中有一个表单,用户填写后点击Send 表单操作本身就是这样,因此它返回并检查submit按钮上的isset()是否为true 这似乎就是问题所在。我在另一个脚本上做了这个,但是它超过了5页,所以这里有一个小脚本,我一生都无法开始工作: <?php session
<?php session_start(); ?>
<html>
<head>
<?php
if (isset($_GET['initForm'])){
echo 'Complete';
}
?>
</head>
<body>
<?php
echo '
<div style="padding:0;margin:0;float:left;height:120px;width:100%;">
<div align="center" width="50%" style="padding-top:2px;"><img src="images/step1.png"></div>
<div align="center" width="50%" style="font-face:Arial; font-size:14px;padding-top:4px;">Which package are you interested in?</div>
<div align="center" width="50%" style="font-face:Arial; font-size:14px;padding-top:6px;">
<FORM action="test.php" name="initForm" id="initForm" onsubmit="return false;">
<select name="packageName">
<option value="Weekend">Weekend - 4 Days/3 Nights</option>
<option value="Weekday">Weekday - 5 Days/4 Nights</option>
</select>
</div>
<div align="center" width="50%" style="font-face:Arial; font-size:14px;padding-top:6px;">
<input Type = "Submit" name="initForm" Value ="Send" onclick="Modalbox.show(\'test.php\', {title: \'Vacation Booking\', width: 600, params:Form.serialize(\'initForm\')}); return false;">
</FORM>
</div>
</div>';
?>
</body>
</html>
-----固定------解决方案如下:-------
^标记必须放在html的最外层,现在我可以访问$\u Get数组的所有元素,包括submit按钮。有人能解释为什么这样挑剔吗?我想要回我的3个小时。至少我希望再也不会犯这样的错误了。我会:
if (isset($_GET['initForm']) && $_GET['initForm'] == 'Send'){
此外,我还可能在表单元素中指定方法
,并使用POST
而不是GET
,因为它是不妥协的
还有,为什么要输出echo'Complete'代码>在头部
块中?这是不对的。它应该在主体元素中(这可能也是问题的一部分)。我会:
if (isset($_GET['initForm']) && $_GET['initForm'] == 'Send'){
此外,我还可能在表单元素中指定方法
,并使用POST
而不是GET
,因为它是不妥协的
还有,为什么要输出echo'Complete'代码>在头部
块中?这是不对的。它应该在正文
元素中(这可能也是问题的一部分)。表单通常通过POST提交,但您正在检查$\u GET。您是否正在执行AJAX请求并通过GET发送数据?如果没有,您应该检查:
if (isset($_POST['initForm'])){
...
表单通常通过POST提交,但您正在检查$\u GET。您是否正在执行AJAX请求并通过GET发送数据?如果没有,您应该检查:
if (isset($_POST['initForm'])){
...
为什么要使用巨型echo
语句?甚至没有任何变量interpolation@Phil-我猜它是根据另一个剧本改编的,这是一个残余。当然,我会删除它,只使用纯HTML。您正在头标记中回显成功消息。可能影响不大,但head标签中没有任何内容应该是您希望人们看到的。我只是在测试成功提交。为什么要使用巨型echo
语句?甚至没有任何变量interpolation@Phil-我猜它是根据另一个剧本改编的,这是一个残余。当然,我会删除它,只使用纯HTML。您正在头标记中回显成功消息。可能影响不大,但head标签中的任何内容都不应该是您希望人们看到的。我只是在测试成功提交。实际上,我刚刚找到了答案。这是我见过的最奇怪的事情之一。首先,是的,我相信这是一个AJAX请求,这是序列化表单部分。现在,问题一直存在:标签必须放在div之外。真的很奇怪。如果没有指定方法
,那么表单
元素不是默认为获取
吗?实际上我刚刚算出了。这是我见过的最奇怪的事情之一。首先,是的,我相信这是一个AJAX请求,这是序列化表单部分。现在,问题一直存在:标签必须放在div之外。真奇怪。表单
元素不是默认为GET
吗?如果没有指定方法
,它现在会回显complete。它是head块,但是由于test.php包含在body标记中另一个页面的模式框中,我想它可以工作。重申一下,是标记太嵌套在html中了?我实际上只是移动了所有div外部的and标记,现在所有元素都已提交,并且可以通过$\u GET数组检索。哦,我明白了。我没有注意到您的标记没有正确嵌套。如果你没有正确嵌套它,浏览器会猜测正确的嵌套应该是什么(它被称为怪癖模式
),在这种情况下,很明显它迫使你的表单在输入
之前提前关闭,我想。这太疯狂了,我甚至没有意识到HTML是如此吝啬。我一直认为PHP很残忍。谢谢你的帮助。这是为了你的利益(我也不是开玩笑)。我建议您使用一个特定的DOCTYPE
,或者尝试一下,这样您就可以使用正确的嵌套(尽管HTML4.1或XHTML过渡版更有用)。另外,看看Firefox的插件,它可以很容易地为您提供一致性报告。它现在已经完成了。它是head块,但是由于test.php包含在body标记中另一个页面的模式框中,我想它可以工作。重申一下,是标记太嵌套在html中了?我实际上只是移动了所有div外部的and标记,现在所有元素都已提交,并且可以通过$\u GET数组检索。哦,我明白了。我没有注意到您的标记没有正确嵌套。如果你没有正确嵌套它,浏览器会猜测正确的嵌套应该是什么(它被称为怪癖模式
),在这种情况下,很明显它迫使你的表单在输入
之前提前关闭,我想。这太疯狂了,我甚至没有意识到HTML是如此吝啬。我一直认为PHP很残忍。谢谢你的帮助。这是为了你的利益(我也不是开玩笑)。我建议您使用一个特定的DOCTYPE
,或者尝试一下,这样您就可以使用正确的嵌套(尽管HTML4.1或XHTML过渡版更有用)。另外,看看Firefox的插件,它可以很容易地为您提供一致性报告。