it-swarm.it

Modulo di convalida e-mail api

Qual è il modo migliore per gestire la convalida della posta elettronica sul lato server nell'API del modulo?
Può essere implementato da qualche parte all'interno del modulo descritto di seguito o ci sono altre opzioni?

 $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

Crea una funzione di validazione per il tuo modulo. Ecco un esempio usando il tuo modulo. Ad esempio, supponiamo che il codice del modulo sia in una funzione chiamata 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
}
?>

Questa funzione ti permetterà di scrivere un codice personalizzato per determinare se i valori inseriti nei tuoi campi sono validi o meno. È inoltre possibile aggiungere una funzione di invio personalizzata per il modulo per eseguire il codice personalizzato durante l'invio del modulo.

Maggiori informazioni sulla convalida dei moduli su Convalida moduli , invio di moduli su Invio moduli oppure leggi l'intero articolo per una migliore comprensione dell'API dei moduli: Guida rapida all'API dei moduli

5
Laxman13

Invece di aggiungere un gestore di convalida del modulo al modulo, è possibile aggiungere un gestore di convalida all'elemento del modulo che deve essere convalidato: Usa # element_validate , che accetta un array di gestori di validazione a cui verrà applicato l'elemento del modulo.

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

Il gestore della convalida riceve tre argomenti: l'elemento del modulo in fase di convalida, il $form_state e il $form array per il modulo contenente l'elemento modulo. Il gestore della convalida deve chiamare form_error () o form_set_error () per segnalare eventuali errori di convalida.

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

Spiegato qui: 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

Installa il modulo Email Field e correggilo con patch sul commento 16. Quindi usa il codice nella descrizione del problema collegato per definire il tuo campo email con la validazione integrata:

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

Puoi semplicemente usare il modulo Elements e usare semplicemente 'emailfield' nella proprietà #type dell'elemento form, proprio come questo:

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

Semplicemente con il modulo elements, rendere la convalida personalizzata per un semplice campo e-mail non ha senso, non è necessario reinventare la ruota ...

0
svelandiag