Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何仅自动从MySql获取新行?_Php_Jquery_Mysql_Ajax_Chat - Fatal编程技术网

Php 如何仅自动从MySql获取新行?

Php 如何仅自动从MySql获取新行?,php,jquery,mysql,ajax,chat,Php,Jquery,Mysql,Ajax,Chat,我正在为我的用户提供消息服务。我使用AJAX发送消息而不刷新消息。我希望自动从数据库中获取新行(如果当前用户或另一方用户输入任何消息),而不刷新旧消息 <div id="readmsg"> #The messages is to be read here.... </div> <textarea placeholder="Write your message.." id="msg"></te

我正在为我的用户提供消息服务。我使用AJAX发送消息而不刷新消息。我希望自动从数据库中获取新行(如果当前用户或另一方用户输入任何消息),而不刷新旧消息

<div id="readmsg">
#The messages is to be read  here....
</div>

<textarea placeholder="Write your message.." id="msg"></textarea>
<input type="submit" value="Send" id="sendmsg">


<?php $user1 = 1; $user2 = 2; ?>
<script type="text/javascript">
  $(document).ready(function(){
    $("#sendmsg").on("click",function(e){
      e.preventDefault();
      var usera = <?php echo $user1.";";?>
      var userb = <?php echo $user2.";";?>
      var msg = $("#msg").val();
      $.ajax({
        url : "sendmessageprocess.php",
        type : "POST",
        data : {message:msg, user1:usera, user2:userb},
        success : function(data){
          document.getElementById("msg").value="";
          $("#msg").val("");
        }
      });
    })
  });
</script>

#这些信息将在这里阅读。。。。
$(文档).ready(函数(){
$(“#sendmsg”)。在(“单击”上,函数(e){
e、 预防默认值();
var usera=
var userb=
var msg=$(“#msg”).val();
$.ajax({
url:“sendmessageprocess.php”,
类型:“POST”,
数据:{message:msg,user1:usera,user2:userb},
成功:功能(数据){
document.getElementById(“msg”).value=“”;
$(“#msg”).val(“”);
}
});
})
});

正如我在评论中看到的,朋友们只会让你的问题复杂化,而不是你的主要问题

作为一个聊天室的创建者,我将认真地向您推荐使用另一种技术,而不是ajax

但如果有必要使用ajax,解决问题的最佳方法是:

在查询中获取新消息后,将最后一行id放入会话或cookie中的某个索引中,例如:

$_SESSION['last_msg_id'] = $row['id'];
在另一种情况下,请求得到的消息是,它们的id大于您的上一个\u msg\u id

$query = 'SELECT * FROM `messages` WHERE `id` > "' . $_SESSION['last_msg_id'] . '"';
并且,对于没有会话索引的新客户机,例如,获取最后10条消息,并按指定方式创建会话索引。例如:

if(isset($_SESSION['last_msg_id'])){
    $query = 'SELECT * FROM `messages` WHERE `id` > "' . $_SESSION['last_msg_id'] . '"';
}else{
    $query = 'SELECT * FROM `messages` ORDER BY `id` ASC LIMIT 10';
}
// your query process
$rows = {your rows};
foreach($rows as $row){
    $_SESSION['last_msg_id'] = $row['id'];
}

// or

$rows = {your rows};
$last_row = end($row);
$_SESSION['last_msg_id'] = $last_row['id']

当前如何检查代码中的新消息?(注意:当使用WebSocket或AJAX和服务器发送事件的组合来实现实时聊天应用程序时,效率会更高。仅使用AJAX的解决方案可以工作,但效率会更低,因为客户端必须定期轮询服务器以获取新消息,而不知道是否有任何新消息可用。Wh我的意思是,你应该考虑是否想用不同的方式来实现这个特性。