Maison >développement back-end >tutoriel php >Comment empêcher les soumissions multiples de formulaires avec PHP ?
Prévenir les soumissions multiples de formulaires avec PHP
Dans le développement Web, il est essentiel de se prémunir contre les soumissions multiples de formulaires lorsqu'un utilisateur clique à plusieurs reprises sur le bouton de soumission. bouton. Cela peut conduire à des résultats inattendus, tels que des entrées de données en double ou un comportement inattendu. PHP propose plusieurs techniques pour éviter ce problème.
Une approche efficace consiste à utiliser des jetons de formulaire uniques. Lorsqu'un formulaire est affiché, un jeton unique est généré et stocké dans la session. Lorsque le formulaire est soumis, le jeton est comparé à la version stockée. Si les jetons correspondent, la soumission du formulaire est traitée. Si ce n'est pas le cas, la soumission est rejetée, empêchant ainsi les soumissions multiples.
Voici une implémentation PHP simple :
session_start(); function getToken() { $token = sha1(mt_rand()); if (!isset($_SESSION['tokens'])) { $_SESSION['tokens'] = array($token => 1); } else { $_SESSION['tokens'][$token] = 1; } return $token; } function isTokenValid($token) { if (!empty($_SESSION['tokens'][$token])) { unset($_SESSION['tokens'][$token]); return true; } return false; } $postedToken = filter_input(INPUT_POST, 'token'); if (!empty($postedToken)) { if (isTokenValid($postedToken)) { // Process form } else { // Handle error } } $token = getToken();
<form method="post"> <fieldset> <input type="hidden" name="token" value="<?php echo $token; ?>" /> <!-- Add form content --> </fieldset> </form>
Pour améliorer la sécurité, combinez cette validation de jeton avec une redirection lors de la soumission du formulaire. Cela garantit que lorsqu'un utilisateur appuie sur le bouton Précédent, un nouveau formulaire s'affiche avec un nouveau jeton. Ce modèle, connu sous le nom de POST / redirect / GET, empêche en outre les soumissions multiples et maintient la compatibilité ascendante et ascendante.
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!