【问题标题】:forgot password codeigniter忘记密码密码点火器
【发布时间】: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 ,我尝试过更改&lt;?php echo site_url('/login/register/get_password/'.$rs); ?&gt;,但没有成功,
  • 您是否为 $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


【解决方案1】:

您传递的完整 URL 是什么?如果您收到 404,那是因为您的页面丢失了。

您是否在 .htaccess 中设置了友好的网址?如果不是,那么 URL 将是

http://example.com/index.php/login/register/get_password/index/cfCZm29TPrT6

【讨论】:

  • 我使用带有 xammp 的虚拟主机和我的 .htasses RewriteEngine on Options -Indexes RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index .php/$1 [L]
  • 伙计们正在写 - 你的路由全错了。你需要遵循 MVC - 所以你的控制器是 /get_password/ - 所以你的 url 将是 http://example.com/get_password/index/cfCZm29TPrT6
【解决方案2】:

您可能缺少application/config/routes.php 文件中的路由。此 URL 的必要路由类似于(取决于文件结构):

$route['login/register/get_password/index/(:any)'] = 'get_password/index/$1';

在 CodeIgniter 中使用路由功能非常强大,因为您可以使用以下路由语法将这个相当长的 URL 更改为更短的 URL,例如 http://example.com/login/get_password/cfCZm29TPrT6

$route['login/get_password/(:any)'] = 'get_password/index/$1';

您可以在 CodeIgniter 手册中阅读更多关于路由的信息,地址为http://www.codeigniter.com/user_guide/general/routing.html

【讨论】:

    【解决方案3】:

    如果可行,试试这个:

    <a href="<?php echo site_url('get_password/index/'.$rs); ?>"style="color:#ffffff;text-decoration:none" target="_blank">Reset Password</a>
    

    【讨论】:

      猜你喜欢
      • 2012-07-25
      • 2012-12-20
      • 2013-05-17
      • 2011-08-26
      • 2015-12-31
      • 1970-01-01
      • 2012-07-15
      • 2012-02-09
      • 2011-08-22
      相关资源
      最近更新 更多