проверьте старый пароль и обновите новый пароль с помощью codeigniter

#codeigniter

#codeigniter

Вопрос:

Привет, у меня есть эта страница смены пароля. Я хочу проверить текущий пароль, который соответствует базе данных. затем сохраните на нем новый пароль. Однако я сравнил его со старым паролем, который проверяется в базе данных. Мне интересно, что когда я нажимаю кнопку изменить пароль, появляется всплывающее диалоговое окно с надписью подтвердить смену пароля, и я не знаю, откуда появилось это всплывающее диалоговое окно. А также мой код saveNewPass не будет работать. Может ли кто-нибудь помочь мне разобраться в этом?. Вот мой код ниже.

Мой контроллер

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Change_password extends CI_Controller {
  public function __construct(){
    parent::__construct();
    $this->load->library('form_validation');
    $this->load->model('users_model', 'um');
    $this->load->library('session');
    if(!$this->session->userdata('loggedIn')){
      redirect('login');
    }
  }




  public function change(){
    $this->form_validation->set_rules('old_password', 'Password', 'trim|required|xss_clean');
    $this->form_validation->set_rules('newpassword', 'New Password', 'required|matches[re_password]');
    $this->form_validation->set_rules('re_password', 'Retype Password', 'required');
    if($this->form_validation->run() == FALSE){
       $this->data['title'] = 'Change Password';
        $sessionData = $this->session->userdata('loggedIn');
        $this->data['id'] = $sessionData['id'];
        $this->data['username'] = $sessionData['username'];
        $this->data['type'] = $sessionData['type'];

        $this->load->view('templates/header', $this->data);
        $this->load->view('pages/change_password');
        $this->load->view('templates/footer');
    }else{
      $query = $this->um->checkOldPass(sha1($this->input->post('old_password')));
      if($query){
        $query = $this->um->saveNewPass(sha1($this->input->post('newpassword')));
        if($query){
          redirect('change_password');
        }else{
          redirect('change_password');
        }
      }

    }
  }

  public function index(){
    $this->data['title'] = 'Change Password';
    $sessionData = $this->session->userdata('loggedIn');
    $this->data['id'] = $sessionData['id'];
    $this->data['username'] = $sessionData['username'];
    $this->data['type'] = $sessionData['type'];

    $this->load->view('templates/header', $this->data);
    $this->load->view('pages/change_password');
    $this->load->view('templates/footer');
  }
}
  

Моя модель

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Users_model extends CI_Model {


   public function checkOldPass($old_password){
    $this->db->where('username', $this->session->userdata('username'));
    $query = $this->db->get('users');
    $row    = $query->row();
    echo "Old Password : ".$old_password."<br>";
    echo "From DB : ".$row->password."<br>";
    die;

    if($query->num_rows > 0){
      $row = $query->row();
      if($old_password == $row->password){
        return true;
      }else{
        return false;
      }
    }
  }

  public function saveNewPass($new_pass){
    $array = array(
            'password'=>$new_pass
            );
    $this->db->where('username', $this->session->userdata('username'));
    $query = $this->db->update('users');
    if($query){
      return true;
    }else{
      return false;
    }
  }  



}
  

и мои взгляды

 <div class="container">
  <div class="homepage_content">
    <div>
      <ul class="nav nav-pills">
        <li><a href="">Home</a></li>
        <li><a href="">View Profile</a></li>
        <li><a href="">Edit Profile</a></li>
        <li><a href="<?php echo base_url().'change_password'?>">Change Password</a></li>
        <?php if($type == "Root"): ?>
        <li><a href="">Create New Account</a></li>
        <?php endif; ?>
        <li class="pull-right"><a class="btn btn-primary" href="<?php echo base_url().'logout'?>">Logout</a></li>
      </ul>
    </div>
    <br />
    <br />
    <p>welcome <?php echo $username; ?></p>
    <p>Account Type <?php echo $type; ?></p>
    <br />
    <form action="<?php echo base_url().'change_password/change'?>" method="post">
      <div class="errors">
        <?php echo validation_errors('<div class="error">', '</div>'); ?>
      </div>
      <p><input type="password" name="old_password" placeholder="Current Password: " class="form-control"></p><br />
      <p><input type="password" name="newpassword" placeholder="New Password: " class="form-control"></p><br />
      <p><input type="password" name="re_password" placeholder="Retype New Password: " class="form-control"></p><br />
      <input type="submit" value="change password" class="btn btn-primary" />
    </form>
  </div>
