首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户间聊天系统

用户间聊天系统
EN

Stack Overflow用户
提问于 2017-10-31 15:48:26
回答 1查看 67关注 0票数 0

我一直在尝试使用php+ ajax + mysql创建一个聊天系统。

代码语言:javascript
复制
<?php
  session_start();
?>
<html>  
  <head>  
       <title>Live Table Data Edit</title>  
       <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />  
       <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>  
       <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>  
  </head>  
  <body>  
       <div class="container">  
            <br />  
            <br />  
            <br />  
            <div class="table-responsive">  
                 <h3 align="center">You Are : <?php echo $_SESSION['name']; 
                ?></h3><br />  
                 <div id="live_data"></div>                 
            </div>  
            <div id="messages"></div> 
            <div class="area" style="display:none">
            <textarea id="text" name="text"></textarea>
            <input type="submit" id="sub" name="sub" value="Send" />
            </div>
       </div>  

  </body>  
  </html>  

   <script>  
$(document).ready(function() {
  function fetch_data() {
    $.ajax({
      url: "select.php",
      method: "POST",
      success: function(data) {
        $('#live_data').html(data);
      }
    });
  }
  fetch_data();

  $(document).on('click', '.first_name', function() {
    var id = $(this).data("id1");

    function fetch_chat() {
      $.ajax({
        url: "fetch_chat.php",
        method: "POST",
        data: {
          id: id
        },
        dataType: "text",
        success: function(data) {
          $('#messages').html(data);
          $("div.area").show();
        }

      });
    }

    fetch_chat();
    $("#sub").click(function() {
      var text = $("#text").val();
      $.post('insert_chat.php', {
        id: id,
        msg: text
      }, function(data) {
        $("#messages").append(data);
        $("#text").val('');

      });
      alert(text);
    });
  });
});

但问题是,当我试图在mysql中插入一条新消息时,消息会发送给我所点击的所有用户。

the fetch_chat.php

代码语言:javascript
复制
<html>
<head>
</head>
<body>
<?php
session_start();
$con=mysqli_connect('localhost','root','','test');
$id= $_POST['id'];
$sql="select * from users where id='$id'";
$res=mysqli_query($con,$sql);
$row=mysqli_fetch_array($res);
$user_to= $row['name'];
$sql1="select * from chats where user_from='$_SESSION[name]' AND 
user_to='$user_to' OR user_to='$_SESSION[name]' AND user_from='$user_to' 
order  by id";
$res1=mysqli_query($con,$sql1);
if(mysqli_num_rows($res1)>0){
    while($row=mysqli_fetch_array($res1)){
?>
        <b> <?php echo $row['user_from']; ?>:</b> 
        <?php echo $row['msg']; ?><br /><br />
        <?php
    }
}
else
    echo "No msgs <br />";
?>

</body>
</html>

insert_chat.php是:

代码语言:javascript
复制
<html>
<head>
</head>
<body>
<?php
session_start();
$con=mysqli_connect('localhost','root','','test');
$id= $_POST['id'];
$msg=$_POST['msg'];
$sql="select * from users where id='$id'";
$res=mysqli_query($con,$sql);
$row=mysqli_fetch_array($res);
$user_to= $row['name'];

$sql1="insert into chats(user_from,user_to,msg) 
values('$_SESSION[name]','$user_to','$msg')";
$res1=mysqli_query($con,$sql1);
if($res1){
?>
    <b> <?php echo $_SESSION['name']; ?>:</b> 
    <?php echo $msg; ?><br /><br />
<?php   
}
?>
</body>
</html>

我不知道我哪里出了问题。请帮我处理这个。

例如,用户列表是:

(1)用户a

(2)用户b

(3)用户c

所以首先我点击了a,然后改变主意选择b并发送文本。但是出现了这样的问题:a和b的数据都被插入,就像我同时发短信一样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-31 16:43:53

每次单击"first_name“时,都会继续向"sub”添加越来越多的“单击”事件处理程序。因此,每次单击sub时,它都会一次又一次地运行所有以前的事件处理程序。因此,您将获得当前消息,但在加载页面后发送给您以前单击过的所有用户。

代码语言:javascript
复制
$("#sub").click(function() { 

需要的是

代码语言:javascript
复制
$("#sub").off("click").on("click", function() { 

这样,在使用新数据定义新版本之前,它将删除以前的处理程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47039438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档