我正在两个用户之间获取聊天消息,并希望以两种不同的颜色显示消息。
{{1}}
例如,登录的用户,他的消息应该是红色的,他正在检查的消息应该是紫色的。麻烦的是所有提取的消息都变红了。
答案 0 :(得分:3)
此处的问题出现在$sql1
的逻辑中,您说select * from chats where user_from='$_SESSION[name]' AND....
。
然后执行此检查:
if($row['user_from'] == $_SESSION['name'])
$color = 'red';
该检查将始终为true
,因为您实际上只是要求mysql为您提供登录用户user_from
的所有聊天记录,现在您告诉程序将颜色设置为红色如果user_from
是登录用户,它将永远是,因为这就是你要求的。
您应该重新构建处理颜色的if
语句,因为现在您的逻辑对您正在尝试的操作没有任何意义。
修改强>
我不明白你是如何获得发送给用户的任何消息的,因为现在你的sql查询只是查看来自用户的消息(或者看起来似乎如此)。假设我是正确的,我建议您重新构建$sql1
查询,以便将所有消息发送给登录用户,以及与$user_to
通信的登录用户,因为我还假设您只想关注这两个用户之间的特定线程。
让我们假设这个新查询,你有两个用户聊天:
User1已登录,尝试与user2聊天。当他们将聊天插入数据库时,user_from = user1
和user_to = user2
User2已登录,与user1聊天。他们插入聊天时,user_from = user2
和user_to = user1
由于您希望这两个用户都能看到线程中的消息,因此您需要一个查询来查找从user1到user2以及从user2到user1的消息。
您应该做出以下假设才能创建正确的查询:
$user_to
用户(他们正在聊天的用户),因为这是两个用户
线程)您可以使用类似于此的查询在此线程中获取消息:
select * from chats where user_from='$_SESSION[name]' OR user_from='$user_to' AND user_to='$_SESSION[name]' OR user_to='$user_to'
如果我对您的程序的假设是正确的,那么您可以集成我的逻辑和那个查询或者与它非常相似的查询应该适合您要完成的任务,只要您的所有其他代码都是正确的。
一旦您在两个用户之间正确检索消息,就应该像在问题中一样整合消息颜色,因为您的SQL查询正在弄乱if
语句中的逻辑。