0

入力した値をデータベース内のユーザーの値に追加する更新関数を作成しようとしています。(クラスに使用できるアカウントを教師に追加します)これまでのところ、クリックすると1つのアカウントを追加してからページを更新するテストボタンがあります。

これまでの私の機能は次のとおりです。

public function add_account()
{
    $this->load->model("teacher_data_model");
    $user = $this->ion_auth->user()->row();
    $user_id = $user->id;
    $data = array(
        'user_id' => $user_id,
        'unused_accounts' => [what do I insert here?]
    );

    $this->teacher_data_model->add_accounts($data, $user_id);
    redirect('teacher', 'refresh'); 
}

この関数は確かにずさんです。私はまだこれにかなり慣れていません。この関数はユーザー ID を取得し、それを使用して教師を見つけて、所有している生徒アカウントの数を更新するモデルに渡します。これまでのところ、「unused_accounts」の値が固定されている限り、これは機能しますが、問題はこれを行うときです。

public function add_account()
{
    //  Getter of the user data
    $user = $this->ion_auth->user()->row();
    $user_id = $user->id;
    $this->load->model("teacher_data_model");

            //This gets the existing accounts
    $num_accounts["record"] =    $this->teacher_data_model->get_unused_accounts($user_id);
    $this->load->view("teacher/teacher_data_viewer", $num_accounts);


    $data = array(
        'user_id' => $user_id,
        'unused_accounts' => [what do I insert here?]
    );

            // data insertion
    $this->teacher_data_model->add_accounts($data, $user_id);
    redirect('teacher', 'refresh'); 
}

コントローラーまたはモデルの+1インクリメントかどうかはわかりませんが、この時点で検索されたデータをintとして識別することさえできないようです。

[ここに何を挿入しますか?] で $num_accounts を使用すると、次のデータベース エラーが発生します: エラー番号: 1054

「フィールド リスト」の不明な列「配列」

UPDATE teachersSET user_id= '1', unused_accounts= 配列 WHERE user_id= '1'

必要な場合に備えて、これが私のモデルです。

function add_accounts($data, $uid)
{
    $this->db->where('user_id', $uid);  
    $this->db->update('teachers',$data);
}

編集:これは、データベースからデータを取得する私の関数です

function get_unused_accounts($usersid)
{
    $this->db->select('unused_accounts');
    $this->db->from('teachers');
    $this->db->where('user_id', $usersid);
    $query = $this->db->get();
    return $query->result();
}

これがINT形式でデータを出力するかどうかはわかりません。ユーザーが少なくとも 1 つのアカウントを持っているかどうかを確認するためにこれを使用していたとき、ユーザーがアカウントを持っていなくても常に true として受け入れます。

4

2 に答える 2

1

まだコメントに答えることはできませんが

if($remaining_accounts = 1) 

常に真実である、試してみてください:

if($remaining_accounts == 1) 

比較演算子については、PHPのマニュアルを参照してください

于 2012-08-09T06:11:43.643 に答える
1

この目的のために、モデルで生の SQL を使用することをお勧めします。

function add_accounts($uid, $quantity = 1)
{
    $this->db->query('
        UPDATE teachers 
        SET unused_accounts=unused_accounts+'.$quantity.'
        WHERE user_id='.$uid
    ); 
}

unused_accountsを使用して、ユーザーの値を 1ずつ増やすことができるようになりました。

$this->teacher_data_model->add_accounts($user_id);

またはあなたが使いたい任意の量で

$this->teacher_data_model->add_accounts($user_id, $amount);

CodeIgniter の ActiveRecord が statement を受け入れるかどうかはわかりませんが、受け入れるunused_accounts=unused_accounts+'.$quantity.'場合は、コントローラでこれを使用してみてください。編集された部分については以下を参照してください

 $data = array(
    'user_id' => $user_id,
    'unused_accounts' => 'unused_accounts + '.$amount
);

編集: ActiveRecord を使用する場合は、3 番目のパラメーターを FALSE に設定して使用する必要が$this->db->set()あるように見えるため、モデルでは次のようになります。

function add_accounts($unused_accounts, $uid, $amount = 1)
{
    $this->db->where('user_id', $uid);
    $this->db->set('unused_accounts', 'unused_accounts+'.$amount, FALSE);
    $this->db->update('teachers');
}
于 2012-07-11T19:46:19.703 に答える