2012-02-25 1 views
0

Mon point de vue contient un formulaire avec 3 entrées similaires:Comment définir un message unique pour une règle sur plusieurs entrées dans CodeIgniter?

<input type="text" name="email1" /> 
<input type="text" name="email2" /> 
<input type="text" name="email3" /> 

J'ai ajouté un rappel pour contrôler que chaque zone de texte ne reçoit pas l'e-mail en cours de session.

public function check_session_email($email){ 
    if($this->session){ 
     if ($this->session->userdata('email') != $email){ 
      return TRUE; 
     }else{ 
      $this->form_validation->set_message('check_session_email', 'You can't include your own email address.'); 
      return FALSE; 
     } 
    } 
} 

Si j'utilise l'email de la session en cours, le message d'erreur s'affiche deux fois (même chose avec trois).

enter image description here

Bien sûr, cela semble logique ... mais pas très convivial. Donc ma question est: comment inclure un seul message d'erreur pour une règle?

+0

Si vous pouvez obtenir CI pour mettre les messages dans un tableau, vous pouvez utiliser [ 'array_unique()'] (http://php.net/manual/en/function.array-unique.php). – Bojangles

Répondre

1

Votre meilleure option est de valider ceci en dehors de la bibliothèque de validation de formulaire.

méthode Contrôleur:

// general validation rules 

if($this->input->post('email1') == $this->session->userdata('email') || $this->input->post('email2') == $this->session->userdata('email') || $this->input->post('email3') == $this->session->userdata('email')) 
{ 
    $data['own_mail_error'] = true; 
} 

if ($this->form_validation->run() == FALSE || isset($data['own_mail_error'])) 
{ 
    $this->load->view('myform', $data); 
} 
else 
{ 
    $this->load->view('formsuccess'); 
} 

Et votre point de vue:

<?php echo validation_errors(); ?> 
<?php if(isset($own_mail_error)): ?> 
<p>You can't include your own email address.</p> 
<?php endif; ?> 
+0

Merci, cela a du sens. J'ai remplacé la première ligne par 'if (in_array ($ this-> session-> userdata ('email'), $ this-> input-> post()))' pour obtenir quelque chose de plus court. – Dacobah

0
public function check_session_email($email) 
    { 
     if($this->session) 
     { 
      if ($this->session->userdata('email') != $email) 
      { 
       return TRUE; 
      } 
     } 
     else 
     { 
      if($this->form_validation->_field_data['email1']['error']=='' && $this->form_validation->_field_data['email2']['error']=='' && $this->form_validation->_field_data['email3']['error']=='') 
      { 
       $this->form_validation->set_message('check_session_email', 'You can\'t include your own email address.'); 
      } 
      return FALSE; 
     } 
    } 
Questions connexes