PHP表单检查是否已按提交

PHP表单检查是否已按提交,php,forms,submit,form-submit,isset,Php,Forms,Submit,Form Submit,Isset,在过去的3个小时里,我一直在为这个问题发疯。我已经让它完全工作了……事实上它仍然是,但在另一页上。唯一的问题是,在另一个页面上,它停止工作。以下是基本情况: 用户访问页面,点击按钮,JavaScript ModalBox打开 模式框中有一个表单,用户填写后点击Send 表单操作本身就是这样,因此它返回并检查submit按钮上的isset()是否为true 这似乎就是问题所在。我在另一个脚本上做了这个,但是它超过了5页,所以这里有一个小脚本,我一生都无法开始工作: <?php session

在过去的3个小时里,我一直在为这个问题发疯。我已经让它完全工作了……事实上它仍然是,但在另一页上。唯一的问题是,在另一个页面上,它停止工作。以下是基本情况:

  • 用户访问页面,点击按钮,JavaScript ModalBox打开
  • 模式框中有一个表单,用户填写后点击Send
  • 表单操作本身就是这样,因此它返回并检查submit按钮上的isset()是否为true
  • 这似乎就是问题所在。我在另一个脚本上做了这个,但是它超过了5页,所以这里有一个小脚本,我一生都无法开始工作:

    <?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的插件,它可以很容易地为您提供一致性报告。