Codeigniter用户';s数据
大家好,我有一个用户控制器和用户模型模型。我希望能够在用户登录后从数据库中检索并显示登录用户的电子邮件和电话号码,并将其显示在视图中。任何关于我如何能做到这一点的想法都将不胜感激,如果能编写代码来证明这一点,我将非常高兴 模型 控制器:Codeigniter用户';s数据,codeigniter,view,details,Codeigniter,View,Details,大家好,我有一个用户控制器和用户模型模型。我希望能够在用户登录后从数据库中检索并显示登录用户的电子邮件和电话号码,并将其显示在视图中。任何关于我如何能做到这一点的想法都将不胜感激,如果能编写代码来证明这一点,我将非常高兴 模型 控制器: public function login(){ $data['title'] = 'Login'; $this->form_validation-> set_rules('username', 'Username', 'requ
public function login(){
$data['title'] = 'Login';
$this->form_validation-> set_rules('username', 'Username', 'required');
$this->form_validation-> set_rules('password', 'Password', 'required');
if($this->form_validation->run() === FALSE){
$this->load->view('templates/header');
$this->load->view('users/login', $data);
$this->load->view('templates/footer');
} else {
// fetching user
$username = $this->input->post('username');
//Encrypted password
$password = md5($this->input->post('password'));
//login user
$user_id = $this->user_model->login($username, $password);
if($user_id){
//creating session
$user_data = array(
'user_id' => $user_id,
'username' => $username,
'logged_in' => TRUE,
);
$this->session->set_userdata('user_data',$user_data);
// Set message to be sent
$this->session->set_flashdata('user_login', 'Welcome');
redirect('posts');
} else {
// Set message to be sent
$this->session->set_flashdata('login_fail', 'Login Failed');
redirect('users/login');
}
}
}
public function get_user()
{
if($this->session->userdata('logged_in')){
$username = $this->session->userdata('username');
$data['results'] = $this->user_model->get_user($username);
$this->load->view('templates/header');
$this->load->view('users/login', $data);
$this->load->view('templates/footer');
}
}
登录时,如果在会话中设置用户id,您可以获得如下信息
也请阅读手册
确保自动加载会话和数据库
仅以下示例。
文件名:User_model.php
class User_model extends CI_Model {
public function get_user($id)
{
$this->db->where('user_id', $id);
$user_query = $this->db->get('yourtable');
return $user_query->row_array();
}
}
文件名:Dashboard.php
控制器
<?php
class Dashboard extends CI_Controller {
public function __construct()
{
parent::__construct();
if (!$this->session->userdata('user_id'))
{
redirect('logoutcontroller');
}
$this->load->model('user_model');
}
public function index()
{
$userdata = $this->user_model->get_user($this->session->userdata('user_id'));
/** You can use what you want example
$data['email'] = $userdata['email'];
**/
$data['username'] = $userdata['username'];
$this->load->view('some_view', $data);
}
}
您可以使用会话来携带登录的用户详细信息 这是您的型号代码:
//In your model
$query = $this->db
->select('id,email,phone')
->where(['username' => $username, 'password' => $password])
->where('status','1')
->get('users');
$user_data = $query->row_array();
if (!empty($user_data)) {
return $user_data;
} else {
return FALSE;
}
如果用户名
和密码
正确,则在控制器中获取用户数据。在这里,您可以将用户数据放在会话上:
//In Side Controller
$user_data = $this->user_model->login($username, $password);
if(isset($user_data) && !empty($user_data)){
// you can directly add the `$user_data` to the session as given billow.
// set user data in session
$this->session->set_userdata('user_data', $user_data);
现在,在将数据放入会话后,您可以在任何位置、任何视图或控制器中检索它
//retrive the user data in any view
//To echo in view Inside your view code.
<?php
$session_data = $this->session->userdata('user_data');
$user_email = $session_data['email'];
$user_phone = $session_data['phone'];
$user_id = $session_data['id'];
?>
<?= $user_phone ?> OR <?php echo $user_phone; ?>
<?= $user_email ?> OR <?php echo $user_email; ?>
注意:在会话中保存用户数据后,就不需要将该数据传递给视图表单控制器。你只需要在你需要的地方重复它 您需要先加载会话库。像
$this->load->library('session');
然后,您可以将数据保存到会话中,如
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
然后,无论何时需要控制器,您都可以检索会话数据,如
$data['session_data'] = $this->session->all_userdata();
然后转到你的观点
$this->load->view('data', $data);
然后用键将数据访问到视图中
<?= $session_data['username']; ?>
我希望这会有帮助,这能回答你的问题吗
public function login($username, $password){
$db = $this->db;
//validation
$db->select('id, email, username');
$db->where('username', $username);
$db->where('password', $password);
$db->where('status', 1);
$result = $db->get('users')->row_array();
return empty($result['id']) ? false : $result['id'];
}
使用用户名上的唯一索引,您无需检查行数,因为它将限制为1。*******
//用户登录**
function userlogin($data)
{
$condition = "username =" . "'" . $data['username'] . "' AND " . "password =" . "'" . $data['password'] . "' AND " . "status = '1'";
$this->db->select("*");
$this->db->from("user");
$this->db->where($condition);
$this->db->limit(1);
$query = $this->db->get();
if ($query->num_rows() == 1)
{
return $query->result();
}
else {
return false;
}
}
并在控制器中检查
if($this->modal_name->login()==false)
{
//redirect user to login page
}
else
{
$data['details'] = $this->modal_name->login();
$this->load->view("post",$data);
}
查看
foreach($details as $detail)
{
echo $detail->id;
echo $detail->username;
}
在这个观点上,
<?php print_r($session_data); ?>
如果将会话数据打印出来,
你可以像这样显示它
<?= $session_data['user_id']; ?>
您的控制器存在基本问题
会话数据问题:在控制器中,您将所有阵列数据存储在CodeIgniter会话中:
“用户数据”将像数组键一样工作,所有其他数组将被分配为键数据
你用$this->session->userdata('logged_in')
和$this->session->userdata('username')检索/检查会话数据,这是错误的,我的朋友。您可以通过$this->session->userdata('user\u data')['username']
或$this->session->userdata['user\u data']['username']
获取用户数据会话
因为会话将是这样的强>
因此,您必须在会话中使用“用户数据”来获取数据
有一件事我想和大家分享,一定要仔细阅读文档和手册。相信我,如果你在开始之前阅读,你的代码会更漂亮更干净。。。哈哈哈哈……):|使用控制器代码重新编辑您的问题,并对如何放置我要问的问题代码进行建模,因为我的模型、控制器和视图中没有该代码。在会话从doc()的login中传递之后,您知道如何从数据库中获取用户详细信息吗?我知道您只需要将数组传递给用户数据。像这样$this->session->set_userdata($user_data);不要使用md5()
进行密码哈希。这很不安全。使用PHP的和。如果您运行的PHP版本低于5.5(我真的希望您不是),那么可以使用来获得相同的功能性。只需获取登录查询中需要的所有列,并将它们存储在会话中。只需返回用户对象,而不仅仅是ID,并在会话中存储您想要存储的内容。你尝试过什么吗?未定义的变量username你在会话中设置了什么上面的代码是你唯一可以拥有的示例你不必拥有用户名这有点难猜,如果没有看到你迄今为止尝试的内容。我会发布我的用户模型和控制器now@olar19在您的模型get_user上,您有return$query->result()代码>更改为返回$query->row_数组()
@olar19不使用md5作为密码md5现在很容易被黑客攻击使用php内置密码生成并验证它不会显示在屏幕上。你能在你的问题上添加你的建议吗?我在模型和控制器中的登录函数中添加了你的建议,并添加了视图,就像你建议的那样,但是它没有显示任何内容我认为我更新的答案足以获取会话数据并在视图上查看。模型中此行的$result->num_rows()==1与您的不同。您使用了$get\u candidate\u data->num\u rows()==1。您可以使用我自己的代码并为我进行必要的调整吗。谢谢,这应该添加到登录函数中,否则我应该创建另一个函数。或者你可以复制我自己的代码并帮助修改它。提前感谢,但您需要在需要的地方检索会话数据,然后-您需要通过任何变量将其传递给视图,正如我在上面的代码中所说的。请复制我的代码并帮助调整,因为您的回答令人困惑。请你可以用它作为一个新的答案。我已经全局加载了会话库。我添加了它,但它不会显示在视图$user\u data=array中(“user\u id”=>$user\u id,'username'=>$username,'logged\u in'=>TRUE,)$data['session_data']=$this->session->all_userdata()$此->加载->查看('data',$data);好吧,你需要了解发生了什么。。。在代码中复制和粘贴,并说它不起作用,这表明您没有看到这里的概念。你认识何
foreach($details as $detail)
{
echo $detail->id;
echo $detail->username;
}
if($user_id){
//creating session
$user_data = array(
'user_id' => $user_id,
'username' => $username,
'logged_in' => TRUE,
);
$this->session->set_userdata($user_data);
// Set message to be sent
$data['session_data'] = $this->session->all_userdata();
$this->session->set_flashdata('user_login', 'Welcome');
$this->load->view('posts', $data);
//redirect('posts');
}
else {
// Set message to be sent
$this->session->set_flashdata('login_fail', 'Login Failed');
redirect('users/login');
}
}
<?php print_r($session_data); ?>
<?= $session_data['user_id']; ?>
$this->session->set_userdata('user_data', $user_data);
Array
(
[__ci_last_regenerate] => 1499791562
// This is the array key 'user_data' where your array data stores
[user_data] => Array
(
[user_id] => 1
[username] => scott
[email] => scott.dimon@example.com
[phone_number] => 1234567890
[first_name] => Scott
[logged_in] => 1
)
)