我正试图在某个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>";
}
}
答案 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告诉你之前有空格或其他东西。