У меня есть один файл для сообщений между пользователями, также в этом файле находятся системные сообщения с веб-сайта. Входящие сообщения, сообщения о записи и т. Д. Все в порядке, но проблема заключается в системных сообщениях.
Проблема в том, что они находятся в базе данных, но не отображаются на дисплее.
Я вижу только ошибку
У вас нет системных сообщений.
Я делаю их с идентификатором from_user равным 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>';
}
}
Сначала вы должны сохранить результат запроса, а затем извлечь его:
$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>';
}
Когда вы выполняете внутреннее соединение, вы получите только те строки, которые существуют в обеих таблицах. Поскольку я предполагаю, что нет пользователя с идентификатором 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>';
}