API de formulaire de validation d'e-mail

9

Quelle est la meilleure façon de gérer la validation des e-mails côté serveur dans l'API de formulaire?
Peut-il être implémenté quelque part à l'intérieur d'une partie du formulaire décrit ci-dessous ou existe-t-il d'autres options?

 $form['address']['mail'] = array(
   '#type' => 'textfield',
   '#title' => t('E-mail'),
   '#required' => TRUE,
   '#default_value' => $subscription->mail,
   '#maxlength' => 255,
 ); 

 $form['submit'] = array(
   '#type' => 'submit',
   '#value' => t('Versturen'),
 );

 return $form;
}
JurgenR
la source

Réponses:

5

Créez une fonction de validation pour votre formulaire. Voici un exemple d'utilisation de votre formulaire. Par exemple, supposons que votre code de formulaire se trouve dans une fonction appelée my_email:

<?php
function my_email() {
  $form = array();

  $form['address']['mail'] = array(
   '#type' => 'textfield',
   '#title' => t('E-mail'),
   '#required' => TRUE,
   '#default_value' => $subscription->mail,
   '#maxlength' => 255,
  ); 

  $form['submit'] = array(
   '#type' => 'submit',
   '#value' => t('Versturen'),
  );

  return $form;
}

function my_email_validate($form, &$form_state) {
  // YOUR CUSTOM VALIDATION CODE GOES HERE
 if (!valid_email_address($mail)) {
   form_set_error('submitted][email_address', t('The email address appears to be invalid.'));
   }
}

function my_email_submit($form, &$form_state) {
  // YOUR CUSTOM SUBMIT CODE GOES HERE
}
?>

Cette fonction vous permettra d'écrire du code personnalisé pour déterminer si les valeurs entrées dans vos champs sont valides ou non. Vous pouvez également ajouter une fonction d'envoi personnalisée pour votre formulaire afin d'exécuter du code personnalisé lors de l'envoi du formulaire.

Pour en savoir plus sur la validation des formulaires , consultez Validation des formulaires , soumission des formulaires sur Soumission des formulaires ou lisez l'intégralité de l'article pour une meilleure compréhension de l'API Forms: Form API Quickstart Guide

Laxman13
la source
2
Il existe également une fonction de validation très robuste intégrée à Drupal: api.drupal.org/api/drupal/includes--common.inc/function/…
codexmas
5

Au lieu d'ajouter un gestionnaire de validation de formulaire au formulaire, vous pouvez ajouter un gestionnaire de validation à l'élément de formulaire qui doit être validé: Utilisez #element_validate , qui accepte un tableau de gestionnaires de validation qui seront appliqués à l'élément de formulaire.

$form['email'] = array(
  '#type' => 'textfield',
  '#title' => 'Email',
  '#required' => TRUE,
  '#element_validate' => array('myelement_email_validate')
);

Le gestionnaire de validation reçoit trois arguments: l'élément de formulaire en cours de validation, le $form_stateet le $formtableau du formulaire contenant l'élément de formulaire. Le gestionnaire de validation doit appeler form_error () ou form_set_error () pour signaler toute erreur de validation.

function myelement_email_validate($element, &$form_state, $form) {
  $value = $element['#value'];
  if (!valid_email_address($value)) {
    form_error($element, t('Please enter a valid email address.'));
  }
}
nmeegama
la source
1
#element_validate n'est pas une propriété personnalisée, mais une propriété Drupal. Le code show est très bien, et c'est une alternative valide à ce que propose d'autres réponses, y compris celle suggérant une solution qui n'est valide que pour le module Webform.
kiamlaluno
L'un des avantages de l'utilisation de l'approche de @ nmeegama est qu'elle rend votre code beaucoup plus clair, au lieu d'avoir tout dans un grand validate ().
leymannx
1
Un autre avantage de l'utilisation de la solution de @ nmeegama est que le champ peut également être réutilisé sous d'autres formes sans avoir à revalider.
Supriya Rajgopal
Vous pouvez également réutiliser le code ailleurs, ce qui est bien si vous avez la même validation pour plusieurs éléments.
mbomb007
3

Expliqué ici: http://drupal.org/node/279127

<?php
$mail = $form_values['submitted_tree']['email_address'];
if (!valid_email_address($mail)) {
  form_set_error('submitted][email_address', t('The email address appears to be invalid.'));
}
?>
artfulrobot
la source
La page liée montre la solution pour le module Webform.
kiamlaluno
0

Vous pouvez simplement utiliser le module Elements et simplement utiliser le 'emailfield' dans la propriété #type de l'élément de formulaire, comme ceci:

 $form['YOUR_FIELD_KEY'] = array(
    '#type' => 'emailfield',
    '#title' => t('Email'),
    '#size' => 20,
    '#maxlength' => 20,
    '#description' => t('Enter a valid email'),
    '#required' => TRUE,
  );

Rien de plus simple avec le module elements, rendre la validation personnalisée pour un simple champ email n'a pas de sens, vous n'avez pas à réinventer la roue ...

svelandiag
la source
0

Installez le module Email Field et corrigez-le avec le correctif sur le commentaire 16. Ensuite, utilisez le code dans la description du problème lié pour définir votre champ de messagerie avec validation intégrée:

$form['email'] = array(
    '#type' => 'email',
    '#title' => t('Email'),
    '#required' => TRUE,
    '#default_value' => "",
    '#description' => "Please enter your email.",
    '#size' => 20,
    '#maxlength' => 20,
  );
Roger
la source
-1

L'adresse e-mail peut être validée avec votre gestionnaire de validation de formulaire

Si la fonction your_formdéfinit votre formulaire, le gestionnaire de validation par défaut serait your_form_validateou sinon vous pouvez également le définir manuellement

 $form['#validate'] = array('callback_to_validate');


 function your_form_validate($form, $form_state){
   if(!filter_var($form_state['values']['mail'], FILTER_VALIDATE_EMAIL))
     form_set_error('email', t('Invalid Email Address'))
 }
Shoaib Nawaz
la source