PHP+MySQL聊天文本按用户身份差异化显示实现方法咨询
解决方案
要实现差异化显示文本的需求,可在遍历查询结果的循环中,通过判断当前登录用户与消息发送者是否一致,对文本做不同处理:
- 身份判断:在
while循环内,对比当前登录的$login和查询结果里的$row['user'](假设chat.user存储的是用户名,与user.name对应)。 - 文本处理:
- 若为当前用户自己的消息,直接输出完整文本;
- 若为其他用户的消息,提取括号
(之前的主文本部分。
具体代码实现
while ($row = query_ok($show, 'fetch')) { // 判断当前登录用户是否是消息发送者 if ($row['user'] === $login) { // 自己的消息,显示完整文本 $display_text = $row['text']; } else { // 他人的消息,提取主文本(括号前的部分) // 方法1:用explode分割字符串,取第一部分 $display_text = explode(' (', $row['text'], 2)[0]; // 方法2:用正则匹配,适配可能的格式变化(更健壮) // preg_match('/^[^(]+/', $row['text'], $matches); // $display_text = $matches[0] ?? $row['text']; } // 根据页面结构输出处理后的文本,示例如下 echo "<div class='chat-message'>{$display_text}</div>"; }
额外提示
- SQL注入风险:你当前的插入、查询代码存在明显的SQL注入漏洞(直接拼接用户输入到SQL语句中),建议使用预处理语句(PDO或MySQLi的预处理机制)修复该问题。
- 字段冲突问题:
SELECT chat.*, user.*可能导致字段名重复(比如两张表都有id字段),建议明确指定需要查询的字段,避免取值错误。
内容的提问来源于stack exchange,提问作者Weamar
相关产品推荐
相关产品推荐

