2010-11-28 4 views
19

En cours d'exécution CodeIgniter pour un projet de la mienne ... Im assez nouveau pour cela, j'ai les contrôles de validation de formulaire standard pour mon formulaire, sauf je ne sais pas comment vérifier si la valeur existe déjà dans la base de données.CodeIgniter - Vérification pour voir si une valeur existe déjà dans la base de données

C'est ce que j'ai pour mes règles de validation de forme jusqu'à présent

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean'); 
$this->form_validation->set_rules('rolekey', 'Role Key', 'trim|required|xss_clean'); 

Le « rolekey » est ce que je dois vérifier contre la colonne « rolekey » dans la base de données pour voir si elle existe, si elle dois-je tirer une erreur.

Toute aide serait grande.

Cheers,

Répondre

41

Il n'y a pas une vérification de validation intégrée de formulaire pour savoir si une valeur est ou non dans la base de données, mais vous pouvez créer vos propres contrôles de validation.

Dans votre contrôleur, créez une méthode similaire à ceci:

function rolekey_exists($key) 
{ 
    $this->roles_model->role_exists($key); 
} 

Et dans votre modèle qui gère les rôles, ajouter quelque chose comme ceci:

function role_exists($key) 
{ 
    $this->db->where('rolekey',$key); 
    $query = $this->db->get('roles'); 
    if ($query->num_rows() > 0){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

Et vous pouvez écrire une validation de formulaire vérifier comme ceci:

$this->form_validation->set_rules('username', 'Username', 'callback_rolekey_exists'); 

Voir cette page pour plus d'informations:

http://ellislab.com/codeigniter/user_guide/libraries/form_validation.html#callbacks

+0

T Hanks pour le commentaire ... c'est parfait ... Pourriez-vous me donner un exemple du code que je devrais utiliser pour la fonction? ...Im essayant toujours d'obtenir le coup de tout écrire dans des fonctions. merci – Chris

+0

Est-ce que cette édition aide? – davidscolgan

+0

Cest parfait ... Merci beaucoup ... Juste une question de plus, à partir de cela, comment il renvoie le message d'erreur 'rolekey existe déjà dans la base de données' – Chris

11

Si vous voulez faire de votre fonction de validation disponible dans plus d'un contrôleur, vous devez inclure la règle dans une bibliothèque de MY_Form_validation.

Je le fais dans MY_Form_validation:

function exist($str, $value){  

    list($table, $column) = explode('.', $value, 2);  
    $query = $this->CI->db->query("SELECT COUNT(*) AS count FROM $table WHERE $column = $str'"); 
    $row = $query->row(); 

    return ($row->count > 0) ? FALSE : TRUE; 

} 

Ensuite, dans votre modèle (ou contrôleur) lorsque vous définissez vos règles:

$this->form_validation->set_rules('username','username','exist[users.user_name]'); 

La règle appelle la fonction exist.

La fonction existe explose la chaîne users.user_name au point, puis interroge la base de données pour voir si un enregistrement est renvoyé. Si c'est le cas, renvoyez false, sinon vrai. La règle échouera sur un faux retour.

+0

Dans votre requête, vous avez manqué un ' –

3

vous pouvez toujours ajouter

$this->form_validation->set_rules('username','Username','is_unique[users.username]'); 

où user.username est le table.colonne

+0

Merci ....... –

7

Vous venez de modifier votre règle de validation

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[table_name.rolename]'); 
+2

Je suis d'accord, ce serait la méthode la plus simple maintenant.Au moment où cette question a été posée à l'origine, cependant, la règle de validation is_unique n'existait pas encore (elle a été ajoutée dans CodeIgniter version 2.1, publiée 14 novembre 2011). –

0

Ajouter la règle is_unique à la validation de votre formulaire comme ci-dessous

$this->form_validation->set_rules('rolename', 'Role Name', 'trim|required|xss_clean|is_unique[your_database_table_name.rolename]'); 
$this->form_validation->set_rules('rolekey', 'Role Key', 'trim|required|xss_clean|is_unique[your_database_table_name.rolekey]'); 
Questions connexes