【发布时间】:2019-07-03 18:41:22
【问题描述】:
我有 2 个表,我希望其中一些列在另一列从用户获取数据时自动更新。
这是我的场景:用户注册,他的详细信息转到“用户”表。 注册用户现在可以发帖了。当他发帖时,他的帖子会转到“帖子”表。
现在我想在用户发帖时显示用户“用户名”。
所以,结论是我希望“users”表中的“username”列自动与“posts”表中的“username”列同步。这样,一旦用户发布了帖子,它就会看到特定用户发布了帖子。
我将如何实现它
<?php foreach ($posts as $post) : ?>
<div class="row">
<div class="col-md-3">
<img class="post-thumb img-fluid" src="<?php echo site_url();
?>assets/images/posts/<?php echo $post['post_image']; ?>">
</div>
<div class="col-md-9">
<h3><?php echo $post['title'];?></h3>
<small class="post-date">Posted on: <?php echo
$post['created_at']; ?>
in <strong><?php echo $post['category_name']?></strong> by
<strong><?php echo $post['username']?></strong></small><br>
<?php echo word_limiter($post['body'], 50); ?>
<br><br>
<p><a class="btn btn-info" href="<?php echo
site_url('/posts/'.$post['slug']);?>"
>Read More</a></p>
</div>
</div>
<?php endforeach; ?>
这是我尝试过的一个功能,但在我发帖时它不会更新我的“帖子”表列“用户名”。
public function get_posts($slug = FALSE){
if ($slug === FALSE){
$this->db->order_by('posts.id', 'DESC');
$this->db->join('categories', 'categories.id =
posts.category_id');
$this->db->join('users', 'users.username = posts.username');
$query = $this->db->get('posts');
return $query->result_array();
}
$query = $this->db->get_where('posts', array('slug' => $slug));
return $query->row_array();
}
这是数据库表
CREATE TABLE `posts` (
`id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`username` varchar(255) NOT NULL,
`posted_by` varchar(255) NOT NULL,
`title` varchar(255) NOT NULL,
`slug` varchar(255) NOT NULL,
`body` text NOT NULL,
`post_image` varchar(255) NOT NULL,
`created_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `users` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`register_date` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
没有错误,只是没有结果。
我们将不胜感激任何建议或帮助。
编辑:
我已经成功创建了一个“get_username”函数。但我不确定它为什么不起作用以及如何创建一个循环来循环浏览已发布的帖子。请看下面的代码
public function get_username(){
$username = $this->db->query("
SELECT u.username AS username
FROM users u
LEFT JOIN posts p
ON u.id = p.user_id
WHERE p.id = ?"
, array('id')
)->row_array();
return $username['username'];
}
我收到错误提示:
A PHP Error was encountered
Severity: Notice
Message: Undefined index: username
Filename: posts/index.php
Line Number: 19
【问题讨论】:
-
调试 sql 并在您的数据库中手动运行以确定问题: print_r($this->db->last_query());出口; // 把它放在返回之前 - 就像临时调试一样。
-
我编辑了我的帖子,添加了两个数据库
-
$this->db->select('*');需要吗?
-
没区别,试了一下
-
您最初提到您想从帖子表中获取用户名。您能否在 phpMyAdmin 或您的数据库程序中确认 User_id 肯定已填充到您的帖子表中?也不要将用户名放在帖子表中。如果您允许用户更改其用户名 - 您将必须更新所有相应的记录。纯粹在 ID 上链接要好得多。我想你会发现
posts.username列是空的?
标签: php mysql sql codeigniter-3