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']:独自の変数を上書きする可能性があるため、extractを使用しないでください。

コードはエスケープされていないため、すべての$_POSTキーで攻撃可能です。mysql_queryは非推奨であり、プリペアドステートメントをサポートしていないため、使用しないでください。

そしてあなたの質問への答え:error_reportingをオンにしてください:

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

エラーを確認します。<?phpphpが教えてくれる前にスペースか何かがある場合。

于 2013-01-14T18:01:09.817 に答える