当我在firebug中看到POST变量时,为什么$ _POST为空?

时间:2012-03-02 10:41:24

标签: php forms expressionengine

我在Expressionengine(1.6.8)模板中发布了一个表单。我是使用jquery做的,但也试过了一个HTML表单 - 结果相同。发布表单后,PHP超全局$ _POST为空,即使我在模板上启用了PHP(在包含处理模板上的表单和输出的模板的输入上),并且可以在firebug中看到POST变量。

有人可以提出可能导致这种情况的原因吗?

<html>
<head>
    <script type="text/javascript" src="/_scripts/jquery-1.6.1.min.js"></script>

    </head>
    <body>
        <form action="/select-locale/processing" method="POST">
            <input type="text" name="test"/>
            <input type="submit" name="submit" value="submit">
        </form>
        <a id="test" href="">link</a>

            <script type="text/javascript">
                $(function(){
                    $('#test').bind('click', function(e){
                        e.preventDefault();
                        var path = "/select-locale/processing"
                        var form = $('<form/>');
                        form.attr("method", "post");
                        form.attr("action", path);
                         var field = $('<input></input>');

                        field.attr("type", "hidden");
                        field.attr("name", 'locale');
                        field.attr("value", 'NZ');

                        form.append(field);
                        $('body').append(form);

                        form.submit();
                    });
                });


            </script>
    </body>
</html>

服务器端代码(继承,不是我自己的代码):

<?php
var_dump($_POST);
var_dump($_GET);exit;
if ( ! isset($_POST['locale']))
{
    $locale = FALSE;

    $returnPage = "/";
}
else
{
    $locale = $_POST['locale'];

    $returnPage = $_POST['returnPage'];


}

if (isset($_GET['locale'])) {

    $locale = $_GET['locale'];
    $returnPage = "/"; 
?>
{exp:cookie_plus:set name="cklocale" value="<?php echo $locale;?>" seconds="2678400"}

{exp:session_variables:set name="userLocale" value="<?php echo $locale;?>"}  <?php
}
?>
{exp:cookie_plus:set name="cklocale" value="<?php echo $locale;?>" seconds="2678400"}

{exp:session_variables:set name="userLocale" value="<?php echo $locale;?>"}  


{exp:session_variables:get name="testSession"} 

{if  '{exp:session_variables:get name="testSession"}'=='yes' }
    {redirect="<?php echo $returnPage;?>"}
{if:else}
    {redirect="/nocookies/"}
{/if}

4 个答案:

答案 0 :(得分:1)

您可能想要重新检查操作属性,确定要将数据发送到正确的网址吗?我怀疑任何事情都可以被过滤掉。

答案 1 :(得分:1)

  • 检查网络标签是否确实发送了您想要的参数

  • 检查网址是否正确

  • 如果您使用任何类型的路由机制或网址重写,您可能还想查看它

  • 检查您的验证和XSS规则(如果有),因为一旦找到XSS的提示,它可能会拒绝整个数组。

很久以前发生在我身边(CI),我把它发送到了错误的网址

答案 2 :(得分:0)

由于表单标记的action属性或jquery函数中的oath值,似乎表单被提交了两次

答案 3 :(得分:0)

可能有用

 <html>
     <head>
      <script type="text/javascript" src="js/jquery.js"></script>
     </head>
     <body name="test">
        <form action="/select-locale/processing" method="POST">
            <input type="text" name="test"/>
            <input type="submit" name="submit" value="submit">
        </form>
        <a id="test" href="">link</a>
    </body>
    </html>
    <script type="text/javascript">
    $(function(){
    $('#test').bind('click', function(){
    var form ='<form action="/select-locale/processing" name="newform" method="POST"><input type="hidden1" name="locale" value="NZ"></form>';
    $('body').append(form);
    alert('added');
    document.newform.submit();
    });
});
</script>`