0
<?php

mysql_connect('localhost','root','');
mysql_select_db('ditwhales');

$studno=$_POST['studno'];

$command=mysql_query("SELECT * FROM chat WHERE studno= 

'$studno'");
$numrs=mysql_num_rows($command);

if ($numrs==0){
print 'Sorry but you are not one of the Whales. Please contact the web 

master and ask for registration of your Student No. Thank you!';
}

else{
$all=mysql_query("SELECT * FROM msgs");

while ($row=mysql_fetch_array($all)){

echo $row['message'] . "<br />";

};
}




?>

我有这个代码。但问题是我希望 else 每 1 秒刷新一次。这甚至可能吗?我认为返回功能会起作用,但我不知道如何使用它。有人可以帮忙吗?

4

3 回答 3

1

您可以每 1 秒使用 javascript ajax 加载 php 文件,也可以使用无限循环并放入 sleep(1);每1秒刷新一次

于 2012-06-24T10:32:36.680 回答
1

正如 Mohammad 建议的那样,您可以针对此问题使用客户端脚本来调用服务器上的 php 文件定位并返回答案,例如:

<script type="text/javascript">
function callphp(){
    setTimeout('callphp()', 1000);
    xmlhttp = null;
    count = 0;
    var d = new Date();
    if (window.XMLHttpRequest){
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else{
        // IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
RndString = d.getFullYear() + "" + d.getMonth() + "" + d.getDate() + ""  + d.getHours() + "" + d.getMinutes() + "" + d.getSeconds() + "" + count++;
    xmlhttp.open("GET",'file.php?C=' + RndString,false);
    xmlhttp.send(null);
    if(xmlhttp.responseText != ""){
        document.getElementById("div").innerHTML = xmlhttp.responseText;
        }
}
</script>

请检查一下,让我们知道发生了什么。

于 2012-06-24T10:59:26.387 回答
0

你有点令人困惑:php运行服务器端,它返回你显示给客户端的数据,通常是浏览器直接显示的完整HTML,但它也可以在你使用时只返回各种格式的数据,如jsonXML它作为RPC的提供者,这是一种通过 php 文件端点调用函数并让它返回数据的奇特方式。

如果您想操纵客户端(通常是网络浏览器)如何与用户交互,那么您需要编写在该特定上下文中交互的代码,浏览器的统一方法是使用JavaScript

使用 javascript,您可以使用setInterval以多种方式使您的页面(交互)处于活动状态,例如每 X 秒调用一次例程。

var cMR;

function callMyResults(){
}

window.onload = function(){
    cMR = setInterval('callMyResults',5000);
}
;

为了在页面加载时自动调用您的代码,我们将一个函数附加到onLoad事件处理程序,这将执行分配给它的函数中的所有内容,在我们的例子中,它将设置一个 5000 毫秒的间隔,它将执行每次调用 MyResults() 函数。setInterval 的结果保存在 cMR 全局中,以便以后可以在需要时停止在间隔上执行的代码。

所以目前这段代码什么都不做。Javascript 可以调用其他页面,从而通过现在统一称为AJAX的东西检索数据。最初,这意味着检索您随后操作的 XML 文档(或只是简单地写入当前显示的文档)。后来这已经演变为使用 json,因为它返回一个 javascript 本机元素,使其更易于使用并且通常更小,以通过网络连接传输,这使得页面更快捷。

许多库可以轻松完成此操作,其中最流行的库之一是jquery ,但您也可以使用XMLHttpRequest对象(AJAX 的基础)编写自己的调用。你会在网上找到很多这样的例子,比如这个用于检索 json 数据的例子。

一般来说,建议您使用已建立的库,以便于使用、您自己的理智以及更好、更容易访问的编码。

最后,在 PHP 端,您只需像往常一样收集数据,但打印数据略有不同,可以是您自己指定格式的 XML,也可以使用json_encode将其作为 json 返回。这可以简单如下:

<?php
$pdo = new PDO('mysql:dbname=testdb;host=127.0.0.1',$user,$password);
$result = $pdo->query('SELECT * FROM msgs');
print json_encode($result->fetchAll());

请注意,我使用PHP 数据对象(通常称为 PDO)来访问数据库,这提供了一种访问数据库的统一方式,以防您切换到另一个RDBMS,而不是当前使用的 RDBMS(mysql)。在这种情况下,您需要调整的是在实例化PDO对象时提供给它的 DSN 字符串。PDO 的另一个非常大的优点是它通过提供方法来保护您免受SQL 注入,这些方法可以轻松创建准备好的语句,您可以向该语句提供自动引用的参数(因此受到保护);不再推荐使用 mysql_* 系列函数:使用 PDO 或使用 mysqli。

所以,给你一个工作的例子:

我们有 1 个客户端页面:display.html 和 2 个用于生成和返回数据的服务器端页面(fillList.php 和 retrieveList.php)

填充列表.php

<?php
    // we work with the following table
// create table list_data (`when` DATETIME NOT NULL);

    // make sure to adapt these settings to yours, including username and password
$pdo = new PDO('mysql:dbname=scratch;host=localhost','username','password');
$pdo->exec('INSERT INTO list_data VALUES (NOW())');

这将在表的when列中插入一个新值list_data

检索列表.php

<?php
    // make sure to adapt these settings to yours, including username and password
    $pdo = new PDO('mysql:dbname=scratch;host=localhost','scratch','scratch');
    print json_encode($pdo->query('SELECT `when` FROM list_data 
                                   ORDER BY `when` DESC'
                                  )->fetchAll(PDO::FETCH_ASSOC)
                      );

检索list_data在按降序排列的表中找到的所有值,并将结果关联数组作为 json 对象返回。

我决定向您展示一个使用 jquery 的示例客户端页面,确保您下载最新的jquery-1.7.2.js并将其放在与此文件相同的目录中。

显示.html

<html><head><title>Refreshing List</title>
<script src="http://localhost/jquery-1.7.2.js" />
</head>
<body>

<p>this list refreshes every 5 seconds, a new value is inserted every 2 seconds</p>
<ul id="toRefresh">
<li>base</li>
</ul>
<script>

function fillList(){
  // we insert a new value in the database by calling fillList.php
  $.get("http://localhost/fillList.php");
}

function refreshList(){
  /* 
    we retrieve the json encoded data returned by retrieveList.php 
    and process it in our anonymous function
  */
  $.getJSON("http://localhost/retrieveList.php",function (data){
    var items = [];
// loop through the returned array
    $.each(data,function(key,val){
      // we passed an associative array so we can use the columnname: 'when'
      items.push("<li>when: " + val['when'] + "</li>");
});
    // clear the list and append the data to it
$("#toRefresh").empty();
$("#toRefresh").append(items.join(''));
  });
}

// jquery uses .ready() instead of window.onload = function(){}
$(document).ready(function (){
  // retrieve the data every 5 seconds
  setInterval(function(){refreshList();},5000);
  // insert additional new data every 2 seconds
  setInterval(function(){fillList();},2000);

  // we fill the list with its initial values
  refreshList();

});
</script>
</body>
</html>

如您所见,jquery 为您提供了一种简单的方法来执行这些操作。运行 display.html 页面,您将看到一个不断增长和刷新的 mysql 日期时间值列表。

于 2012-06-24T12:55:59.337 回答