web-dev-qa-db-fra.com

API de formulaire de validation d'e-mail

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 dans la 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;
}
9
JurgenR

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é pendant la soumission du formulaire.

En savoir plus sur la validation des formulaires sur Validation des formulaires , sur la soumission de formulaires sur Soumission des formulaires ou lire l'article complet pour une meilleure compréhension de l'API Forms: Guide de démarrage rapide de l'API Form)

5
Laxman13

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_state et le $form tableau pour le 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.'));
  }
}
5
nmeegama

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.'));
}
?>
3
artfulrobot

Installez le module Email Field et corrigez-le avec le patch 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,
  );
0
Roger

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 ...

0
svelandiag