2017-09-26 34 views
0

我的控制器如何在php中使用codeigniter從一個函數調用變量到另一個函數?

public function forgot_password(){ 
     $email = $this->input->post('email_recover'); 
     $token = bin2hex(openssl_random_pseudo_bytes(32)); 
     $findemail = $this->user_model->forgot_password($email); 
     if ($findemail) { 

       $config['protocol'] = "smtp"; 
       $config['smtp_host'] = "ssl://smtp.gmail.com"; 
       $config['smtp_port'] = "465"; 
       $config['smtp_user'] = "[email protected]"; 
       $config['smtp_pass'] = "password"; 
       $config['charset'] = "utf-8"; 
       $config['mailtype'] = "html"; 
       $config['newline'] = "\r\n"; 

       $this->email->initialize($config); 

       $this->email->from('[email protected]', 'Admin'); 
       $this->email->to(set_value('email_recover')); 

       $this->email->subject('Reset password'); 

       $email = $this->input->post('email'); 

       $this->email->message('<h3>Dear user.</h3><br><br><p>We want to help you to reset your password.</p>. <p>Here is the reset link &nbsp;'. base_url() .'login/reset_password/'.$token.'</p>'); 

       if(!$this->email->send()){ 
        $this->session->set_flashdata('error', 'There is some error with your email. Please try again'); 

       } 
       else{ 
        $this->session->set_flashdata('success', 'Please check your email.'); 
       } 
     } else { 
        redirect('login'); 
       } 

    } 

    public function reset_password(){ 
     $this->form_validation->set_rules('password', 'Password', 'required'); 
     $this->form_validation->set_rules('confirmpassword', 'Confirm Password', 'required'); 

     if($this->form_validation->run() === FALSE){ 
      $this->load->view('templates/pheader'); 
      $this->load->view('register/reset_password'); 
      $this->load->view('templates/pfooter'); 
     } else { 
        $this->user_model->reset_password(); 
        //redirect('login/reset_password '); 
       } 

    } 

我的模型

public function reset_password(){ 
     $data = array('password' => $this->input->post('password')); 
     $this->db->where('email',$email); 
     return $this->db->update('login_user', $data); 
} 

在這裏幫助我。我想發送恢復電子郵件鏈接給用戶,這是正常工作。現在,當用戶填寫重置密碼頁面中的字段時,我無法確定該用戶的電子郵件ID。任何人都可以告訴我如何訪問以不同形式輸入的電子郵件。

+2

您必須將其作爲隱藏字段放入第二個窗體中,或以其他方式將其存儲(例如,在會話中,暫時)。 HTTP請求是無狀態的。數據不會在它們之間持續存在,除非您明確地這樣做。 – ADyson

+0

您可以給他發送帶有加密電子郵件ID和時間限制tiil鏈接的鏈接。當他打開鏈接與數據庫相匹配的憑據。 – GYaN

+0

如何將電子郵件傳遞到隱藏的輸入字段? @ADyson –

回答

0

使用會話可以更新密碼。請檢查下面的代碼,我認爲幫助你。

控制器:

public function forgot_password(){ 
     session_start(); 
     $email = $this->input->post('email_recover'); 
     $token = bin2hex(openssl_random_pseudo_bytes(32)); 
     $findemail = $this->user_model->forgot_password($email); 
     if ($findemail) { 

       $_Session['setEmail'] = array('email_recover' => $email,'token' => $token); 

       $config['protocol'] = "smtp"; 
       $config['smtp_host'] = "ssl://smtp.gmail.com"; 
       $config['smtp_port'] = "465"; 
       $config['smtp_user'] = "[email protected]"; 
       $config['smtp_pass'] = "password"; 
       $config['charset'] = "utf-8"; 
       $config['mailtype'] = "html"; 
       $config['newline'] = "\r\n"; 

       $this->email->initialize($config); 

       $this->email->from('[email protected]', 'Admin'); 
       $this->email->to(set_value('email_recover')); 

       $this->email->subject('Reset password'); 

       $email = $this->input->post('email'); 

       $this->email->message('<h3>Dear user.</h3><br><br><p>We want to help you to reset your password.</p>. <p>Here is the reset link &nbsp;<a href="'. base_url() .'login/reset_password/'.$token.'">click</a></p>'); 

       if(!$this->email->send()){ 
        $this->session->set_flashdata('error', 'There is some error with your email. Please try again'); 

       } 
       else{ 
        $this->session->set_flashdata('success', 'Please check your email.'); 
       } 
     } else { 
        redirect('login'); 
       } 

    } 

    public function reset_password($token=NULL){ 

     if($_Session['setEmail']['token'] == $token){ 
      $email = $_Session['setEmail']['email_recover']; 
     } 

     $this->form_validation->set_rules('password', 'Password', 'required'); 
     $this->form_validation->set_rules('confirmpassword', 'Confirm Password', 'required'); 

     if($this->form_validation->run() === FALSE){ 
      $this->load->view('templates/pheader'); 
      $this->load->view('register/reset_password'); 
      $this->load->view('templates/pfooter'); 
     } else { 
        $this->user_model->reset_password($email); 
        //redirect('login/reset_password '); 
       } 

    } 

模型

public function reset_password($email){ 
     $data = array('password' => $this->input->post('password')); 
     $this->db->where('email',$email); 
     return $this->db->update('login_user', $data); 
     $_Session['setEmail'] = ''; 
} 

在鏈路和控制器是採用URL檢查令牌之後此令牌通。更新密碼後重置會話變量。

0

您可以使用會話來存儲電子郵件ID。 在控制器的forgot_password()函數,設置會話變量來存儲電子郵件ID

$email = $this->input->post('email_recover'); 
$this->session->set_userdata('email', $email); 

你可以使用這個變量任何你想去的地方。修改模型中的reset_password()函數:

public function reset_password(){ 
    $data = array('password' => $this->input->post('password')); 
    $this->db->where('email',$this->session->userdata('email')); 
    return $this->db->update('login_user', $data); 
    $this->session->unset_userdata('email'); 
} 
相關問題