</div>
  

Любая помощь очень ценится

Комментарии:

1. Это всплывающее окно вашего браузера, вы должны знать, что браузер попросит вас напомнить пароль при входе в систему с новым пользователем. Это не влияет на ваш код или функциональность.

2. Тогда почему появляется всплывающее окно?

3. браузер сохраняет ваши пароли в своей истории, когда вы пытаетесь изменить пароль любого сохраненного пользователя, он запрашивает у вас «Сохранить новый пароль»

4. если вы используете Firefox, вы можете получить сохраненный пароль в настройках-> безопасность-> сохраненный пароль.

5. что делать с параметрами, снимающими этот флажок?

Ответ №1:

попробуйте следующий код, чтобы проверить совпадение username и old_password ,

 public function checkOldPass($old_password)
{
    $id = $this->input->post('id');
            $this->db->where('username', $this->session->userdata('username'));
            $this->db->where('id', $id);
    $this->db->where('password', $old_password);
    $query = $this->db->get('users');
    if($query->num_rows() > 0)
        return 1;
    else
        return 0;
}
  

если username и old_password совпадают, вышеуказанная функция вернет 1 , а если username и old_password не совпадают, вышеуказанная функция вернет 0

Редактировать :

 public function saveNewPass($new_pass)
{
    $data = array(
           'password' => $new_pass
        );
    $this->db->where('id', $this->input->post('id'));
    $this->db->update('users', $data);
    return true;
}
  

Чтобы проверить пароль и подтвердить пароль, используйте JavaScript / Jquery.

JavaScript :

 function chkPwd(a)
    {
        // let Pswd is ID of password and cPswd is ID of confirm password text Box
        var newPwd = document.getElementById('Pswd').value;
        var cPwd = document.getElementById('cPswd').value;
        if(newPwd != cPwd)
        {
            document.getElementById('cPswd').focus();
            document.getElementById('cPswd').value="";
            document.getElementById('err').innerHTML="Passwords are Not Matching";
        }   
    }
  

Комментарии:

1. хммм, это то же самое, что и у меня, вы меняете только внутри if, чтобы вернуть 1, иначе верните 0

2. Привет, ваш код работает хорошо, спасибо за это. У меня есть вопрос, нужно ли мне вводить текущий пароль, который соответствует базе данных, затем вводить новый пароль, а затем повторно вводить новый пароль. когда я ввожу текущий пароль, новый пароль не соответствует паролю повторного ввода, он сохранится, а затем обновит базу данных. Как добавить проверку для этого? пожалуйста, помогите

3. Вы хотите проверить new_password == confirm_password?

4. привет, мой пароль и подтверждение пароля в порядке, я проверяю их с помощью проверки формы codeigniter. Моя проблема в том, что когда я ввожу правильный текущий пароль, затем ввожу новый пароль, но неправильно набираю новый пароль, он сохраняется в базе данных. Я хочу, чтобы, когда я ввожу правильный текущий пароль, затем вводил новый пароль, но неправильно повторно вводил новый пароль, он будет подтвержден.

5. извините, не удалось решить вашу проблему

Ответ №2:

 public function changePassword()
{
    $pass=$this->input->post('old_password');
    $npass=$this->input->post('newpassword');
    $rpass=$this->input->post('re_password');
    if($npass!=$rpass){
        return "false";
    }else{
        $this->db->select('*');
        $this->db->from('users');
        $this->db->where('email',$this->session->userdata('admin_email'));
        $this->db->where('password',md5($pass));
        $query = $this->db->get();
        if($query->num_rows()==1){
            $data = array(
                           'password' => md5($npass)
                        );
            $this->db->where('email', $this->session->userdata('admin_email'));
            $this->db->update('users', $data); 
            return "true";
        }else{
            return "false";
        }
    }
}