PHP标头发送PHP文件,而不应该

时间:2013-12-12 14:15:30

标签: php header

我的PHP脚本有问题。 它应该像这样工作: 用户填写预订详细信息 - >将详细信息发送到preservation.php。

如果人数大于6,则应防止数据进入数据库。同时应该将填写的详细信息重新发送到原始表单,以便用户可以编辑详细信息。

但是会发生的事情是标题会将preserve.php作为下载发送回来(内容是HTML,不是PHP)。

    $username = $_POST['username'];
    $name = $_POST['name'];
    $email = $_POST['email'];
    $tel = $_POST['tel'];
    $date = $_POST['date'];
    $time = $_POST['time'];
    $pers = $_POST['pers']; //Amount of persons
    $comment = $_POST['comment'];

    if($pers >= 7){


            $post_date = 'test=test'; //Just to test the script
            $content_length = strlen($post_data);

            header('POST reservation.php');

            header('Host: localhost');

            header('Connection: close');

            header('Content-type: application/x-www-form-urlencoded');

            header('Content-length: ' . $content_length);

            header('');

            header($post_data);

            header('Location: reservation.php');


    }

2 个答案:

答案 0 :(得分:1)

首先,您的代码中有一个拼写错误:

$post_date = 'test=test';

应该是

$post_data = 'test=test';

其次,我不完全确定是什么导致了您的问题,因为我从未需要回发已发布的请求中的数据。

正如我在评论中建议的那样,我建议你改为解决这个问题:

  1. 将表单发送到您的脚本
  2. 使用您的脚本来确定您的表单是否验证提交(例如,比较人数)
  3. 如果它没有验证,只需将原始表单页面立即发送回浏览器(通过包含reservation.php文件,如我在其他评论中提到的,或通过任何其他有意义的方式点)。

答案 1 :(得分:1)

PHP header()函数将HTTP标头发送回用户代理(例如Web浏览器)。当您执行header('Content-type: application/x-www-form-urlencoded');时,您有效地告诉用户浏览器将整个页面视为 application / x-www-form-urlencoded ,这会导致Web浏览器尝试下载该页面解析和显示它。

您无法将POST请求重新发送回浏览器。你试图做的事情不能以你想要的方式完成。

如果您想保留表单数据,可以让浏览器返回上一页,或者使用用户首次提交表单时收集的值重建表单。