смена пароля в codeigniter при входе в систему выдает ошибку - PullRequest
0 голосов
/ 02 октября 2018

Я хочу изменить пароль для зарегистрированных пользователей, но всегда выдает ошибку: [Сообщение: пытается получить свойство 'пароль' не-объекта] в контроллере.Как решить эту ошибку ???Пожалуйста, помогите, большое спасибо!

Это мой контроллер:

                    if($this->form_validation->run()){
                    $cur_password = md5($this->input->post('cpassword')); // md5-encrypt the password
                    $new_password = md5($this->input->post('npassword'));
                    $conf_password = md5($this->input->post('copassword'));
                    //$this->load->model('queries');
                    $this->load->library('session');
                    $user_id = $this->session->userdata('user_id');//multiple users id login

                    $passwd = $this->queries->getCurPassword($user_id);
 !ERROR FOUND HERE!->if($passwd->password == $cur_password){
                        if($new_password == $conf_password){
                            if($this->queries->updatePassword($new_password,$user_id)){
                                echo 'Password Updated Successfully!';
                                echo '<br/><label><a href="'.base_url().'main/enter">Back to homepage</a></label><br/>';
                            }else{
                                echo 'Failed To Update Password!!';
                            }
                        }else{
                            echo 'New Password and Confirm Password is not matching!!';
                        }

                    }else{
                        echo 'Sorry! Current Password is not matching!!';
                    }
                }else{
                    echo validation_errors();

                }

Это моя модель:

<?php
class Queries extends CI_Model{

function login() {
    $query = $this->db->select('*')
                      ->from('users')
                      ->where('id');
    return $query->row();
}

function index() {
    $userid = $this->login()->id; //id of the user which is currently logged IN
    $this->session->set_userdata('user_id', $user_id);
}
    public function getCurPassword($user_id){   
        $query = $this->db->where(['id'=>$user_id])
                          ->get('users');
        if($query->num_rows() > 0 ){
            return $query->row();
        }
    }
    public function updatePassword($new_password,$user_id){
        $data = array(
                      //'password' => md5($this->input->post("$new_password"))
                      'password' => ($new_password)
                     //'password'=> password_hash(["$new_password"],PASSWORD_BCRYPT)
                      );
        return $this->db->where('id',$user_id)
        ->update('users',$data);
    }

}

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

У вас есть ошибка в синтаксисе, ошибка означает, что вы пытаетесь получить свойство non-object означает, что $passwd может быть массивом

if($passwd['password'] == $cur_password)

И в случае, если у вас есть ноль user_id

Поместите эти две строки в функции вашего контроллера выше if($this->form_validation->run()){ line

$userid = $this->queries->login()->id; //id of the user which is currently logged IN
$this->session->set_userdata('user_id', $userid);

и в вашей функции входа в модель

function login() {
$query = $this->db->select('*')
                  ->from('users')
                  ->where('username',$this->session->userdata('username'));
return $query->row();
}

Надеюсь, это поможет!

0 голосов
/ 02 октября 2018

Это происходит, когда user_id не найден.

Обратите внимание, что функция getCurPassword возвращает пользователя, если он найден (при проверке, если num_rows > 0), но если он не найден, он возвращает NULL.

Когда это происходит, $passwd var равен null, поэтому вы не можете получить доступ к $passwd->password.

. Вы можете решить эту проблему, изменив выражение if на:

if($passwd && $passwd->password == $cur_password){

Отредактировано Попробуйте получить ваше имя пользователя как и затем вызвать с ним функцию getCurPassword:

$user_name = $this->session->userdata('username');
$passwd = $this->queries->getCurPassword($user_name );

А в контроллере изменить функцию getCurPassword на:

public function getCurPassword($user_name){   
    $query = $this->db->select('*')
              ->from('users')
              ->where('username', $user_name);
    if($query->num_rows() > 0 ){
        return $query->row();
    }
}

Обратите внимание, что яПредположим, у вас есть столбец "username" в вашей базе данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...