2012-04-25 1 views
2

Je suis nouveau à travailler avec Codeigniter et devez définir une règle de validation de formulaire et un message de validation personnalisé pour vérifier si l'adresse e-mail existe dans la base de données soumise dans un formulaire de mot de passe oublié. Si l'adresse e-mail existe, elle envoie un e-mail, si ce n'est pas le cas, elle doit recharger le formulaire, définir la valeur du champ sur ce que l'utilisateur a saisi et fournir une erreur indiquant que l'adresse e-mail n'existe pas.CI - validation du formulaire de mot de passe oublié pour vérifier si l'adresse existe dans la base de données

J'ai ce qui suit dans le contrôleur ...

public function forgot_password() 
{ 
    $this->form_validation->set_rules('email_address','Email Address','trim|required|valid_email'); 

    if($this->form_validation->run() == FALSE) 
    { 
     $this->forgot_password_form(); 
    } 
    else 
    { 
     $this->load->model('membership_model'); 
     if($query = $this->membership_model->val_forgot_password()) 
     { 
      $data['main_content'] = 'forgot_password_sent'; 
      $this->load->view('includes/template', $data); 
     } 
     else 
     { 
      $this->form_validation->set_message('email_address','The email address you provided does not exist.'); 
      $this->forgot_password_form(); 
     } 
    } 
} 

et dans le modèle ...

public function val_forgot_password() 
{ 
    $this->db->where('email_address', $this->input->post('email_address')); 
    $query = $this->db->get($this->members); 

    if($query->num_rows == 1) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

et la forme est ...

<?php 

echo form_open('login/forgot_password'); 
echo "Email Address: " . form_input('email_address', set_value('email_address', '')); 
echo br(2); 
echo form_submit('submit','Send Email'); 
echo form_close(); 
echo br(1); 

echo validation_errors('<p>Error: '); 

?> 

Lorsque le formulaire est soumis avec une adresse e-mail valide, il va correctement à la page de succès, mais si l'adresse e-mail n'existe pas, il semble recharger le formulaire mais ne donne pas d'erreur.

Aide pls! : D

Répondre

3

Vous devez utiliser un rappel pour vérifier l'existence du courrier électronique. Donc, votre contrôleur serait quelque chose comme ...

public function forgot_password() 
{ 
    $this->form_validation->set_rules('email_address','Email Address','trim|required|valid_email|callback__check_email_exists'); 

    if($this->form_validation->run() == FALSE) 
    { 
     // VALIDATION ERRORS, SHOW VIEWS 
    } 
    else 
    { 
     // ALL IS GOOD, UPDATE EMAIL, AND REDIRECT TO CURRENT URL 
    } 
} 

Et votre rappel (toujours dans votre contrôleur) serait quelque chose comme ...

public function _check_email_exists($email) 
{ 
    // LOAD AND USE YOUR MODEL TO CHECK EMAIL EXISTS HERE 
    if (! $email_exists) 
    { 
    $this->form_validation->set_message('email_address', 'That email address don\'t exist, sucka!'); 
    return FALSE; 
    } 
    else 
    { 
    return TRUE; 
    } 
} 

Tout cela est précisé dans les documents excellents CI ici, et je recommanderais de respecter les conventions CI si vous êtes nouveau à ce sujet.

http://codeigniter.com/user_guide/libraries/form_validation.html

EDIT: Il y a aussi un autre problème que je faisais face tout en faisant cela dans codeigniter3. Vous devez nommer le nom du champ de message au rappel. Ainsi, au lieu de $this->form_validation->set_message('email_address', 'That email address don\'t exist, sucka!');

Cela devrait être

$this->form_validation->set_message('_check_email_exists', 'That email address don\'t exist, sucka!');

+0

Oui, j'ai vu cette fonction de rappel et je me demandais si ce serait la meilleure façon de le faire, ce que vous avez confirmé est certainement, merci. – pmgrace

0

vous devez étendre MY_Form_validation cette façon, votre fonction peut être utilisée sur toute forme, non seulement ceux qui résident dans votre contrôleur.

Questions connexes