Traitement de soumission répétée de formulaire ThinkPHP6 : éviter les opérations répétées
Dans le développement d'applications Web, la soumission de formulaire est une opération courante. Cependant, les utilisateurs peuvent parfois soumettre des formulaires à plusieurs reprises en raison de retards du réseau ou de dysfonctionnements, ce qui peut entraîner des problèmes dans le système. Afin de résoudre ce problème, nous pouvons effectuer un traitement de soumission de formulaire répété dans le framework ThinkPHP6 pour empêcher les utilisateurs d'effectuer des opérations répétées.
1. Analyse des causes
Il existe deux raisons principales pour la soumission répétée du formulaire :
1. Retard du réseau : lorsque l'utilisateur clique sur le bouton d'envoi, les données du formulaire sont envoyées au serveur pour traitement. Cependant, en raison des retards du réseau, le serveur peut ne pas répondre à temps et l'utilisateur pense à tort que l'opération a échoué et clique à nouveau sur le bouton Soumettre.
2. Mauvaise opération : après avoir soumis le formulaire, l'utilisateur peut cliquer plusieurs fois sur le bouton d'envoi car il n'est pas sûr que l'opération ait réussi, ce qui entraîne la soumission du formulaire plusieurs fois.
2. Méthodes pour empêcher la soumission répétée de formulaires
1. Vérification du jeton de formulaire : assurez-vous de l'unicité du formulaire en ajoutant un jeton au formulaire. Chaque fois que l'utilisateur soumet le formulaire, le jeton génère une valeur unique et est stocké dans la session. Une fois que le serveur aura reçu les données du formulaire, il vérifiera la validité du jeton. Si la vérification échoue, cela signifie que le formulaire est à nouveau soumis.
Exemple de code :
Définissez une méthode dans le contrôleur pour générer un jeton :
namespace appcontroller; use thinkController; class Example extends Controller { public function index() { // 生成Token $token = md5(uniqid(rand(), true)); // 保存Token到Session session('token', $token); // 渲染模板,将Token传递给前端 return $this->fetch('index', ['token' => $token]); } }
Ajoutez un champ caché de jeton dans le modèle :
<form action="/example/submit" method="post"> <input type="hidden" name="token" value="{{ $token }}"> <!-- 其他表单元素 --> <button type="submit">提交</button> </form>
Vérifiez la validité du jeton dans le contrôleur :
namespace appcontroller; use thinkController; class Example extends Controller { public function submit() { // 获取表单提交的Token值 $token = input('post.token'); // 判断Token是否有效 if ($token && $token === session('token')) { // 执行表单提交操作 // 清除Session中的Token session('token', null); // 返回成功页面 return '提交成功!'; } else { // 返回错误页面 return '非法的表单提交!'; } } }
Grâce au code ci-dessus, nous pouvons mettre en œuvre la vérification par jeton du formulaire pour garantir l’unicité du formulaire. Lorsque l'utilisateur clique sur le bouton de soumission, le serveur vérifiera la validité du jeton. Si la vérification échoue, cela signifie que le formulaire est à nouveau soumis. Sinon, l'opération normale de soumission du formulaire sera effectuée.
2. Désactiver le bouton de soumission répétée : une fois que l'utilisateur a cliqué sur le bouton de soumission, désactivez-le immédiatement pour empêcher l'utilisateur de cliquer à plusieurs reprises.
Exemple de code :
<script> document.getElementById('submitBtn').addEventListener('click', function () { // 禁用按钮 this.disabled = true; }); </script>
Avec le code ci-dessus, une fois que l'utilisateur a cliqué sur le bouton de soumission, le bouton sera immédiatement désactivé et l'utilisateur ne pourra pas cliquer dessus à plusieurs reprises, évitant ainsi la soumission répétée du formulaire.
3. Résumé
La soumission en double de formulaires est un problème courant qui doit être résolu dans le développement d'applications Web. La méthode présentée ci-dessus est un moyen courant d'empêcher la soumission répétée de formulaires. Vous pouvez choisir une méthode appropriée en fonction de la situation réelle du projet pour gérer la soumission répétée de formulaires afin d'assurer la stabilité et la sécurité du système.
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!