Cet article présente principalement la méthode de ThinkPHP pour empêcher la soumission répétée de formulaires. Il analyse diverses techniques de fonctionnement courantes et les précautions associées de thinkPHP pour empêcher la soumission répétée de formulaires sous forme d'exemples. Les amis dans le besoin peuvent s'y référer
<.> Cet article résume et analyse la méthode de ThinkPHP pour empêcher les soumissions répétées de formulaires à travers des exemples. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :Pourquoi y a-t-il des formulaires en double ?
Pendant le développement, si un nouveau ou Pour le formulaire modifié, après avoir terminé l'opération de base de données en arrière-plan, nous définissons s'il faut accéder à d'autres pages ou revenir à cette page. À ce stade, cliquer sur le bouton Précédent du navigateur avant de soumettre ou d'actualiser la page entraînera l'affichage du formulaire. être soumis à plusieurs reprises, c'est-à-dire que cet enregistrement sera ajouté ou modifié deux fois. La raison pour laquelle le formulaire est soumis à plusieurs reprises est que le formulaire soumis pour la première fois sera mis en cache dans la mémoire et ne disparaîtra que la prochaine fois que la page sera soumise ou que la page sera fermée ou redirigée vers d'autres pages. Lorsque l'auto-appel revient, les données en mémoire sont toujours là. À ce moment, le code soumis dans la page peut toujours détecter la valeur soumise, ce qui entraînera l'effet d'une soumission répétée.Comment le résoudre ?
Pour résumer les solutions en ligne et vos propres tests, vous pouvez utiliser les méthodes suivantes :Méthode 1 : La plus simple : après avoir soumis la page Accédez à une autre page au lieu de cette page. Par exemple, l'adresse de votre page est
http://yourdomain.com/User/Index/login
Puis le formulaire. l'adresse d'action de la page peut être une autre adresse de traitement, telle que<form action="{:U('User/Index/check_login')}" method="post">
Méthode 2 : Après avoir soumis le formulaire, le bouton de soumission devient gris/masquer le bouton de soumission
Cette méthode est généralement combiné avec la méthode 1. Ce que vous faites est d'utiliser JS pour surveiller dynamiquement l'action de clic de l'utilisateur et de définir dynamiquement l'attribut du bouton sur désactivé, ce qui signifie qu'il est gris et indisponible. Le code est le suivant : HTML :<form action="{:U('User/Index/check_login')}" method="post">
$().ready(function(){ $("#login_btn").on('click',function(){ $(this).attr('disabled',true); }); });
Méthode 3 : Utilisez la méthode de masquage des valeurs TOKEN aléatoires pour déterminer les soumissions répétées
Tout d'abord, ajoutez la méthode suivante au fonctions.php du projet//创建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); }
<input type="hidden" name="TOKEN" value="{:session('TOKEN')}" />
pour générer un jeton avant l'affichage de la page, et utilisez creatToken()
dans la requête POST du contrôleur correspondant pour déterminer s'il faut soumettre à nouveau checkToken()
if(IS_POST) { $post_token = I('post.TOKEN'); if(!checkToken($post_token)){ $this->error('请不要重复提交页面',U('User/Index/login')); } }
PS :Aujourd'hui, j'ai finalement publié le contenu à l'aide de l'éditeur de démarques de Jianshu. Effectivement, la syntaxe de démarque n'était pas couverte et la mise en page entière était rafraîchissante, pas mal.
Recommandations associées :PHP implémente la fonction permettant d'empêcher l'envoi répété de formulaires (basé sur la vérification du jeton)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!