Maison >développement back-end >Problème PHP >Comment interdire la soumission répétée de formulaires en php

Comment interdire la soumission répétée de formulaires en php

coldplay.xixi
coldplay.xixioriginal
2020-08-11 09:31:552581parcourir

Comment interdire la soumission répétée de formulaires en PHP : ajoutez d'abord un champ de saisie masqué au formulaire ; puis sa valeur est utilisée pour enregistrer la valeur du jeton ; puis lorsque la page est actualisée, la valeur du jeton changera, et la valeur du jeton sera déterminée après la soumission. Est-ce correct Enfin, si le jeton soumis au premier plan ne correspond pas à l'arrière-plan, il est considéré comme une soumission en double.

Comment interdire la soumission répétée de formulaires en php

Comment interdire la soumission répétée de formulaires en PHP :

Établissez d'abord des restrictions depuis le front-end. Le JavaScript frontal est désactivé après avoir cliqué une fois sur le bouton. Cette méthode empêche simplement les clics multiples sur le bouton de soumission, mais l'inconvénient est qu'elle ne fonctionnera pas si l'utilisateur désactive le script JavaScript.

Recommandations d'apprentissage associées : programmation php (vidéo)

Deuxièmement, nous pouvons rediriger la page après la soumission, c'est-à-dire sauter vers une nouvelle page après la soumission vise principalement à éviter les soumissions répétées avec F5, mais il y a aussi des inconvénients.

Troisièmement, la base de données a des contraintes d'index uniques.

La quatrième consiste à vérifier le jeton de session.

Apprenons maintenant une méthode simple d'utilisation du jeton de session pour empêcher la soumission répétée de formulaires.

Nous ajoutons un champ de saisie masqué dans le formulaire, c'est-à-dire type="hidden", dont la valeur est utilisée pour enregistrer la valeur du jeton. Lorsque la page est actualisée, la valeur du jeton changera. il est jugé si la valeur du jeton est correcte, si le jeton soumis dans le frontend ne correspond pas au jeton soumis dans le backend, il est considéré comme une soumission en double.

<?php 
/* 
* PHP简单利用token防止表单重复提交 
*/
session_start(); 
header("Content-Type: text/html;charset=utf-8"); 
function set_token() { 
 $_SESSION[&#39;token&#39;] = md5(microtime(true)); 
} 
  
function valid_token() { 
 $return = $_REQUEST[&#39;token&#39;] === $_SESSION[&#39;token&#39;] ? true : false; 
 set_token(); 
 return $return; 
} 
  
//如果token为空则生成一个token 
if(!isset($_SESSION[&#39;token&#39;]) || $_SESSION[&#39;token&#39;]==&#39;&#39;) { 
 set_token(); 
} 
  
if(isset($_POST[&#39;web&#39;])){ 
 if(!valid_token()){ 
 echo "token error,请不要重复提交!"; 
 }else{ 
 echo &#39;成功提交,Value:&#39;.$_POST[&#39;web&#39;]; 
 } 
}else{ 
?> 
 <form method="post" action=""> 
 <input type="hidden" name="token" value="<?php echo $_SESSION[&#39;token&#39;]?>"> 
 <input type="text" class="input" name="web" value="www.jb51.net"> 
 <input type="submit" class="btn" value="提交" /> 
 </form> 
<?php 
} 
?>

Recommandations d'apprentissage associées : Vidéo de programmation

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!

Déclaration:
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