PHP $ _POST变量有时是空的

时间:2009-12-04 12:33:16

标签: php post

我是一名PHP新手,我提交POST变量时有时会出现问题。让我难以理解的部分是每次都不会发生这种情况,我通常只需刷新页面就可以在PHP程序中获取发布数据。有时它需要几次,但一旦数据通过一次,它将继续很好地完成。

其他PHP应用程序(Wordpress和其他)工作正常,从不给出任何错误,所以我很确定我的php应用程序有问题。

我在CentOS 5.2服务器上安装了PHP 4.2.9,并将KeepAliveTimeout设置为1.

我处理提交数据的应用代码:

<?php
    session_start(); 
    if (isset($_SESSION['username'])) {
        $expire = time() + (60*60*24*30);
        setcookie("username", $_SESSION['username'], $expire);
    }

    header("Cache-control: no-cache");

    if (!isset($_SESSION['username'])) {
        header('Location: ./login.php');
        die();
    }

    if(empty($_SERVER['CONTENT_TYPE'])){
        $type = "application/x-www-form-urlencoded";
        $_SERVER['CONTENT_TYPE'] = $type;
    }

    var_dump($_POST);
    echo "\n";
    var_dump($_SERVER);
?>

任何帮助都将不胜感激

编辑:我发现工作岗位请求和失败的请求之间存在一个区别。 Firebug告诉我,当帖子失败时,状态是302重定向而不是200 ok。 我不确定是什么导致这种情况,但我在发送表单中有标题缓存控件,就像上面的代码片段中所示。

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

您忘记了INPUT标记上的name =参数。

<input type="text" id="xyz" name="xyz" value="123"/>

答案 1 :(得分:0)

您可以检查$ _REQUEST变量,它是$ _POST和$ _GET数组的组合。如果变量不存在,则它们尚未发送,问题可能在客户端。

您可以使用网络流量分析工具,例如Firebug的Net选项卡,用于查看实际发送到服务器的内容。

答案 2 :(得分:0)

$_POST变量由PHP引擎填充,而不是由任何应用程序填充。因此,如果它是空的,它只是空的,您的代码需要考虑到这一点,就像您对$_SESSION$_SERVER变量所做的那样。

答案 3 :(得分:0)

header('Location: ./login.php');

默认情况下,这也会发送状态代码302。无论原始请求类型如何,大多数浏览器都会请求具有GET请求的302的目标。如果您希望两个请求都包含POST数据,那么您可以尝试307:

header('Location: ./login.php', true, 307);

但是你可能并不适用于所有浏览器(它应该适用于任何非古老的浏览器)。你可能想在这里重新检查你的逻辑,要求客户端双POST是不正常的。

另外,您是否知道您阅读$_SESSION['username']但似乎没有写过它?