【发布时间】:2018-05-19 16:23:54
【问题描述】:
我正在为 CodeIgniter 练习制作一个简单的 twitter 克隆,但我很难从我的用户那里回显 first_name 和 last_name 和 date_joined 值我的 user.php 视图中的表。我只想显示当前登录用户的值。
在我看来,我希望这些值在会话用户名下方回显。我的控制器、视图和模型如下。现在我收到以下错误:
消息:不能使用 stdClass 类型的对象作为数组
这是我尝试回显 $user['first_name']、$user['last_name] 等的时候。在像这样简单地回显之前,我已经让它工作了,但现在我不能了。 如果我执行 $user 的 var_dump,我只会得到以下信息:
/app/www/application/views/user.php:5: 类 stdClass#22 (1) { public $user_id => string(1) "1" }
控制器:User.php
class User extends CI_Controller
{
function index()
{
$this->load->model('login_model');
$data['user'] = $this->login_model->get_user();
$data['tweets'] = $this->tweet_model->usertweets();
$this->load->view('templates/header');
$this->load->view('user', $data);
$this->load->view('templates/footer');
}
}
型号:Login_model.php
class Login_model extends CI_Model
{
function can_login($username, $password)
{
$this->db->where('username', $username);
$this->db->where('password', $password);
$query = $this->db->get('users');
//SELECT * FROM users WHERE username = '$username' AND password = '$password'
if($query->num_rows() > 0)
{
return true;
}
else {
return false;
}
}
function get_user()
{
$query = $this->db->get('users');
$username = $_SESSION['username'];
$this->db->select('user_id', 'first_name', 'last_name', 'date_joined');
$this->db->from('users');
$this->db->where('username', $username);
$query = $this->db->get();
return $query->row();
}
}
型号:Tweet_model.php
class Tweet_model extends CI_Model
{
public function __construct()
{
$this->load->database();
}
public function get_tweets($tweet_id = false)
{
if ($tweet_id === false) {
$this->db->join('users', 'tweets.user_id = users.user_id');
$query = $this->db->get('tweets');
return $query->result_array();
}
$query = $this->db->get_where('tweets', array('tweet_id' => $tweet_id));
return $query->row_array();
}
public function set_tweet()
{
$tweet = url_title($this->input->post('tweet'), 'dash', true);
$query = $this->db->get('users');
$username = $_SESSION['username'];
$this->db->select('user_id');
$this->db->from('users');
$this->db->where('username', $username);
if ($this->db->affected_rows())
{
$user = $query->row();
var_dump($user_id);
}
$data = array(
'tweet' => $this->input->post('tweet'),
'user_id' => $user->user_id
);
return $this->db->insert('tweets', $data);
}
function Usertweets() {
$this->db->flush_cache();
$username = $_SESSION['username'];
$this->db->select('user_id');
$this->db->from('users');
$this->db->where('username', $username);
$query = $this->db->get();
$user = $query->row();
$this->db->flush_cache();
$this->db->select('*');
$this->db->from('tweets');
$this->db->where('user_id', $user->user_id);
return $this->db->get()->result();
}
}
查看:user.php
<div class="container">
<div class="row">
<div class="col-md-4">
<h4><?php echo $_SESSION['username']; ?></h4>
</div>
<div class="col-md-8">
<?php foreach ($tweets as $tweet): ?>
<div class="user-tweet">
<h4><?php echo $_SESSION['username']; ?></h4>
<h6><?php echo $tweet->tweet_date; ?></h6>
<p><?php echo $tweet->tweet; ?></p>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
【问题讨论】:
-
如果 $users 后跟该值不起作用是什么意思?您的意思是如果出现数据库错误,您将如何处理?
-
我强烈建议不要重新设计轮子并使用
Ion_Auth来满足您的登录/用户管理需求。它是最新的,并且一直在测试/改进,而且效果很好。
标签: php codeigniter