PHP / Ajax简单聊天-将管理员用户名颜色设置为红色

问题描述

我有一个简单的PHP / Ajax聊天应用程序,允许用户在统一的聊天窗口中相互交谈。我希望角色为“ admin”的用户的用户名在聊天窗口中显示为红色,无论谁登录。

以下是用户表列:

user table columns

这是消息表列:

message table columns

我在会话中的用户表中拥有用户名和角色-$_SESSION['name']$_SESSION['role']-并且$_SESSION['name']写入邮件表中的user列。

这是我用来将消息getsend放入窗口的PHP switch语句:

switch( $_REQUEST['action'] ) {
        case "sendMessage":
            $stmt = $pdo->prepare("INSERT INTO messages SET user = ?,message = ?");
            $run = $stmt->execute([$_SESSION['name'],$_REQUEST['message']]);

            if ( $run ) {
                echo 1;
                exit;
            }
        break;
        case "getMessages":
            $stmt = $pdo->prepare("SELECT * FROM messages");
            $run = $stmt->execute();
            $results = $stmt->fetchAll(PDO::FETCH_OBJ);

            $chat = '';
            foreach($results as $message){
                $chat .= '<div class="single-message border">
                            <strong class="text-uppercase">'.$message->user.': </strong>
                            <p> '.$message->message.'</p>
                            <span class="float-right">'.date('h:i a',strtotime($message->date)).'</span>
                          </div>';
            }
            echo $chat;
        break;

作为参考,这里是ajax:

LoadChat();

setInterval(function(){
    LoadChat();
},1000);

function LoadChat() {
    $.post('handlers/messages.php?action=getMessages',function(response){

        var scrollpos = $('#chat').scrollTop();
        var scrollpos = parseInt(scrollpos) + 520;
        var scrollHeight = $('#chat').prop('scrollHeight');

        $('#chat').html(response);
        if( scrollpos < scrollHeight ){

        } else {
            $('#chat').scrollTop( $('#chat').prop('scrollHeight') );
        }
    });
}

$('.textarea').keyup(function(e){
    if( e.which == 13 ) {
        $('form').submit();
    }
});

$('form').submit(function(){
    var message = $('.textarea').val();
    $.post('handlers/messages.php?action=sendMessage&message='+message,function(response){
        if( response == 1) {
            LoadChat();
            document.getElementById("messageFrm").value = "";
        }
    });
    return false;
});

我的想法是我需要将消息表中的用户与用户表中的用户名进行匹配,检查角色,然后在聊天窗口中突出显示用户名,但我不知道从哪里开始。我将继续尝试在sql语句中使用内部联接,但是我对如何表达这一点感到困惑。

这是不正确的(以及让我感到困惑的地方),但是这是我开始的地方:

$sql = 'SELECT * FROM message m INNER JOIN users u ON m.user = u.username WHERE role = :role AND u.username = :username';
$stmt = $pdo->prepare($sql);
$stmt->execute([ 'role' => "$_SESSION['role']",'username' => $_SESSION['name']]);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)