是否可以将JS脚本放在PHP文件中?

时间:2012-06-24 10:27:36

标签: php html refresh

<?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秒刷新一次。这甚至可能吗?我认为返回功能可以工作,但我不知道如何使用它。有人可以帮忙吗?

3 个答案:

答案 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日期时间值列表。