gpt4 book ai didi

php - 将数据库中的用户 ID 添加到 Codeigniter 中的 session 数据?

转载 作者:搜寻专家 更新时间:2023-10-31 21:57:46 24 4
gpt4 key购买 nike

我是 CodeIgniter 的新手,在将用户 ID(在用户登录后)从数据库添加到 session 数据时遇到问题这里是我之前在 SOF 上可能会问到的代码问题,在我付出所有努力之后,我问这个

//登录模型

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

class Login_model extends CI_Model
{
function __construct()
{
// Call the Model constructor
parent::__construct();

}

//get the username & password from tbl_usrs
public function get_user($usr, $pwd)
{
$sql = "select * from tbl_usrs where username = '" . $usr . "' and password = '" .$pwd . "' ";
$query = $this->db->query($sql);
return $query->num_rows();
}

/* public function set_session($username) {
$sql="SELECT * FROM tbl_usrs WHERE username='".$username."' LIMIT 1 ";
$result=$this->db->query($sql);
$row=$result->row();


$sess_data=array (

'id'=>$row->id,
'username'=>$username,
'is_login'=>TRUE
);

$this->session->set_userdata($sess_data);




} //set_seesion function ends
*/
}

?>

//登录 Controller

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
print_r( debug_backtrace() );
//ini_set('memory_limit', '-1');
//ini_set('max_execution_time', 3000);
ini_set('display_errors',1);
error_reporting(E_ALL);
class LoginController extends CI_Controller
{

public function __construct()
{
parent::__construct();
$this->load->library('session');
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('html');
$this->load->database();
$this->load->library('form_validation');

}

public function index()
{
//load the login model
$this->load->model('login_model');
// $qry=$this->login_model->validate();



//get the posted values
$username = $this->input->post("username");
$password = $this->input->post("password");
$user_id = $this->input->get("user_id");

//set validations
$this->form_validation->set_rules("username", "username", "trim|required");
$this->form_validation->set_rules("password", "password", "trim|required");

if ($this->form_validation->run() == FALSE)
{
//validation fails
redirect('Homecontroller/index'); //make new controller for loading a form again
echo "Validation fails"; // even for no name and passwrd
}
else
{
//validation succeeds
if ($this->input->post('submit') == "Login")
{
//check if username and password is correct
$usr_result = $this->login_model->get_user($username, $password);
if ($usr_result > 0) //active user record is present
{
//set the session variables
$sessiondata = array(
'user_id' => $user_id,
'username' => $username,
'password'=>$password,
'is_login' => TRUE
);
//$this->login_model->set_session($username);
$this->session->set_userdata($sessiondata);
print_r($this->session->all_userdata()); //to check
redirect(base_url("Site/member_area"));
return $username;
}
else
{
$this->session->set_flashdata('msg', '<div class="alert alert-danger text-center">Invalid username and password!</div>');
redirect('Homecontroller/index');
}
}
else
{
redirect('login/home3');
}
}
}


}?>

当我尝试在 View 中打印 session 数据时,我得到 user_id=> 空

最佳答案

这些变量都不可用于赋值:

'user_id' => $user_id,
'username' => $username,
'password'=>$password,

这是因为您使用过:

$usr_result = $this->login_model->get_user($username, $password);

但是,这只是返回行数的结果:

public function get_user($usr, $pwd)
...
return $query->num_rows();

现在,$usr_result将是返回的行数,而不是相关用户的数据。

因此,您应该做的是在 return $query->num_rows(); 上方的登录函数中设置 session 数据。及以下$query= .

public function get_user($usr, $pwd){
....
$query = $this->db->query($sql);
$this->session->set_userdata('sessiondata', $query->row_array());
}

请注意,由于我们只从查询中检索 1 个用户,因此我们也只想返回 1 行。此外,你想存储一个关联数组,而不是一个对象,所以我们使用 $query->row_array()回来1 row格式为 array key在哪里是列名,值是列结果。

现在,做一个 echo '<pre>', print_r($this->session->userdata('sessiondata'), true),'</pre>';获取包含该数组的对象的格式化列表。然后您可以相应地映射名称。

旁注,我不会在 session 中存储密码。

关于php - 将数据库中的用户 ID 添加到 Codeigniter 中的 session 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31819266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com