Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更新查询在codeigniter中不工作?_Php_Mysql_Codeigniter_Sql Update - Fatal编程技术网

Php 更新查询在codeigniter中不工作?

Php 更新查询在codeigniter中不工作?,php,mysql,codeigniter,sql-update,Php,Mysql,Codeigniter,Sql Update,model.php public function verifyLogin($username, $entered_password, $captcha_input) { $this->db->trans_start(); $sql = "SELECT name, selector, password, login_attempts

model.php

public function verifyLogin($username, $entered_password, $captcha_input) {

    $this->db->trans_start();

    $sql = "SELECT 
                name,
                selector,
                password,
                login_attempts
            FROM
                company
            WHERE
                username = ?
            LIMIT
                1
            ";

    $query = $this->db->query($sql, $username);
    $result_num = $query->num_rows();

    if ($result_num == 1) {

        $stored_password = $query->row()->password;
        $login_attempts  = $query->row()->login_attempts;

        if (crypt($entered_password, $stored_password) == $stored_password) {

            if ($captcha_input == $this->session->userdata('captchaWord'))
            {
                //recreate captcha
            }
            $data['company_name']       = $query->row()->name;
            $data['company_selector']   = $query->row()->selector;

            //Not working
            $sql = "UPDATE
                        company
                    SET
                        login_attempts = 0
                    WHERE
                        username = ?
                    ";
            $query = $this->db->query($sql, $username);
            unset($this->captcha);

            return $data;
        } 
        else {

            if ($login_attempts >= 3)
            {
                 //Enable CAPTCHA
                $random_number = substr(number_format(time() * rand(),0,'',''),0,6);
                $vals = array(
                'word'          => $random_number,
                'img_path'      => './captcha/',
                'img_url'       => base_url().'captcha/',
                'font_path'     => './path/to/fonts/texb.ttf',
                'img_width'     => '150',
                'img_height'    => 30,
                'expiration'    => 7200,
                'word_length'   => 8,
                'font_size'     => 16,
                'img_id'        => 'Imageid',
                'pool'          => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',

                // White background and border, black text and red grid
                'colors'        => array(
                        'background' => array(255, 255, 255),
                        'border' => array(255, 255, 255),
                        'text' => array(0, 0, 0),
                        'grid' => array(255, 40, 40)
                    )
                );

                $this->captcha = create_captcha($vals);
                $this->session->set_userdata('captchaWord', $random_number);
            }

            //Not working
            $sql = "UPDATE
                        company
                    SET
                        login_attempts = login_attempts + 1
                    WHERE
                        username = ?
                    ";
            $query = $this->db->query($sql, $username);

            echo $this->db->last_query();
            return FALSE;
        }
    } else {
        return 0;
    }

    $this->db->trans_complete();

    if ($this->db->trans_status() === FALSE) {
        return 'Transaction failed';
    }
}
public function testAdminLogin() {
    $this->load->model('Company_model');

    $is_logged_in = $this->Company_model->verifyLogin('sarah', '33123', '');

    if ($is_logged_in === 0) {

        echo "No username found";
    } 
    else if ($is_logged_in === FALSE) {

        echo "Password not matched";
        $data['cap'] = $this->Company_model->getCaptcha();

        if (isset($data['cap']))
        {
            $this->load->view('test_captcha', $data);
        }
    }
    else if ($is_logged_in === 'Transaction failed') {
        //possibly an error
    }
    else {
        //successful

        $session_array = array(
            'company_selector' => $is_logged_in['company_selector'],
            'company_name' => $is_logged_in['company_name']
            );

        $this->session->set_userdata('session_array', $session_array);
        echo "Login successful. Company selector: ".$this->session->userdata['session_array']['company_selector'];
    }
}
controller.php

public function verifyLogin($username, $entered_password, $captcha_input) {

    $this->db->trans_start();

    $sql = "SELECT 
                name,
                selector,
                password,
                login_attempts
            FROM
                company
            WHERE
                username = ?
            LIMIT
                1
            ";

    $query = $this->db->query($sql, $username);
    $result_num = $query->num_rows();

    if ($result_num == 1) {

        $stored_password = $query->row()->password;
        $login_attempts  = $query->row()->login_attempts;

        if (crypt($entered_password, $stored_password) == $stored_password) {

            if ($captcha_input == $this->session->userdata('captchaWord'))
            {
                //recreate captcha
            }
            $data['company_name']       = $query->row()->name;
            $data['company_selector']   = $query->row()->selector;

            //Not working
            $sql = "UPDATE
                        company
                    SET
                        login_attempts = 0
                    WHERE
                        username = ?
                    ";
            $query = $this->db->query($sql, $username);
            unset($this->captcha);

            return $data;
        } 
        else {

            if ($login_attempts >= 3)
            {
                 //Enable CAPTCHA
                $random_number = substr(number_format(time() * rand(),0,'',''),0,6);
                $vals = array(
                'word'          => $random_number,
                'img_path'      => './captcha/',
                'img_url'       => base_url().'captcha/',
                'font_path'     => './path/to/fonts/texb.ttf',
                'img_width'     => '150',
                'img_height'    => 30,
                'expiration'    => 7200,
                'word_length'   => 8,
                'font_size'     => 16,
                'img_id'        => 'Imageid',
                'pool'          => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',

                // White background and border, black text and red grid
                'colors'        => array(
                        'background' => array(255, 255, 255),
                        'border' => array(255, 255, 255),
                        'text' => array(0, 0, 0),
                        'grid' => array(255, 40, 40)
                    )
                );

                $this->captcha = create_captcha($vals);
                $this->session->set_userdata('captchaWord', $random_number);
            }

            //Not working
            $sql = "UPDATE
                        company
                    SET
                        login_attempts = login_attempts + 1
                    WHERE
                        username = ?
                    ";
            $query = $this->db->query($sql, $username);

            echo $this->db->last_query();
            return FALSE;
        }
    } else {
        return 0;
    }

    $this->db->trans_complete();

    if ($this->db->trans_status() === FALSE) {
        return 'Transaction failed';
    }
}
public function testAdminLogin() {
    $this->load->model('Company_model');

    $is_logged_in = $this->Company_model->verifyLogin('sarah', '33123', '');

    if ($is_logged_in === 0) {

        echo "No username found";
    } 
    else if ($is_logged_in === FALSE) {

        echo "Password not matched";
        $data['cap'] = $this->Company_model->getCaptcha();

        if (isset($data['cap']))
        {
            $this->load->view('test_captcha', $data);
        }
    }
    else if ($is_logged_in === 'Transaction failed') {
        //possibly an error
    }
    else {
        //successful

        $session_array = array(
            'company_selector' => $is_logged_in['company_selector'],
            'company_name' => $is_logged_in['company_name']
            );

        $this->session->set_userdata('session_array', $session_array);
        echo "Login successful. Company selector: ".$this->session->userdata['session_array']['company_selector'];
    }
}
当我运行此命令时,数据库中的记录不会得到更新。它应该增加1,但值保持不变。 从
$this->db->last\u query()
返回的SQL语句是正确的。我将其复制并粘贴到MySQL workbench中,更改生效


我尝试了活动记录也没有用。

这与
$this->db->trans_complete()有关。当用户输入错误的密码时,它会立即返回一个值,因此事务永远不会完成,更改也永远不会提交

必须设置标志来检查错误的密码

private $wrong_password = FALSE;

if ($login_attempts >= 3)
                {
                     //Enable CAPTCHA
                    $random_number = substr(number_format(time() * rand(),0,'',''),0,6);
                    $vals = array(
                    'word'          => $random_number,
                    'img_path'      => './captcha/',
                    'img_url'       => base_url().'captcha/',
                    'font_path'     => './path/to/fonts/texb.ttf',
                    'img_width'     => '150',
                    'img_height'    => 30,
                    'expiration'    => 7200,
                    'word_length'   => 8,
                    'font_size'     => 16,
                    'img_id'        => 'Imageid',
                    'pool'          => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',

                    // White background and border, black text and red grid
                    'colors'        => array(
                            'background' => array(255, 255, 255),
                            'border' => array(255, 255, 255),
                            'text' => array(0, 0, 0),
                            'grid' => array(255, 40, 40)
                        )
                    );

                    $this->captcha = create_captcha($vals);
                    $this->session->set_userdata('captchaWord', $random_number);
                }

                // $data = array(
                //     'login_attempts' => 'login_attempts + 1'
                //     );
                // $this->db->where('username', $username);
                // $this->db->update('company', $data); 
                $sql = "UPDATE
                            company
                        SET
                            login_attempts = login_attempts + 1
                        WHERE
                            username = ?
                        ";
                $query = $this->db->query($sql, $username);

                $this->wrong_password = TRUE;
然后在
$this->db->trans_complete()之后

这是一个诚实的错误