在收件箱中显示系统消息时出错

时间:2015-05-06 15:38:06

标签: php messages

我有一个文件用于用户之间的消息,此文件中也包含来自网站的系统消息。收件箱,写消息等都是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>';
    }
}

2 个答案:

答案 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>'; 
}