You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP+MySQL聊天文本按用户身份差异化显示实现方法咨询

解决方案

要实现差异化显示文本的需求,可在遍历查询结果的循环中,通过判断当前登录用户与消息发送者是否一致,对文本做不同处理:

  1. 身份判断:在while循环内,对比当前登录的$login和查询结果里的$row['user'](假设chat.user存储的是用户名,与user.name对应)。
  2. 文本处理:
    • 若为当前用户自己的消息,直接输出完整文本;
    • 若为其他用户的消息,提取括号(之前的主文本部分。

具体代码实现

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:10:14