2016-05-11 11 views
1

私はCodeigniterのアップデートに関する類似の質問と回答を読んだが、私の問題を解決することはできなかった。Codeigniterを使用した挿入/更新

私はuserテーブルとuser_roleテーブルを持っています。ユーザーテーブルにはuserid、name、addressなどの情報があり、user_roleテーブルにはuseridとrole_idがあります。ここで、role_idはエントリ、編集、ビューなどのロールのIDです。

管理者は、ユーザ情報を更新する。役割はチェックボックスとして表示されます。ユーザーのロールを更新するには、user_roleテーブルでそのユーザーのすべての行を削除し、新しいロールを挿入しました。私はこれを試してみました:

すべてのチェックボックスをオフにすると、すべての行が削除されます。それは正常に動作しています。しかし、これは適切な方法ではないようです。ご案内ください。

+0

あなたを渡すことができますしたい場合、あなたはCodeIgniterの上の役割によって権限についての詳細情報が必要な場合は、ここに私の答えを見ることができ、ユーザID –

+0

を渡すためにUSER_ROLEを更新する必要があります:http://stackoverflow.com/questions/37126013/secure-php-functions-with-array/37126471?noredirect=1#comment61833227_37126471 –

+0

そのクリア - あなたのコードはチェックボックスがチェックされていない場合、すべてのユーザーロールを削除します。あなたは期待している?だからあなたを悩ます唯一のことは、別のブロックを処理するelseブロックです。 – sintakonte

答えて

0
if($_POST['role']){ 
    foreach ($_POST['role'] as $val) { 

     $arr['user_id'] = $id; 
     $arr['role_id'] = $val;     

     // You need to run Update query. do not need to delete the records every time. 
     $where = array('user_id'=>$arr['user_id']); 
     $this->modelname->updateRecord($tablename,$arr,$where); 

     //It will update the records on post 

    } 
} 
+0

は、フォームにチェックされていないdbに値があるとどうなりますか? この値は削除する必要があります - 彼のアプローチは良いです – sintakonte

+0

Dbで彼はデフォルトで値のNULLを取ることができますそれを削除するときにもNullに行きます。 –

+0

あなたは私が書いたことを理解していない、あなたの例ではすべてのチェックされた属性を処理しますが、データベースに入っていてチェックされていない人はどうですか? – sintakonte

0

最初。 $ idはどこに定義されていますか?

秒。 Codeigniterには、$ _POSTまたは$ _GETの使用を必要としないライブラリがあります。

第3。 1人のユーザーが複数の役割を持つ必要がありますか?私はあなたの選択などを使用することをお勧めします。

<select name="role"> 
    <option value="user">User</option> 
    <option value="employee">Employee</option> 
    <option value="admin">Admin</option> 
</select> 

たぶん、あなたは、オプションの値の役割のIDを使用する必要が...第四

<option value="1">User</option> 
<option value="2">Employee</option> 
<option value="3">Admin</option> 

のようなものを。もしあなたが更新をしたいのであれば、なぜコードニターORMの更新メソッドを使わないのですか?このようにして、モデルフォルダにgeneral_model.phpというファイルを作成しました(このフォルダとMVCパターンを使用していますか?)。ORMとコントローラの間のファサードのようなものがあります。機能の一つが更新され:

public function update($tablename, $data, $where) 
{     
    foreach($where as $key=>$value) 
     $this->db->where($key, $value); 
    $this->db->update($tablename, $data); 

    if ($this->db->affected_rows() >= 0) return TRUE; 
    else         return FALSE; 
} 

使用例コントローラから、あなたのケースのために(ユーザーが1つのロールのみを使用して)次のようになります。

$this->general_model->update("users_role", array("role_id"=>$this->input->post("")) , array("user_id"=>$id)); 

私はそれはあなたを助け願っています。

PS:あなたは私がgeneral_model.php

関連する問題