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 retour du navigateur, puis soumettre ou actualiser la page entraînera l'affichage du formulaire. 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 function.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.
Articles qui pourraient vous intéresser :Analyse des méthodes d'affichage de la pagination PHP [avec astuces php de pagination générale PHP
Exemple de méthode PHP pour compresser la taille de l'image et la convertir au format jpg_php astuces
Exemple de méthode PHP pour utiliser la couche d'abstraction PDO pour obtenir les résultats de la requête Astuces php
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!