2

だから、私はコメントスクリプトに取り組んでいます。コメントを投稿すると問題なく動作しますが、ページを更新すると、テキスト フィールドが空であっても同じコメントが投稿されることがわかりました。これは、すでに変数を に送信したため$_POSTであり、その値をデータベースに挿入しているだけであることは理解していますが、この問題を回避するにはどうすればよいですか? 事前に感謝します。ここに私のコードがあります:($username$imageが既に設定されていると仮定します)

if (isset($_POST['text']) && !empty($_POST['text']))
        {
            $text = $_POST['text'];
            $timeStamp = time();

            mysql_query("INSERT INTO comments VALUES ('$image','$username','$text','$timeStamp')");
        }

そしてHTML:

        <form method = "post" action = "/view.php?image=$image" />

            <input type = "text" name = "text" maxlength = "100" />
            <input type = "submit" value = "Add Comment" />

        </form>
4

3 に答える 3

2

これを回避する最も簡単な方法は、データベース操作が成功した後にリダイレクトすることです。

...
mysql_query("INSERT INTO comments VALUES ('$image','$username','$text','$timeStamp')");
// error handling
header('Location: /some/where');

それとは別に、SQL インジェクションの問題を回避するために、PDO / 準備済みステートメントに切り替える必要があります。

于 2012-05-25T00:59:34.577 に答える
1

簡単な方法:

データベースに保存した後、ページをリロードします。

header('Location: comment-form.php');

これにより、ブラウザはフォームの送信を「忘れる」ようになります。

正しい方法:

nonceを生成し、それを非表示の入力としてフォームに追加します。フォームが送信されたら、スクリプト$_POST['nonce']で と一致することを確認してください。$nonce

ナンスの作成方法と使用方法

于 2012-05-25T00:59:02.810 に答える
1

コメントを表示しているのと同じページに投稿していますか? もしそうなら、おそらく /a_page_where_i_submit_things.php に投稿してから、コメントのあるページにリダイレクトすることができます。私はそれがうまくいくと信じています。

于 2012-05-25T00:59:09.533 に答える