Codeigniter:改进代码检查功能

时间:2010-01-22 05:33:37

标签: codeigniter

我有以下函数检查以确保输入的代码与数据库中的代码匹配。

如果是,它会向用户添加一个信用,并从相应的行中减去一个。

    else if ($code_enter != NULL){

        $code_check = $this->CI->db->select('code')->from('be_coupons')->where('code', $code_enter)->limit(1)->get();

        $credits_list = $this->CI->db->select('*')->from('be_coupons')->where('code', $code_enter)->limit(1)->get();

        if ($code_check->row() && $credits_list->row()->credits > 0){

            $data['credits'] = ($this->CI->db->select('credits')->where('user_id', $id)->get('be_user_profiles')->row()->credits + 1);

            $datas['credits'] = ($this->CI->db->select('credits')->where('code', $code_enter)->get('be_coupons')->row()->credits - 1);

            $this->CI->db->update('be_coupons', $datas, array('code' => $code_enter));

            $this->CI->home_model->update('UserProfiles',$data, array('user_id' => $id));
            flashMsg('success',"WOOT");
            redirect('home','location');
        }
        else if ($code_check->row() && $credits_list->row()->credits < 0){
            flashMsg('warning','The code you entered is no longer valid.');
            redirect('home/addCredit','location');

        }
        else{
            flashMsg('warning','The code you entered is not valid.  Check your entry and try again.');
            redirect('home/addCredit','location');
        }
    }

这段代码有效,但我相信我是多余的。你能简化一下,让它更优雅吗?谢谢!

2 个答案:

答案 0 :(得分:0)

你能为这些创建功能并在你的功能中调用它们吗?

 function somename(){$this->CI->db->select('code')->from('be_coupons')->where('code', $code_enter)->limit(1)->get();

返回数据;}

function othername(){
        $credits_list = $this->CI->db->select('*')->from('be_coupons')->where('code', $code_enter)->limit(1)->get();
return data;}

function again anotherone(){
            ($this->CI->db->select('credits')->where('user_id', $id)->get('be_user_profiles')->row()->credits + 1);
}
etc.

然后在你的功能中,

else if ($code_enter != NULL){

        $code_check = $this->somename();

        $credits_list = $this->othername();

        if (
...

答案 1 :(得分:0)

shin是正确的,这个db工作应该在模型中完成。

通过减少语法和内联更新,您可以提高效率。

  1. select('*')是默认值,如果你不使用select(),它会为你选择SELECT。
  2. from('be_coupons') - &gt; get()可以是get('be_coupons')。
  3. 你可以这样做,而不是只计算一件事,你可以做到:

    $check = $this->CI->db->where('code', $code_enter)->count_all_results('be_coupons') > 0; // bool true/false
    

    而不是提取数字,在PHP中增加并更新,只需执行以下操作:

    $this->db->set('field', 'field + 1', FALSE);
    $this->db->update('table');
    

    FALSE非常重要,否则它会将第二个参数视为一个字段并将其转义为:

      

    SET field =“field + 1”。