Je rencontre un problème où un utilisateur peut soumettre n'importe quel formulaire créé par l'API Form plusieurs fois (un clic rapide entraînant plusieurs demandes).
J'ai mis dans la solution de base côté client (javascript) de désactiver le bouton, mais je suis curieux de savoir quelle est la meilleure approche pour éviter cette situation côté serveur.
Existe-t-il un moyen recommandé d'utiliser le système de jetons de formulaire de Drupal pour gérer cela? Surtout une solution de formulaire globale (c'est-à-dire, ajouter un validateur personnalisé à chaque formulaire en utilisant hook_form_alter ()).
Jusqu'à présent, mon approche a été quelque chose comme ceci:
function mymodule_form_alter(&$form, &$form_state, $form_id) {
$form['#validate'][] = 'mymodule_form_validate';
}
function mymodule_form_validate(&$form, &$form_state){
//initialize form array
if (!isset($_SESSION['submitted_forms'])){
$_SESSION['submitted_forms'] = array();
}
$form_token = $form_state['values']['form_token'];
if ( isset($_SESSION['submitted_forms'][$form_token]) && $_SESSION['submitted_forms'][$form_token] = TRUE ){
form_set_error('name]', 'This form has already been submitted');
}
else{
$_SESSION['submitted_forms'][$form_token] = TRUE;
}
}
Je rencontre des problèmes lorsque le form_token n'est pas unique au formulaire - il semble rester le même quoi qu'il arrive. Je comprends probablement mal ce qu'est le jeton dans le grand schéma de la forme api.
Toute idée est appréciée!
Réponses:
J'ai eu exactement le même problème et j'ai réussi à le résoudre en utilisant les mécanismes de verrouillage de Drupal
Dans la fonction de validation que j'ai utilisée:
Et dans la fonction de soumission, j'ai relâché le verrou:
la source
Ici, vous devez considérer le poids du module:
la source
Si vous voulez cette fonctionnalité sur tous les formulaires et plus de contrôle sans codage, jetez un œil au module Hide Submit Button .
la source
j'espère que cela vous aidera ..
ou vous pouvez vous référer Empêcher plusieurs clics sur le bouton de soumission et drupal a un module Masquer le bouton de soumission
la source
C'était aussi mon problème avant. Ma solution est de désactiver le bouton via JS.
.module:
JS:
la source