我正在尝试允许用户更改其密码,但是它不是用新密码替换旧密码,而是删除/清除数据库中的密码字段。我只是在测试与数据库的交互,因此我还没有使用模型。
控制器
<?php
class My_account extends CI_Controller {
public function index(){
$this->load->view("vChangePassword");
}
public function change_password() {
$this->load->library('form_validation');
$this->form_validation->set_rules('cur_password','Current Password','required');
$this->form_validation->set_rules('new_password','New Password','required');
$this->form_validation->set_rules('con_password','Confirm Password', 'required[matches[new_password]');
if ($this->form_validation->run()!= true){
$this->load->view("vChangePassword");
} else {
$sql = $this->db->select("*")->from('users')->where('email',$this->session->userdata('email') )->get();
foreach($sql->result() as $my_info) {
$db_password = $my_info->password;
$email = $my_info->email;
}
if(md5($this->input->post('cur_password'))== $db_password){
$fixed_password = md5($this->input->post('new_password'));
$fixed_password ='password';
$this->db->where('email', $email)->update('users' ,$fixed_password );
echo "Password has been updated!" ;
} else {
echo "Password is incorrect!";
}
}
}
}
?>
我的观点
<?php
echo form_open(base_url()."index.php/my_account/change_password")?>
<?php echo validation_errors();
?>
<table class=”table table-bordered”>
<tbody>
<tr>
<td><small><?php echo 'Old Password:';?></small></td>
<td><?php echo form_password("cur_password");?></td>
</tr>
<tr>
<td><small><?php echo 'New Password:';?></small></td>
<td><?php echo form_password("new_password");?></td>
</tr>
<tr>
<td><small><?php echo 'Confirm Password:';?></small></td>
<td><?php echo form_password("con_password");?></td>
</tr>
</tbody>
</table>
<div id=”some”style=”position:relative;”><button type=”submit” class=”btn btn-primary”><i class=” icon-ok-sign icon-white”></i> Submit</button>
<?php
echo form_close();
?>
看看这些行:
$fixed_password = md5($this->input->post('new_password'));
$fixed_password ='password';
$this->db->where('email', $email)->update('users' ,$fixed_password );
您为同一个变量分配 2 个不同的值,其中最后一个是会粘住的值,即无论用户输入什么$fixed_password
都将具有password
值而不是其他值。其次,查看 CodeIgniter 中 ActiveRecord 类的文档,请参见 http://ellislab.com/codeigniter/user-guide/database/active_record.html#update。由此你应该能够弄清楚如何正确调用update()
方法,它采用关联数组或对象作为第二个参数。我建议这次使用数组,因为这将是最简单的,而且似乎这就是您要去的地方。希望对您有所帮助!
$this->db->where('email', $email)->update('users' ,$fixed_password );
这行看起来不对。您似乎更新了用户名而不是密码字段。