0

我试图在某个 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>";
}
}
4

2 回答 2

1

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

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

您还需要阅读 SQL 注入以及如何防止它。您的代码现在非常不安全。使用mysql_*函数或 PDO 而不是弃用的mysql_*函数将使您能够使用准备好的语句来防止 SQL 注入。

于 2013-01-14T17:58:03.223 回答
0

这段代码很乱。

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

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

以及您的问题的答案:打开error_reporting:

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

检查错误。如果你有空格什么的,之前<?phpphp会告诉你的。

于 2013-01-14T18:01:09.817 回答