如何在codeigniter中检索数据而不发布它?

时间:2013-04-18 04:13:11

标签: php codeigniter http-post

我想获得欢迎管理站点(crud)的会话fname,对于我已经拥有它的会话用户名,因为它已经声明$_SESSION['username'] = $this->input->post('username');,我的问题如何从数据库创建会话fname?

数据库SQL

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) NOT NULL,
  `password` varchar(32) NOT NULL,
  `fname` varchar(30) DEFAULT NULL,
  `lname` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

控制器

<?php if(!defined('BASEPATH')) exit('Tidak ada akses!');

class C_login extends CI_Controller{

    function __construct(){
    session_start();
    parent::__construct();
    $this->load->model('m_user'); 
}

public function index(){
    if(isset($_SESSION['username'])){
        redirect('crud');
    }

    $this->form_validation->set_rules('username','Username','required');
    $this->form_validation->set_rules('password','Password','required');
    if ($this->form_validation->run() == TRUE){
        $this->load->model('m_user');
        $result = $this->m_user->cek_login(
            $this->input->post('username'),
            $this->input->post('password')
        );
            if($result == TRUE){
                $_SESSION['username'] = $this->input->post('username');
                redirect('crud');
            }
        }
        $this->load->view('login/v_form');
    }

    public function daftar(){
        $data = array(
                        'username' => $this->input->post('username'),
                        'password' => md5($this->input->post('password)')),
                        'fname' => $this->input->post('fname'),
                        'lname' => $this->input->post('lname')
                        );
        $this->m_user->tambah_user($data);
        $this->load->view('login/v_daftar',$data);
    }

    public function logout(){
        session_destroy();
        $this->index();
    }
}

模型

<?php if(!defined('BASEPATH')) exit('Tidak ada access!');

class M_user extends CI_Model{

function __construct(){
    parent::__construct();  
}

function cek_login($username,$password){
    $query = $this->db->where('username',$username)
                      ->where('password',md5($password))
                      ->limit(1)
                      ->get('users');

        if ($query->num_rows() > 0){
            return $query->row_array();
        }
        else{
            return FALSE;
        }
    }

    function tambah_user($data){
        return $this->db->insert('users', $data);
    }
}

1 个答案:

答案 0 :(得分:1)

首先,您不应该将输入发布到会话中,您应该首先针对数据库进行验证。您的输入应该针对SQL注入等进行清理。

我个人会使用CI的会话库(你需要在autoload配置中自动加载它)

然后它就是你模型中的这些行,或者你可以将$ data发送到控制器并从那里将它添加到会话中。

if ($query->num_rows() === 1){
           $row = $query->row();

           $data = array (
              'username'=> $row->id,
              'fname' => $row->fname
           );
          $this->session->set_userdata($data);
        }

然后,如果你想使用会话,你需要像这样调用它

echo $this->session->userdata('username');

这将回显您可以根据需要使用的用户ID。