2009-12-04 119 views
8

我是一个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。 林不知道什么可以导致这种情况,但我有发送表单中的头缓存控件,就像它出现在上面的代码片段中一样。

任何想法?

+0

表单看起来像是在发布吗? – 2009-12-04 12:39:42

+0

这是否发生在所有浏览器? – DisgruntledGoat 2009-12-04 12:40:00

+0

您还可以检查$ _REQUEST变量,该变量包含花盆并获取数据 – NDM 2009-12-04 12:44:45

回答

0

您可以检查$ _REQUEST变量,它是$ _POST和$ _GET数组的组合。如果这些变量不在那里,它们还没有被发送,问题可能在客户端。

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

+0

我检查了REQUEST变量,结果是一样的。我也用Firebug检查了发布请求,并且变量总是正确传递。这只是没有收到它们的php应用程序。 – Marc 2009-12-04 12:57:10

+1

看起来PHP应用程序正在改变其内部的变量。我也会在入口处进行检查 - 变量应该在那里 - 然后找出哪部分代码“摆脱”了它们。 – 2009-12-04 13:16:33

+0

我已经尝试过这样做,但是当我在我的php代码中唯一的东西是 var_dump($ _ POST); – Marc 2009-12-07 15:55:26

0

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

7

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

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

这个答案应该被标记为初学者最可能的原因。我刚刚有这个问题 - 在javascript中工作我已经指定了所有的“id”标签并且他们正在工作,但是当页面提交给服务器时,我期待$ _POST值是id。添加“名称”标签立即修复它。 – Bill 2017-11-18 08:46:10

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

默认情况下,这将发送状态码302为好。无论原始请求类型如何,大多数浏览器都会向GET请求请求302的目标。如果要同时请求包含POST数据,那么你可以尝试307:

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

但是你可能并不在所有浏览器工作(它应该在任何非古工作)。虽然您可能想在此重新检查您的逻辑,但要求客户端使用双重POST的情况并不常见。

此外,你是否知道你读了$_SESSION['username'],但似乎永远不会写信给它?