Codeigniter: улучшить функцию проверки кода - PullRequest
0 голосов
/ 22 января 2010

У меня есть следующая функция, которая проверяет, совпадает ли введенный код с кодом в базе данных.

Если это так, он добавляет один кредит пользователю и вычитает один из соответствующей строки.

    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 голосов
/ 22 января 2010

голень верна, эту работу с БД следует выполнить в модели.

Вы можете сделать его еще более эффективным, уменьшив синтаксис и обновив встроенный код.

  1. select ('*') по умолчанию, если вы не используете select (), он будет SELECT * для вас.
  2. from ('be_coupons') -> get () можно получить ('be_coupons').

Вместо того, чтобы просто что-то посчитать, можно сделать следующее:

$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');

ЛОЖЬ важна, иначе она будет рассматривать второй параметр как поле и экранировать его как:

SET field = "field + 1".

0 голосов
/ 22 января 2010

Можете ли вы создать функцию для них и вызвать их в своей функции?

 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 (
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...