Vérifications avant la soumission d'un formulaire

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour
Nous avons un formulaire avec des mots-clés affichés dans des listes déroulantes. Si l'utilisateur en sélectionne trop, la requête envoyée à Mysql comporte trop de jointures et le système crashe.
Je voudrais faire une validation avant l'envoi de la requête.
Je cherche à créer une fonction views-exposed-form-fiches-logiciels-page-1_validate(&$form, &$form_state). J'ai essayé de la créer dans un module et de lui donner le nom mymodule_views-exposed-form-fiches-logiciels-page-1_validate(&$form, &$form_state)
J'ai essayé de remplacer les tirets par des underscore.
J'ai essayé de créer une fonction mavalidation() que j'appelerai depuis
function mytheme_preprocess_views_exposed_form(&$vars, $hook) dans template.php avec $vars['form']['#validate'][] = 'mavalidation';

rien de tout ceci n'a fonctionné.
Quelqu'un aurait-il une idée?
Merci

Forum : 
Version de Drupal : 
Tags : 

Bonjour,

<?php
hook_form_alter
(&$form, &$form_state, $form_id){
  if (
$form['#id'] == 'views-exposed-form-fiches-logiciels-page-1') {
   
$form['#validate'][] = 'mon_module_ma_fonction_de_validation';
  }
?>

La fonction de validation recoit en argument $form et $form_state. On peut vérifier les valeurs dans $form_state['values'] et enchainer sur un form_set_error.
Voir http://api.drupal.org/api/file/developer/topics/forms_api.html/6 et http://api.drupal.org/api/drupal/developer--topics--forms_api_reference....

Pascal

Merci pour cette suggestion. Je l'avais déjà testée, mais peut-être n'ai-je pas mis le code dans le bon fichier. Est-ce dans template.php ou bien dans un module personnalisé? Est-ce que la fonction s'appelle hook_form_alter ou bien mymodule_form_alter?
Merci
AD

Merci pour tous ces éléments. J'ai enfin réussi à faire ce que je voulais.
Je poste le code pour ceux qui en auraient besoin.
AD

/**
* hook général sur les formulaires
* appliqué uniquement sur le formulaire de recherche de fiches logiciels (test sur l'id du formulaire)
*
/

function mymodule_form_alter(&$form, &$form_state, $form_id){
  if ($form['#id'] == 'views-exposed-form-fiches-logiciels-page-1') {
    $form['#validate'][] = 'mymodule_validation_recherche_logiciels';
  }
}

/***
* fonction de validation des formulaires de recherche
* le formulaire n'est pas soumis si le nombre d'éléments recherchés est > à 20

/

function mymodule_validation_recherche_logiciels (&$form, &$form_state){
$cles = array_keys($form_state['values']) ;
$nbchoix = 0 ;
foreach ($cles as $cle)
   {
  // les variables get associées aux choix sont du type tid_n et l'opérande associé tid_n_op
    // il y a aussi le paramètre tid (compatibilité avec ancienne version)
if ((!(strpos($cle, 'tid') === FALSE)) && (strpos($cle, '_op') === FALSE))
     {
      if (is_array($form_state['values'][$cle])) { $nbchoix = $nbchoix + count($form_state['values'][$cle]) ; }
          else { $nbchoix ++ ; }
     }
  }  
if ($nbchoix > 20) { form_set_error('views-exposed-form-fiches-logiciels-page-1',t('Too many items selected. Please select less items.')) ; }
}