提交表单时,password_hash不会更新

时间:2015-04-06 12:14:18

标签: php codeigniter

如果我提交了我的表单,如果提交了密码字段,则应该更新密码,否则如果为空则不更新密码。

我似乎无法让password_hash更新非常奇怪。我可以使用它创建新用户,但不能更新密码。

所有其他帖子工作正常。

不确定为什么密码不更新?我如何能够提前解决问题。

<?php

class Model_user extends CI_Model {

    public function edit_user($user_id, $data) {

        $data = array(
            'username' =>  $data['username'],
            'user_group_id' =>  $data['user_group_id'],
            'firstname' => $data['firstname'],
            'lastname' => $data['lastname'],
            'email' => $data['email'],
            'image' => $data['image'],
            'status' => $data['status']
        );

        $this->db->set($data);
        $this->db->where('user_id', $user_id);
        $this->db->update($this->db->dbprefix . 'user');

        if ($data['password']) {

            $options = [
                'cost' => 11,
                'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
            ];

            $data = array(
                'password' => password_hash($_POST['password'], $options)
            ); 

            $this->db->set($data);
            $this->db->where('user_id', $user_id);
            $this->db->update($this->db->dbprefix . 'user');
        }

    }
}

控制器

<?php

class Users extends MY_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('admin/user/model_user');
    }

    public function index() {
        $this->get_form();
    }

    public function update() {
        $this->form_validation->set_rules('username', 'Username', 'required');

        if ($this->form_validation->run($this) == FALSE) {
            $this->get_form();
        } else {
            $this->model_user->edit_user($this->uri->segment(4), $_POST);
            redirect('admin/user');
        }
    }

    public function get_form() {

        $data['title'] = "Users";

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => 'Home',
            'href' => site_url('admin/dashboard')
        );

        $data['breadcrumbs'][] = array(
            'text' => "Users",
            'href' => site_url('admin/user')
        );

        $user_info = $this->model_user->get_user($this->uri->segment(4));

        if (isset($_POST['username'])) {
            $data['username'] = $_POST['username'];
        } elseif (!empty($user_info)) {
            $data['username'] = $user_info['username'];
        } else {
            $data['username'] = '';
        }

        if (isset($_POST['user_group_id'])) {
            $data['user_group_id'] = $_POST['user_group_id'];
        } elseif (!empty($user_info)) {
            $data['user_group_id'] = $user_info['user_group_id'];
        } else {
            $data['user_group_id'] = '';
        }

        $this->load->model('admin/user_group/user_group_model');

        $data['user_groups'] = $this->user_group_model->get_user_groups();

        if (isset($_POST['password'])) {
            $data['password'] = $_POST['password'];
        } else {
            $data['password'] = '';
        }

        if (isset($_POST['confirm'])) {
            $data['confirm'] = $_POST['confirm'];
        } else {
            $data['confirm'] = '';
        }

        if (isset($_POST['firstname'])) {
            $data['firstname'] = $_POST['firstname'];
        } elseif (!empty($user_info)) {
            $data['firstname'] = $user_info['firstname'];
        } else {
            $data['firstname'] = '';
        }

        if (isset($_POST['lastname'])) {
            $data['lastname'] = $_POST['lastname'];
        } elseif (!empty($user_info)) {
            $data['lastname'] = $user_info['lastname'];
        } else {
            $data['lastname'] = '';
        }

        if (isset($_POST['email'])) {
            $data['email'] = $_POST['email'];
        } elseif (!empty($user_info)) {
            $data['email'] = $user_info['email'];
        } else {
            $data['email'] = '';
        }

        if (isset($_POST['image'])) {
            $data['image'] = $_POST['image'];
        } elseif (!empty($user_info)) {
            $data['image'] = $user_info['image'];
        } else {
            $data['image'] = '';
        }

        $this->load->model('admin/tool/model_tool_image');

        if (isset($_POST['image']) && is_file(FCPATH . 'image/catalog/' . $_POST['image'])) {
            $data['thumb'] = $this->model_tool_image->resize($_POST['image'], 100, 100);
        } elseif (!empty($user_info) && $user_info['image'] && is_file(FCPATH . 'image/catalog/' . $user_info['image'])) {
            $data['thumb'] = $this->model_tool_image->resize($user_info['image'], 100, 100);
        } else {
            $data['thumb'] = $this->model_tool_image->resize('no_image.png', 100, 100);
        }

        $data['placeholder'] = $this->model_tool_image->resize('no_image.png', 100, 100);

        if (isset($_POST['status'])) {
            $data['status'] = $_POST['status'];
        } elseif (!empty($user_info)) {
            $data['status'] = $user_info['status'];
        } else {
            $data['status'] = 0;
        }

        $this->load->view('template/user/user_form_view', $data);
    }

}

3 个答案:

答案 0 :(得分:1)

仔细查看edit_user功能。您收到$data但会立即覆盖它。请注意,您不必为新创建的阵列设置password密钥。然后,您检查if ($data['password']),但永远不会true,因此永远不会进行更新。

答案 1 :(得分:0)

password_hash($_POST['password'], $options)存在问题。 您通过了$_POST['password']而不是$data['password']

答案 2 :(得分:0)

我需要一段时间来弄清楚我需要在我的模型中创建if语句的另一个变量,如下所示,然后能够更新是否存在新密码。

现在全部工作。

$input_password = $this->input->post('password');

if ($input_password) {
$password = password_hash($input_password, PASSWORD_BCRYPT);

$data_password = array(
'password' => $password
); 

$this->db->where('user_id', $user_id);
$this->db->update($this->db->dbprefix . 'user', $data_password);
}