2011-11-15 1 views
1
$crud->set_rules('user_password', 'Password', 'trim|required|matches[konfirmpass]'); 
$crud->set_rules('konfirmpass', 'Konfirmasi Password', 'trim|required'); 

$crud->callback_edit_field('user_password',array($this,'_user_edit')); 
$crud->callback_add_field('user_password',array($this,'_user_edit')); 

fonction de rappel:Codeigniter Grocery Crud mettre à jour le champ?

function _user_edit(){ 
    return '<input type="password" name="user_password"/> Confirmation password* : <input type="password" name="konfirmpass"/>'; 
} 

Ma question est de savoir comment mettre à jour si seulement "mot de passe" pas vide?

+1

Veuillez nous indiquer * quelle * bibliothèque CRUD vous utilisez. –

+0

Aussi, quelle est la version CI? –

+0

Merci avant, j'utilise Grocerycrud, http://www.grocerycrud.com/ et CodeIgniter v 2.0.3 –

Répondre

4

J'ai installé CI 2.0.3 et GC 1.1.4 pour tester parce qu'en un coup d'œil, votre code était correct. Comme il se trouve, c'est et votre code fonctionne. J'ai modifié la méthode hors de la boîte employees_management dans le contrôleur examples avec GC. Ajout d'une colonne user_password à la base de données et ajout de votre code au contrôleur.

Le code garantit que les champs de mot de passe correspondent et qu'ils ne sont pas vides lors de l'envoi.

  • vides résultats dans "The Password field is required"
  • résultats dans Mismatched "The Password field does not match the konfirmpass field."

Peut-être que si cela ne fonctionne pas pour vous, vous devez poster toute votre méthode au lieu de simplement les règles et callbacks afin que nous puissions voir s'il y a d'autres problèmes.

Working

Modifier

Pour modifier le champ, que si le mot de passe a été modifié, vous devez ajouter

$crud->callback_before_update(array($this,'update_password')); 

function update_password($post) { 
if(empty($post['user_password'])) { 
    unset($post['user_password'], $post['konfirmpass']); 
} 

return $post; 
} 

Cela peut cependant dire que vous devez supprimer la validation pour un mot de passe vide en fonction de l'ordre dans lequel les rappels sont exécutés (s'ils sont avant ou après la validation du formulaire). S'ils s'exécutent avant la validation du formulaire, vous devrez également exécuter un appel au callback_before_insert() et ajouter vos règles de validation dans les deux rappels. Insérer évidemment aura besoin de la règle required, et la mise à jour ne le fera pas.

Edit 2, Précisions sur Modifier 1

Après avoir regardé en elle, la validation passe avant les callbacks, de sorte que vous ne pouvez pas définir des règles de validation dans les fonctions de rappel. Pour ce faire, vous devez utiliser une fonction appelée getState() qui vous permet d'ajouter une logique basée sur l'action effectuée par le CRUD.

Dans ce cas, nous voulons seulement rendre le champ de mot de passe required lorsque nous sommes ajoutant une rangée, et non nécessaire lors de la mise à jour . Donc, en plus du rappel update_password() ci-dessus, vous devrez envelopper vos règles de validation de formulaire dans une vérification d'état.

if($crud->getState() == 'insert_validation') { 
    $crud->set_rules('user_password', 'Password', 'trim|required|matches[konfirmpass]'); 
    $crud->set_rules('konfirmpass', 'Konfirmasi Password', 'trim|required'); 
} 

Cela ajoutera les options de validation si le CRUD est en cours d'insertion.

+0

Merci 'Ben Swinburne', oui que je veux dire. Si l'utilisateur ajoute un nouvel enregistrement, la règle de validation doit fonctionner. Ce que je veux dire exactement est si l'utilisateur 'edit record' et laissez le mot de passe vide de champ ainsi le mot de passe pas besoin de mettre à jour et la règle de validation n'est pas exigée ici, mais si l'utilisateur éditent l'enregistrement et le mot de passe de champ Merci encore pour votre aide. –

+0

J'ai mal compris votre question. J'ai mis à jour ma réponse. –

+0

Merci, je vais essayer d'abord. –

Questions connexes