web-dev-qa-db-fra.com

CodeIgniter - Vérification pour voir si une valeur existe déjà dans la base de données

Im exécutant CodeIgniter pour un de mes projets ... Je suis assez nouveau dans ce domaine, 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.

Voici ce que j'ai pour mes règles de validation de formulaire 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');

La "clé de rôle" est ce que je dois vérifier par rapport à la colonne "clé de rôle" dans la base de données pour voir si elle existe, si elle a besoin de renvoyer une erreur.

Toute aide serait grande.

À votre santé,

21
Chris

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

Dans votre contrôleur, créez une méthode similaire à celle-ci:

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

Et dans votre modèle qui gère les rôles, ajoutez 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 puis vous pouvez écrire un contrôle de validation de formulaire comme ceci:

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

Voir cette page pour plus d'informations:

https://www.codeigniter.com/user_guide/libraries/form_validation.html#callbacks-your-own-validation-methods

48
davidscolgan

Si vous souhaitez rendre votre fonction de validation disponible dans plusieurs contrôleurs, vous devez inclure la règle dans une bibliothèque 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;

}

Puis 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, retournez false, sinon true. La règle échouera lors d'un faux retour.

12
mos fetish

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]'); 
7
prash.patil

vous pouvez toujours simplement ajouter

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

où user.username est la table.column

3
guest

Ajoutez la règle is_unique à votre validation de 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]');
1
B.K

Cela fonctionne pour moi pourrait fonctionner pour quelqu'un

Dans votre contrôleur, créez une méthode similaire à celle-ci:

function rolekey_exists('table','field','value')
{
  $this->roles_model->role_exists($key);
}

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

function role_exists($table,$field,$value)
{
    $this->db->where($field,$value);
    $query = $this->db->get($table);
    if (!empty($query->result_array())){
        return 1;
    }
    else{
        return 0;
    }
}
1
Deepak