我有一个文件用于用户之间的消息,此文件中也包含来自网站的系统消息。收件箱,写消息等都是okey,但系统消息是问题所在。
问题是它们在数据库中但未显示在显示屏上。 我只看到错误
您没有系统信息。
我将from_user id设为0,因此可以将它们与其他消息分开。这是系统消息的代码:
if($page=="sys"){
$mysql->query("SELECT M.*, UF.username AS user_from, UF.has_pic FROM message M
INNER JOIN user UF ON UF.id=M.from_userFK
WHERE to_userFK='".$userProfile['id']."' AND from_userFK=0 AND M.del='no' ORDER BY send_time DESC");
while($res = $mysql->fetch_array()){
$sys_messages[]=$res;
}
if(count($sys_messages)>0){
foreach($sys_messages AS $message){
echo showMailInBox($message,$page);
}
}else{
echo '<div class="bluealert" style="width: 380px;"><strong>You don't have system messages!</strong></div>';
}
}
答案 0 :(得分:0)
您必须先保存查询结果,然后从中获取:
$res = $mysql->query("... query ...");
while ($row = $res->fetch_array()){
$sys_messages[] = $row;
}
或者在一个循环中略好一点:
$res = $mysql->query("... query ...");
if ($res->num_rows > 0) {
while ($row = $res->fetch_array()) {
echo showMailInBox($row, $page);
}
} else {
echo '<div class="bluealert" style="width: 380px;"><strong>You don't have system messages!</strong></div>';
}
答案 1 :(得分:0)
执行内部联接时,只会获得两个表中存在的行。由于我假设没有id为0的用户,因此您没有得到任何结果。如果您将其更改为LEFT JOIN(或完全省略连接),那么您应该得到适当的结果。
$mysql->query("SELECT M.*, UF.username AS user_from, UF.has_pic FROM message M
INNER JOIN user UF ON UF.id=M.from_userFK
WHERE to_userFK='".$userProfile['id']."' AND from_userFK=0 AND M.del='no' ORDER BY send_time DESC");
应该是
$mysql->query("SELECT M.*, UF.username AS user_from, UF.has_pic FROM message M
LEFT JOIN user UF ON UF.id=M.from_userFK
WHERE to_userFK='".$userProfile['id']."' AND from_userFK=0 AND M.del='no' ORDER BY send_time DESC");
- 编辑 -
在下面的评论中回答您的问题。
if($userProfile['id']!=$message['to_userFK'] && $userProfile['id']!=$message['from_userFK']){
echo '<div class="redalert"><strong>You try to open foreign message!</strong></div>';
}
更改为:
if($userProfile['id']!=$message['to_userFK'] && $userProfile['id']!=$message['from_userFK'] && $message['from_userFK'] != 0){
echo '<div class="redalert"><strong>You try to open foreign message!</strong></div>';
}