簡體   English   中英

如何將表單數據存儲到Codeigniter會話中?

[英]How do I store a form data into a Codeigniter session?

如何將來自表單的數據的array()存儲到Codeigniter中的會話中?

我想存儲電子郵件數據,以便可以在模型的幫助下使用它從數據庫中檢索名字。

以下是我的代碼,無法正常工作:

    public function index()
    {

        if (isset($this->session->userdata['logged_in'])) {

            redirect('admin_panel');
        }

        $this->load->library('form_validation');
        $this->form_validation->set_rules('email_address', 'Email Address', 'required|valid_email');
        $this->form_validation->set_rules('password', 'Password', 'required|min_length[4]');

        if ($this->form_validation->run() !== false) {
            $this->load->model('admin_model');
            // then validation passed . Get data from the base
            $res = $this->admin_model->verify_user($this->input->post('email_address'), $this->input->post('password'));

            if ($res !== false) {
                // person has an account

                $session_data = array(
'id' => $row[0]->id,
'email' => $row[0]->email_address,
);
// Add user data in session
$this->session->set_userdata('logged_in', $session_data);

                redirect('admin_panel');
            }

知道這樣做的正確方式會很高興。 我對Codeigniter還是很陌生,直到最近才對MVC熟悉。


我很抱歉沒有提供足夠的細節。 我只發布了部分代碼。 我只對如何將登錄表單數據存儲到會話中以及如何檢索它感興趣。

以下是控制器的完整代碼-nxlogin.php

    <?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Nxlogin extends CI_Controller {

                function __contruct()
                {
                    parent::__contruct();
                    session_start();
                }

    public function index()
    {

        if (isset($this->session->userdata['logged_in'])) {

            redirect('admin_panel');
        }

        $this->load->library('form_validation');
        $this->form_validation->set_rules('email_address', 'Email Address', 'required|valid_email');
        $this->form_validation->set_rules('password', 'Password', 'required|min_length[4]');

        if ($this->form_validation->run() !== false) {
            $this->load->model('admin_model');
            // then validation passed . Get data from the base
            $res = $this->admin_model->verify_user($this->input->post('email_address'), $this->input->post('password'));

            if ($res !== false) {
                // person has an account

                $session_data = array(
'id' => $row[0]->id,
'email' => $row[0]->email_address,
);
// Add user data in session
$this->session->set_userdata('logged_in', $session_data);


                redirect('admin_panel');
            }


        }

        $this->load->view('login_view');
    }

    public function logout()
    {
         $sess_array = array(
        'id' => '',
        'email' => ''
        );
        $this->session->unset_userdata('logged_in', $sess_array);

        redirect('nxlogin');
    }
}

這是我的模型-admin_model.php

    <?php


class Admin_model extends CI_Model {

    function __construct()

    {

    }

    public function verify_user($email, $password)

    {

          $q = $this->db->where('email_address', $email)->where('password', sha1($password))->limit(1)->get('adminusers');

          if ($q->num_rows > 0) {

            return $q->row();
          }
          return false;

    }

    public function get_data($id)

    {

          $q = $this->db->get_where('adminusers', array('id' => $id));

          if ($q->num_rows > 0) {

            return $q->result();
          }
          return false;
    }
}

現在我要做的是將電子郵件存儲到會話數組中,然后使用它在admin_panel.php-controller中從具有該電子郵件的特定數據庫行中檢索數據(例如全名); 這是管理主頁。 代碼是:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Admin_panel extends CI_Controller {

    public function __construct()
    {

      session_start();
      parent::__construct();


    if (!isset($this->session->userdata['logged_in'])) {

        redirect('nxlogin');
      }
    }

  public function index()
  {
    $this->load->view('admin_panel');
  }

  public function profile()
  {

       if (isset($this->session->userdata['logged_in']))
       {

     $id = isset($this->session->userdata['logged_in']) ;
    $this->load->model('admin_model');

    $data['query'] = $this->admin_model->get_data($id);

    $this->load->view('profile', $data);
  }
  }
}

我還看到您在將信息存儲到會話數組中時使用了此代碼-

$session_data = array(
        'id' => $row[0]->id,
        'email' => $row[0]->email_address,
        );

為什么兩者都為$ row [0]?

發現了一些問題。

第一。 在模型的verify_user()方法中,您將返回row()CI文檔在此處顯示row()返回具有第一個單個結果的對象。

第二。 在您的Nxlogin控制器index()方法中,您的row()被加載到$ res中,但是隨后您引用了row [0],這是不正確的。 參考您的結果,例如$res->id$res->email_address

第三。 您應該使用$this->load->library('session');初始化會話$this->load->library('session'); 在您的控制器構造函數中,並將其放置在parent::__construct(); 如此處所述 ,您已在Admin_panel控制器中將其混合使用。 或使用自動加載

第四。 您已根據會話中的鍵加載了陣列。 有兩個選擇,(1)您應該在Admin_panel配置文件方法中使用$id['id']調用get_data。 或(2)不用鍵加載數組。 Nxlogin index()更改$this->session->set_userdata('logged_in', $session_data); $this->session->set_userdata($session_data); 現在使用$this->session->userdata['id']$this->session->userdata['email']來引用您的數據,它們會考慮您的要求。

持續。 還要考慮遵循此處的代碼點火器樣式指南因為為清楚起見,您的錯誤應為大寫。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM