#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";
}
}
}