Lors de la soumission d'un formulaire en PHP, la vitesse du réseau peut ralentir soudainement le chargement de la page. Si l'utilisateur clique à plusieurs reprises sur le bouton de soumission, plusieurs éléments de données seront générés dans la base de données, ce qui entraînera une situation incontrôlable. Alors comment éviter et résoudre ce problème ? Jetons un coup d'œil ci-dessous.
Avant-propos
Pourquoi devrions-nous éviter la soumission répétée de formulaires ? Parce que nous ne voulons pas que notre serveur traite des données inutiles de manière répétée et que nous évitons également que notre base de données génère des données en double. Éviter la soumission répétée de formulaires est également un moyen de rendre notre site Web plus sûr.
Examinons d'abord les circonstances qui peuvent conduire à la soumission répétée de formulaires. Connaître les circonstances dans lesquelles la soumission répétée de formulaires peut se produire peut vous aider à gérer la situation de soumission répétée de formulaires à partir de la cause profonde. .
Les situations suivantes entraîneront l'envoi répété du formulaire :
Cliquez deux fois sur le bouton Soumettre.
Cliquez sur le bouton Actualiser.
Utilisez le bouton Précédent du navigateur pour répéter l'opération précédente, ce qui entraînera la soumission répétée du formulaire.
Utilisez l'historique du navigateur pour soumettre des formulaires à plusieurs reprises.
Requêtes HTTP répétées du navigateur.
La page Web a été actualisée de manière malveillante.
Voici plusieurs solutions :
1 : Utilisez js pour que le bouton devienne gris lorsque vous cliquez dessus
<form name=form1 method=”POST” action=”/” target=_blank> <p> <input type=”text” name=”T1″ size=”20″> <input type=”button” value=”提交” onclick=”javascript:{this.disabled=true;document.form1.submit();}”> </p> </form>
Après avoir cliqué sur le bouton, il devient gris et ne peut pas être cliqué. Si l'utilisateur doit soumettre à nouveau le formulaire, il doit actualiser la page, remplir. dans les données à nouveau, puis soumettez-les.
Deux : Utilisez la session
pour mettre une marque spéciale dans session
. Lorsque la page du formulaire est demandée, une chaîne d'indicateur de caractères spéciaux est générée, stockée dans session
et placée dans le champ masqué du formulaire. Lors de l'acceptation et du traitement des données du formulaire, vérifiez si la chaîne d'identification existe, supprimez-la immédiatement de la session, puis traitez les données normalement.
S'il s'avère qu'il n'y a pas de chaîne d'indicateur valide dans la soumission du formulaire, cela signifie que le formulaire a déjà été soumis et cette soumission sera ignorée.
Cela donne à votre application Web une XSRF
protection plus avancée
Lors du chargement de la page soumise, un nombre aléatoire est généré,
$code = mt_rand(0,1000000);
est stocké dans la zone de saisie cachée du formulaire :
< input type=”hidden” name=”code” value=””>
Le code PHP sur la page de réception est le suivant :
<?php session_start(); if(isset($_POST[‘code'])) { if($_POST[‘code'] == $_SESSION[‘code']){ // 重复提交表单了 }else{ $_SESSION[‘code'] =$_POST[‘code']; //存储code } }?>
Trois : Utiliser les cookies
Le principe est similaire à session
, mais cookies
une fois le navigateur de l'utilisateur désactivé cookies
, cette fonction sera invalide
if(isset($_POST[‘submit'])){ setcookie(“tempcookie”,””,time()+30); header(“Location:”.$_SERVER[PHP_SELF]);exit(); } if(isset($_COOKIE[“tempcookie”])){ setcookie(“tempcookie”,””,0);echo “您已经提交过表单”; }
Quatre : utilisez la fonction d'en-tête pour sauter
Une fois que l'utilisateur clique sur le bouton d'envoi, sautez vers d'autres endroits après le traitement des données Page
if (isset($_POST[‘submit'])) { header(‘location:success.php');//处理数据后,转向到其他页面 }
Cinq : Utilisez la base de données pour ajouter des contraintes
Ajouter contraintes uniques directement dans la base de données ou créez un index unique, une fois qu'il est constaté que l'utilisateur a soumis à plusieurs reprises, un avertissement ou une invite sera émis directement, ou seules les données soumises pour la première fois seront traitées. méthode efficace et nécessite une considération approfondie dès la conception et l'architecture de la base de données initiale.
Six : mode Post/Redirect/Get.
effectue la redirection de page après la soumission, c'est ce qu'on appelle le modèle Post-Redirect-Get (PRG)
. En bref, lorsque l'utilisateur soumet le formulaire, vous effectuez une redirection côté client et accédez à la page d'informations sur la réussite de la soumission.
if (isset($_POST[‘action']) && $_POST[‘action'] == ‘submitted') { //处理数据,如插入数据后,立即转向到其他页面 header('location:submits_success.php'); }
Résumé
Ce qui précède concerne la résolution de PHP et l'évitement de la duplication de formulaire Il existe plusieurs façons de soumettre. Grâce aux méthodes ci-dessus, vous pouvez éviter les soumissions répétées causées par l'utilisateur en appuyant sur F5, et il n'y aura aucun avertissement concernant les soumissions répétées du formulaire du navigateur. Cela peut également éliminer les mêmes problèmes causés par la pression suivante. et les boutons arrière du navigateur. J'espère que cet article pourra apporter une certaine aide aux études et au travail de chacun.
Recommandations associées :
Fonctions de connexion, d'enregistrement et de modification de mot de passe implémentées en PHP
Explication détaillée des fonctions anonymes et précautions de PHP
Utilisation de la fonction de rappel call_user_func_array en 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!