2010-01-25 5 views
0

J'ai un formulaire simple avec un menu de sélection sur la page d'affichage de noeud. Y at-il un moyen facile de valider le formulaire dans ma fonction de rappel? Par validation, je ne veux rien dire d'avancé, juste pour vérifier que les valeurs existent réellement dans le tableau de forme. Par exemple, sans ajax, si mon menu de sélection a 3 éléments et que j'ajoute un 4ème élément et que j'essaie de soumettre le formulaire, drupal va donner une erreur en disant quelque chose comme "un choix illégal a été fait, contactez l'administrateur".Drupal 6 Validation pour la fonction de rappel de formulaire

Avec ajax ce 4ème article que vous avez créé serait enregistré dans la base de données. Alors, dois-je écrire la validation comme

if ($select_item > 0 && $select_item <= 3) { 
    //insert into db 
} 

Ou est-il un moyen plus facile qui va vérifier que l'élément a réellement existé dans le tableau de forme? J'espère qu'il n'y a pas d'ajax, drupal ne soumettra pas le formulaire s'il a été manipulé. Merci.

EDIT: Donc, j'ai fondamentalement besoin de cela dans ma fonction de rappel?

$form_state = array('storage' => NULL, 'submitted' => FALSE); 
$form_build_id = $_POST['form_build_id']; 
$form = form_get_cache($form_build_id, $form_state); 
$args = $form['#parameters']; 
$form_id = array_shift($args); 
$form_state['post'] = $form['#post'] = $_POST; 
$form['#programmed'] = $form['#redirect'] = FALSE; 
drupal_process_form($form_id, $form, $form_state); 

Pour obtenir $ _POST [ 'form_build_id'], je l'ai envoyé en tant que données param, est-ce pas? Là où j'utilise form_get_cache, on dirait qu'il n'y a pas de données. Un peu perdu maintenant.

+1

Quel est exactement votre objectif? On dirait que vous vous dirigez sur la mauvaise voie ici. – googletorp

+0

Désolé si je ne l'ai pas bien expliqué, mon but est simplement de vérifier que l'option existe dans le formulaire select array et n'a pas été manipulée. Par exemple, disons que mon menu de sélection a 3 éléments, rouge, vert, bleu. Maintenant, quelqu'un tente d'entrer des informations erronées dans ma base de données et ajoute une quatrième option, noire. Si je soumets ce formulaire sans ajax, Drupal saura que le noir n'a jamais existé dans le tableau et dira qu'un choix illégal a été fait. Cependant, si j'utilise ajax avec une fonction de rappel, cette validation de base ne se produit pas, de sorte que la valeur du noir sera insérée. J'espère que cela éclaircira les choses. – Wade

Répondre

0

Puisque vous utilisez déjà AJAX, pourquoi ne pas simplement écrire un peu de jQuery pour permettre seulement la soumission de formulaire si le choix est dans la liste des choix légaux? Cela peut être fait dans le module personnalisé sur lequel vous travaillez déjà (en utilisant drupal_add_js()).

+1

Eh bien, si l'utilisateur peut manipuler le menu de sélection, ils pourraient également manipuler le javascript, c'est pourquoi je veux le faire côté serveur. Alors dois-je écrire tous les contrôles de validation de base moi-même ou y at-il une fonction drupal pour cela? Depuis sans ajax ils sont capables de trouver automatiquement hors de la forme a été manipulé. – Wade

0

Ce n'est pas spécialement 'facile', mais la manière standard de le faire serait d'utiliser aussi l'API Drupals Forms pour la soumission de callback - de cette façon, vous obtiendrez la même validation que sur un non js soumettre.

Jetez un coup d'œil à Adding dynamic form elements using AHAH. Bien qu'il ne corresponde pas exactement à votre scénario (ils reconstruisent le formulaire sur le rappel pour ajouter de nouveaux éléments, pas pour enregistrer des données), l'explication du processus de traitement est très utile.

Ensuite, il y a plusieurs modules qui tentent d'offrir la soumission du formulaire AJAX de manière générique - vous pouvez vérifier leur code sur la façon de le faire (ou peut-être juste les utiliser;)

Enfin, il y a efforts to put better support this functionality into core in Drupal 7 - les discussions pourraient aussi aider connexes.

+0

Ajout d'un commentaire à mon message d'origine, je ne savais pas comment ajouter le code dans les commentaires ... – Wade

Questions connexes