【发布时间】:2016-02-14 19:25:46
【问题描述】:
我尝试使用 CodeIgniter 框架通过电子邮件忘记密码,以发送密码更改通知电子邮件已经工作。但是当我打开电子邮件并单击链接以更改密码时调用视图没有出现..我的脚本有什么问题??
这是我的控制器
public function forgot()
{
$this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|callback_email_check');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('email/email_check');
}
else
{
$email= $this->input->post('email');
$this->load->helper('string', 6);
$rs= random_string('alnum', 12);
$data = array(
'rs' => $rs
);
$this->db->where('email', $email);
$this->db->update('user', $data);
//now we will send an email
$config = Array(
'protocol' => 'smtp',
'smtp_host' => 'ssl://smtp.gmail.com',
'smtp_port' => 465,
'smtp_user' => 'xxx@xxx.esy.es ',
'smtp_pass' => 'xxxxx',
'mailtype' => 'html',
'charset' => 'utf-8',
'wordwrap' => TRUE
);
$this->load->library('email', $config);
//$data = array('tes' => 'tester');
//$message = $this->load->view('v_email',$data,TRUE);
$this->email->set_newline("\r\n");
$email_setting = array('mailtype'=>'html');
$this->email->initialize($email_setting);
$this->email->from('xx@xx.esy.es', 'xxx');
$this->email->to($email);
$this->email->subject('Get your forgotten Password');
$this->email->message($this->load->view('email/email_forgot', $data, TRUE));
if($this->email->send())
{
$data = array ( 'isi' => 'login/vforgot');
$this->load->view('layout/wrapper',$data);
}else
{
$data = array ( 'isi' => 'login/vgagal');
$this->load->view('layout/wrapper',$data);
}
}
}
查看发送的电子邮件
<tr>
<td style="color:#ffffff;font-family:Helvetica,Arial,sans-serif;font-size:15px;font-weight:bold;line-height:100%;padding-top:18px;padding-right:15px;padding-bottom:15px;padding-left:15px" align="center" valign="middle">
<a href="<?php echo site_url('/login/register/get_password/index/'.$rs); ?>"style="color:#ffffff;text-decoration:none" target="_blank">Reset Password</a>
</td>
</tr>
控制器获取密码
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Get_password extends CI_Controller
{
public function index($rs=FALSE)
{
$this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[7]|max_length[20]|matches[passconf]|md5');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required');
if ($this->form_validation->run() == FALSE)
{
echo form_open();
$this->load->view('email/gp_form');
}
else
{
$query=$this->db->get_where('user', array('rs' => $rs), 1);
if ($query->num_rows() == 0)
{
show_error('Sorry!!! Invalid Request!');
}
else
{
$data = array(
'password' => $this->input->post('password'),
'rs' => ''
);
$where=$this->db->where('rs', $rs);
$where->update('user',$data);
echo "Congratulations!";
}
}
}
}
查看 gp_form
<?php echo validation_errors();
echo "Password :".form_password('password', '');
echo "Password Confirmation :".form_password('passconf', '');
echo form_submit('submit', 'Submit');
?>
这个结果点击表单电子邮件
http://xxxxxx.com/login/register/get_password/index/cfCZm29TPrT6
404 页面未找到
找不到您请求的页面。
【问题讨论】:
-
@bansi ,我尝试过更改
<?php echo site_url('/login/register/get_password/'.$rs); ?>,但没有成功, -
您是否为
$route['register/get_password/(:any)'] = 'register/get_password/$1'或$route['register/get_password/(:any)'] = 'register/get_password/index/$1'创建了路由,您也不需要在 url 中使用单词索引。应用程序/config/routes.php codeigniter.com/user_guide/general/routing.html -
您应该使用该 url 创建一个路由,因为它表示您正在尝试使用方法名称“register”和“get_password”、“index”和“cfCZm29TPrT6”等参数访问控制器名称“login” .或者您必须使用正确的网址进行更改。
-
@reignsly 谢谢,但如何解决我的问题
-
@wolfgang1983 我试过添加路由,但有些不行:(
标签: php codeigniter email passwords