1

当 mysql 数据更改时,我无法让我的 php 聊天脚本自动刷新。我做了很多研究,似乎很多其他人的解决方案比我需要的更复杂(我要的是一些非常基本的东西)。

我不知道任何javascript,如果涉及js,将不胜感激。

这是我创建的 php 脚本。它正在运行(至少对我而言)。

    include 'connect2.php';
    echo "
            Enter a Message:
            <form method=post action='' name=chat>
            <input type=text name=message>
            <input type=submit name=chat value=Submit>
            </form>
    ";

    if (isset($_POST['chat'])) {
    $message = $_POST['message'];
    mysql_query("INSERT INTO chat set message='$message',user='$_SESSION[username]'");
    }

    $sql = "select * from chat order by id desc limit 15";
    $result = mysql_query($sql) or die ("An error has occured with in the database.");

    while ($data = mysql_fetch_assoc($result)) {
    $db_message = $data['message'];
    $db_user = $data['user'];
    echo "$db_user : $db_message <br>";
    }

    ?>

任何帮助将不胜感激,谢谢!:)

4

2 回答 2

0

您可以使用setIntervaljQuery库 ajax 函数来检查它。

例如,这很简单jQuery

$(document).ready(function() {
  // check once in five seconds
  setInterval(function() {
    $.get('/script.php', {do: 'new_messages'}, function(response) {
      if(response == 1) {
        window.location.reload();
      }
    });
  }, 5000); 
});

在服务器上的某个地方:

if(isset($_GET['do']) && $_GET['do'] == 'new_messages') {
  // some your code that detects if there's any new messages, and sets
  // $there_are_new_messages to true, if there's any
  ...
  if($there_are_new_messages) {
     echo 1; 

     exit; // avoid further output
  }
}

请记住,要使其正常工作,您需要确保在 ajax 块之前没有输出,因为您可能会得到意想不到的结果。

还要考虑使用输出根本不是一个好的做法来显示你的脚本一切都很好。更好的方法是使用相应的响应代码设置 HTTP 标头。

于 2013-10-28T22:16:57.803 回答
0

在您的情况下,最好的方法可能是使用 Ajax(和 jQuery)并每 X 秒刷新一次。

就绪处理程序- http://api.jquery.com/ready/

Javascript 计时器 - http://www.w3schools.com/js/js_timing.asp

Ajax 请求 - http://api.jquery.com/jQuery.post/

PHP json_encode- http://php.net/manual/en/function.json-encode.php

$( document ).ready(function() { //set up refresh timer on page load
    var refreshTimer = setInterval(function(){refreshMessages()},5000); //creates timer to request every 5 seconds
});

function refreshMessages(){
    $.post( "getMessages.php", function( data ) { //fire ajax post request
        alert("Got messages: " + data); // this just alerts the data when the request is done, you'll probably want to format/print
    });
}

在 getMessages.php 方面,您需要像往常一样从数据库中提取消息。在这种情况下,对您的 php 消息数组进行 json 编码将是您迭代返回对象的一种简单方法。

<?php
$messages = // get messages array from database
echo json_encode($messages);
?>
于 2013-10-28T22:21:57.110 回答