0
    if($_POST)
    {

        if($this->session->userdata('just_sended'))
        {
            echo 'just sended';
            exit();

        }

        $newdata = array(
                   'just_sended'  => true

        );
        $this->session->set_userdata($newdata);
    }
    else
    {
        $newdata = array(
                   'just_sended'  => false
        );
        $this->session->set_userdata($newdata);

    }

これは、ユーザーが投稿リクエストを送信したときの私のコードですが、なぜ機能しないのかわかりません。ユーザーは「送信」ボタンをスパムし、データベースに重複が表示されます。アイデアはありますか?

4

2 に答える 2

2

Post の後にユーザーをリダイレクトして、クライアントが F5 キーを押してデータを再投稿できないようにします。

header("Location: /submitted.php");
echo 'just sended'; // will the user never see
exit();

sumbitted.php:

exit('just sended');

注:ヘッダー行の前に他のデータを投稿しないでください。

于 2012-12-12T17:20:48.200 に答える
0

セッションでこれを達成しようとしないでください。情報を挿入する前にデータベースにクエリを実行して、最後の投稿をいくつかの一意のキー (IP アドレスなど) で確認し、情報が同じ場合は挿入しないでください。

また、挿入をブロックしない最近の挿入であることを確認したい場合は、タイムスタンプを保存することもできます。

于 2012-12-12T17:21:10.967 に答える