0

我正在制作一个聊天室。我的代码可以工作,但每个人都可以看到彼此聊天的内容。我想限制它只能让两个聊天的人看到。

这是我的chat.php

<?php
include_once("chat.funct.php");

if(isset($_POST['send'])){
    if(send_msg($_POST['sender'],$_POST['message'])){
        echo "message sent..."; 
        }
    else{
        echo ("message sending failed");
        }

    }
?>
<div id="messages">
<?php
$messages = get_msg();
    foreach($messages as $value) {
        echo '<strong>'.$value['sender'].' Sent</strong><br />';
        echo $value['message'].'<br /><br />';
    }
?>

<form method="post" >
<label>Enter Name:<input type="text" name="sender"/></label>
<label>Enter Message:<textarea name="message" rows="8" cols="70"></textarea></label>
<input type="submit" name="send" value="Send Message">
</form>
</div>

这是chat.funct.php

<?php
$connect=mysql_connect('localhost','root');
$a=mysql_select_db('cs2');


function get_msg(){
    $query="SELECT * FROM chat1";
    $run=mysql_query($query);
    $messages=array();
    while($message=mysql_fetch_assoc($run)){

        $messages[]=array('sender'=>$message['sender'],'message'=>$message['message']);
        }
    return $messages;
    }

function send_msg($sender,$message){


    if(!empty($sender)&&!empty($message)){
        $sender=mysql_real_escape_string($sender);
        $message=mysql_real_escape_string($message);
        $query="INSERT INTO  chat1 (sender,message) VALUES('$sender','$message')";
        $run=mysql_query($query);
        if($run){
            return true;
            }
        else{
            return false;
            }
    }
    else{

        return false;
    }
}

//2级是站点的用户,3级是管理员。

在我的 chat1 表中,我有 3 列发送者、接收者和消息。我想做的是在表中找到sender==receiver.

$query="SELECT * FROM chat1 WHERE sender='$sender' AND receiver='$receiver'";

但要编写此查询,我想检查我无法获得的上一个消息发件人的姓名。请帮助编写一个简单的聊天以仅向所涉及的两个人显示消息。我很努力,但没有成功

4

2 回答 2

0

如果您为消息添加 ID,这将使整个事情变得更容易。创建一个名为 ID 的列并使用它来识别消息。

  $query="SELECT * FROM chat1 WHERE sender='$sender' AND receiver='$receiver'"

此代码将获取两个用户发布的所有消息。但是如果你想知道哪条消息是什么时候发布的,那么你必须这样做>

  $query="SELECT * FROM chat1 WHERE sender='$sender' AND receiver='$receiver' ORDER BY id"

这将通过消息获取消息并按 ID 对它们进行排序。ID 将在表中设置为 auto_incrediment。如果您只想让他们两个看到该消息,那么您将不得不执行以下操作:

  if($_SESSION['current_user']=="$sender" OR $_SESSION['current_user']=="receiver")
  {
  //If the visitor is the sender or receriver
  }
于 2013-07-17T19:24:11.213 回答
0

您可以保留/添加另一列,时间戳,并基于此对消息进行排序。这将为您的应用程序提供更多功能,即发送消息的时间,也:)

现在您必须触发两个查询,以收集所有消息。

$query="SELECT * FROM chat1 WHERE sender='$sender' AND receiver='$receiver'"; $query="SELECT * FROM chat1 WHERE sender='$receiver' AND receiver='$sender'";

如果您需要进一步澄清,请对此发表评论。

于 2013-07-17T19:24:53.850 回答