Maison > développement back-end > tutoriel php > Méthode PHP pour résoudre et éviter la soumission répétée de formulaires

Méthode PHP pour résoudre et éviter la soumission répétée de formulaires

墨辰丷
Libérer: 2023-03-29 07:44:02
original
1657 Les gens l'ont consulté

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>
Copier après la connexion

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&#39;])) {

if($_POST[‘code&#39;] == $_SESSION[‘code&#39;]){

// 重复提交表单了

}else{

$_SESSION[‘code&#39;] =$_POST[‘code&#39;]; //存储code

}

}?>
Copier après la connexion

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&#39;])){

setcookie(“tempcookie”,””,time()+30);

header(“Location:”.$_SERVER[PHP_SELF]);exit();

}

if(isset($_COOKIE[“tempcookie”])){

setcookie(“tempcookie”,””,0);echo “您已经提交过表单”;

}
Copier après la connexion

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&#39;])) {

header(‘location:success.php&#39;);//处理数据后,转向到其他页面

}
Copier après la connexion

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&#39;]) && $_POST[‘action&#39;] == ‘submitted&#39;) {

//处理数据,如插入数据后,立即转向到其他页面

header(&#39;location:submits_success.php&#39;);

}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal