2010-11-16 5 views
2

Je souhaite valider l'entrée d'un formulaire avant de l'enregistrer dans la base de données pour éviter l'injection Sql et XSS. Je ne veux pas modifier directement le code du module, j'ai donc créé un module personnalisé pour faire ce genre de choses mais je ne suis pas sûr de savoir comment utiliser l'élément #validate pour appeler une fonction de validation .drupal valider formulaire

Dans mon module personnalisé, j'ai cette fonction avec cette logique mis en œuvre:

function mymodule_form_alter(&$form, $form_state, $form_id) { 

    switch ($form_id) { 
    case 'myform': 
     drupal_set_message('this message is printed :D'); 
     $form['#validate'] = array('my_validation_function'); 
    break; 
    }   
} 

function my_validation_function($form, &$form_state) { 

    drupal_set_message('not printed :('); 
    watchdog('not printed :___(', 'not printed :___('); 

} 

Je ne sais pas exactement comment cela fonctionne, mais il semble que la seconde fonction est jamais appelée lorsque je soumets la forme.

EDIT (SOLUTION):

J'ai enfin trouvé où la validation a été placé dans le module:

$form['mod_name']['submit']['#validate'][] = 'my_validation_function'; 

Je pensais que cette forme simplement ajouter [ '# validate'] fonctionnerait malgré le contenu de la variable $ form, mais semble que selon l'implémentation du module si vous ne placez pas l'élément #validate où il est attendu, il est ignoré.

+1

Avez-vous essayé de passer la fonction de validation sans le tableau? '$ form ['# validate'] = 'my_validation_function';' – DrColossos

+0

@DrColossos Je l'ai essayé mais toujours pas de chance –

Répondre

5

Veillez à remplacer la clé #validate car vous remplacerez tous les autres validateurs qui ont été ajoutés avant vous.

Idéal pour ajouter votre fonction à celui-ci;

$form['#validate'][] = 'my_validation_function'; 
+0

+1 pour le pourboire mais ça ne marche pas encore. Toute idée sur comment puis-je le suivre mieux? Ou un autre moyen de mettre en œuvre la validation? Je vous remercie. –

+1

Ça devrait marcher. Voyez-vous vos messages de débogage? Essayez d'effacer votre cache, mais je ne pense pas que ce soit un problème de cache. Mettez die() dans votre validateur :) – galymzhan

+0

isnt druapl beautiful <3 –