我目前正在为我的网站开发我的私人消息系统,到目前为止我要做的一些事情是有意义的。
我认为我必须使用mysql join的强大功能,但有一些问题.. 在我的模型中,我已经开始为我的消息收件箱编码并具有以下查询:
“SELECT * FROM messages WHERE from_id ='$ id'”;
$ id基本上是来自我的users表的自动递增的id,from_id与我的消息表中的内容相同。
我想知道的是消息表假设如何获取from_id?我知道来自messages表的from_id和来自users表的自动递增的id是我将用来链接两个表的东西..但是我有点担心如何解决这个问题。
我宁愿使用id来识别消息的发送者和接收者而不是用户名,但我很困惑如何设置它。我很确定,一旦我了解它,我就可以做到。
答案 0 :(得分:1)
用户登录时无法使用会话保存用户ID吗? 这样,您可以在需要时获得用户ID。
// ... $fromID = $_SESSION['uid']; INSERT INTO `message` (`from_id`, `to_id`, `time`, `message`) VALUES('$fromID', '$toID', '$time', '$message')
当然,我们在这里没有谈论安全性,所以代码显然不安全。但是我们会把它留给另一个讨论。我是否朝正确的方向踢你? :P
答案 1 :(得分:1)
我不太确定我是否完全理解你。 您正在加载消息,在消息表中您有一个用户ID列,但是您想要使用单个查询加载用户名吗? 如果是这样的话会这样做
SELECT {您想要拥有的} FROM FROM用户 u,消息m WHERE u.id = m.from_id
,而不是SELECT SELECT中,您可以使用u.username检索用户详细信息,假设您的users表中有一个用户名列。
答案 2 :(得分:1)
取决于您使用的auth库,CI中需要这样的内容:
view_messages()
{
//this check could be done in the constructor
if($this->auth->logged_in()==TRUE)
{
$userID=$this->auth->user_data('userID');
}
else
{
redirect('not_logged_in');
}
$this->load->model('message');
$messages = $this->message->get_messages($userID);
// do what you want with messages.
//print_r($messages);
}
你的消息模型:
function get_messages($userID=null)
{
$this->db->where('userID', $userID);
$data = $this->db->get('tblMessages');
return $data->result();
}
答案 3 :(得分:0)
除了了解一些关于MySQL连接的内容之外,还有更多内容。你可以下载很多系统来获得一个好主意,试试phpBB或其他一些论坛软件。
使用私人消息系统很容易制造垃圾,但好的很难。
请记住,如果您的邮件只有一个条目,例如另一个用户提供的示例:
INSERT INTO `message` (`from_id`, `to_id`, `time`, `message`) VALUES('$fromID', '$toID', '$time', '$message')
这将需要显示在用户的收件箱中,以及来自用户的已发送框。如果to_user删除它,则from_user突然没有该消息的记录。
您需要创建一个连接表,以列出加入消息ID的用户(来往或来自)的所有附件。那么你也可以有多个用户!
消息应该始终存在,用户只是“垃圾”(在连接上将is_trach设置为1)。当用户从垃圾箱中删除时,他们只删除与邮件的连接,当最后一个用户删除了他们的连接时,你可以删除它(或者获取一个cron作业来删除孤立的邮件)。