成功POST后重定向到页面

时间:2013-01-14 17:46:37

标签: php header

我正试图在某个if语句成功时重定向我的标题。

它只是没有重定向。我正在做我的POST方法然后重定向。这不可能吗?我的数据成功提交,它只是没有重定向。

$errors = false;

if (isset($_POST['submit'])) {

if (!empty($_POST['name']) && !empty($_POST['company']) && !empty($_POST['email']) && !empty($_POST['question'])) {
        extract($_POST);
        $sql = "INSERT INTO `knowledge` (`name`,`company`,`email`,`question`) VALUES ('$name','$company','$email','$question')";
        $query = mysql_query($sql) or die(mysql_error());
        header("Location: http://www.test.com/thankyou.php");
} else {
    $errors = true;
}

if ($errors) {
    $leftNav .= "<p style='color: red;'>You must fill out all form fields.</p>";
}
}

2 个答案:

答案 0 :(得分:1)

首先,您应该在开发环境中启用error_messaging和display_errors。这将帮助您立即解决这类问题的根源。

我的猜测是,在进行此重定向之前,您已经输出到浏览器。如果您有错误消息,则会导致“已发送标头”错误,甚至会告诉您将输出发送到浏览器的代码行。

此外,您还需要了解SQL注入以及如何防止它。你的代码现在非常不安全。使用mysql_*函数或PDO而不是已弃用的mysql_*函数可以使用预准备语句来阻止SQL注入。

答案 1 :(得分:0)

这段代码很乱。

此代码似乎对$_POST['leftnav']的XSS攻击开放:不要使用提取,因为它可能会覆盖您自己的变量。

您的代码可以使用所有$_POST密钥进行攻击,因为它们不会被转义:不要使用mysql_query,因为它已被弃用且不支持预准备语句。

你问题的答案: 打开error_reporting:

<?php error_reporting(E_ALL);ini_set('display_errors', 1); ?>

检查错误。如果你在<?php php告诉你之前有空格或其他东西。