<?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 />";
};
}
?>
我有这个代码。但问题是我希望其他人每1秒刷新一次。这甚至可能吗?我认为返回功能可以工作,但我不知道如何使用它。有人可以帮忙吗?
答案 0 :(得分:1)
你可以每1秒用javascript ajax加载php文件,你也可以使用无限循环并放入sleep(1);那里每1秒刷新一次
答案 1 :(得分: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>
请检查一下,让我们知道发生了什么。
答案 2 :(得分:0)
你有点混乱的角色:php运行服务器端,它将你显示的数据返回给客户端,通常是浏览器直接显示的完整HTML,但它也可以返回各种格式的数据,例如{{3当你将它用作json的提供者时,或者XML,这是一种通过php文件端点调用函数并让它返回数据的奇特方式。
如果您想操纵客户端(通常是webbrowser)与用户交互的方式,那么您将需要编写在该特定上下文中交互的代码,为浏览器执行此操作的统一方法是使用{{ 3}}
使用javascript,您可以通过多种方式激活您的页面(内部),例如每隔X秒调用一次例程,使用RPC。
var cMR;
function callMyResults(){
}
window.onload = function(){
cMR = setInterval('callMyResults',5000);
}
;
在页面加载时自动调用你的代码,我们将一个函数附加到JavaScript事件处理程序,这将执行分配给它的函数中的所有内容,在我们的例子中它将设置间隔为5000每次执行CallMyResults()函数的毫秒数。 setInterval的结果保存在cMR全局中,以便以后可以用它来停止在该时间间隔内执行的代码。
所以目前这段代码什么也没做。 Javascript可以调用其他页面,从而通过现在统一称为setInterval的内容检索数据。最初这是为了检索您随后执行的XML文档(或仅仅onLoad到当前显示的文档中) 。后来这已经演变为使用json,因为它返回一个javascript本机元素,使其更容易使用,并且通常更小的尺寸来通过网络连接进行传输,这使得页面变得更加快捷。
很多库都可以轻松完成,最受欢迎的是AJAX,但您也可以使用wrote对象(AJAX的基础)编写自己的调用。你会在网上找到很多这样的例子,比如jquery。
一般来说,建议您使用已建立的库,以便于使用,您自己的理智,以及更好,更容易访问的编码。
最后在PHP方面,您只是像往常一样收集数据,但是打印方式有点不同,可以是您自己指定格式的XML,也可以使用XMLHttpRequest将其作为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());
请注意,我已经使用retrieving json data(通常称为PDO)来访问数据库,这提供了一种访问数据库的统一方式,以防您切换到另一个json_encode而不是一个PHP Data Objects你正在使用当前(mysql)。在这种情况下,您需要适应的是您在实例化时为RDBMS对象提供的DSN字符串。 PDO的另一个非常大的优势是它可以通过提供方法轻松创建自动引用(并因此受到保护)的PDO来保护您免受SQL injection的攻击;不再推荐使用mysql_ *系列函数:eithr使用PDO或使用mysqli。
所以,给你一个有效的例子:
我们有1个客户端页面:display.html和2个用于生成和返回数据的服务器端页面(fillList.php和retrieveList.php)
<强> fillList.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
列中插入一个新值
<强> retrieveList.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向您展示示例客户端页面,请确保下载最新的prepared statement并将其放在与此文件相同的目录中。
<强> display.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日期时间值列表。