://m.sbmmt.com/php/php-tp-append.html" target="_blank"> が追加または変更された場合、m フォームが繰り返し送信されます。 フォームが繰り返し送信される理由は、次回ページが送信されるか、ページが閉じるか他のページにリダイレクトされるまで、最初に送信されたフォームがメモリにキャッシュされるためです。自己呼び出しが返されますが、メモリ内のデータはまだ存在します。この時点でも、ページ内の送信コードは送信された値を検出できます。
方法 1http://yourdomain.com/User/Index/login
です。その場合、ページのフォーム
action アドレスは次のようになります。エラーを返す <form action="{:U('User/Index/check_login')}" method="post">
属性 を動的に設定しますコードは次のとおりです:
HTML:<form action="{:U('User/Index/check_login')}" method="post">
$().ready(function(){ $("#login_btn").on('click',function(){ $(this).attr('disabled',true); }); });
方法 3
: ランダムな TOKEN 値を非表示にする方法を使用して、繰り返し送信されたものを判断しますまず、プロジェクトで以下のメソッドをfunctions.phpに追加します//创建TOKEN function createToken() { $code = chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)); session('TOKEN', authcode($code)); } //判断TOKEN function checkToken($token) { if ($token == session('TOKEN')) { session('TOKEN', NULL); return TRUE; } else { return FALSE; } } /* 加密TOKEN */ function authcode($str) { $key = "YOURKEY"; $str = substr(md5($str), 8, 10); return md5($key . $str); }
HTML:
<input type="hidden" name="TOKEN" value="{:session('TOKEN')}" />
コントローラー
でPOSTリクエスト
を行います。 checkToken()を使用して、再送信するかどうかを決定しますif(IS_POST) { $post_token = I('post.TOKEN'); if(!checkToken($post_token)){ $this->error('请不要重复提交页面',U('User/Index/login')); } }
以上がフォームの繰り返し送信を防ぐ方法に関する ThinkPHP のヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。