问题描述
我有一个简单的PHP / Ajax聊天应用程序,允许用户在统一的聊天窗口中相互交谈。我希望角色为“ admin”的用户的用户名在聊天窗口中显示为红色,无论谁登录。
我在会话中的用户表中拥有用户名和角色-$_SESSION['name']
和$_SESSION['role']
-并且$_SESSION['name']
写入邮件表中的user
列。
这是我用来将消息get
和send
放入窗口的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 (将#修改为@)