我目前在网络开发方面不是很熟练,但我设法用PHP创建一个Web应用程序,用于查询MYSQL数据库并以HTML格式显示数据。
我想使用我已创建的时间戳字段检查表是否已更改,并在每次插入时更新。比较两个时间戳(前一个和当前)是关键,
但是我没有那么多javascript处理。
如何将参数传递给我的hastablechanged.php文件(上一个时间戳)并简单地将一个标志(1:已更改,0:未更改)返回给javascript? 和...如何成为一个基本的javascript函数来运行一个计时器并调用hastablechanged.php发布old_timestamp并接收标志,然后更新div?
我一直在谷歌搜索,但我发现的解决方案非常复杂,我知道我只需要一个javascript函数,我不知道如何写。
这是hastablechanged.php:
<?php
include 'config.php';
include 'opendb.php';
$table = "data_table";
$query_timestamp = "select timestamp from {$table} where id = 0;";
$timestamp = mysql_query("{$query_timestamp}");
if (!$timestamp) {
die("query failed");
}
$row_timestamp = mysql_fetch_array($timestamp);
echo $row_timestamp['timestamp'];
?>
这是我的index.php
<!DOCTYPE HTML PUBLIC>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>Data values</title>
</head>
<body>
<div id=data>
<? include("table.php");?>
</div>
</body>
</html>
其中“table.php”是选择数据的PHP代码,并显示它绘制一个html表。
我会非常感谢任何帮助,因为我在完成我的学位课程时遇到了这个问题
答案 0 :(得分:1)
您需要Ajax和setInterval。
以下是SetInterval的工作原理 http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/
SetInterval基本上只是告诉浏览器每x毫秒调用一次javascript函数。
以下是一些Ajax示例 http://www.w3schools.com/Ajax/ajax_examples.asp
Ajax基本上是javascript在不重新加载页面的情况下请求页面并获取其内容的一种方式。在下面的示例中,它尝试为所有浏览器创建一个xmlhttprequest(遗憾的是它像这样完成),然后发送请求。我们将state_change定义为当我们得到回复时要调用的函数。在这个例子中,它只需要响应并显示它,但你可以随心所欲地做任何事情。
以下是修改后的示例。它应该工作。
<html><head>
<script type="text/javascript">
var xmlhttp;
function loadPage()
{
xmlhttp=null;
if (window.XMLHttpRequest)
{// code for IE7, Firefox, Opera, etc.
xmlhttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
if (xmlhttp!=null)
{
xmlhttp.onreadystatechange=state_Change;
xmlhttp.open("GET","hastablechanged.php?tablename=awesometable",true);
xmlhttp.send(null);
}
else
{
alert("Your browser does not support XMLHTTP.");
}
}
function state_Change()
{
if (xmlhttp.readyState==4)
{// 4 = "loaded"
if (xmlhttp.status==200)
{// 200 = "OK"
document.getElementById('A1').innerHTML=xmlhttp.responseText;
}
else
{
alert("Problem retrieving ata:" + xmlhttp.statusText);
}
}
}
</script>
</head>
<body onLoad="setInterval('loadPage()', 10000)">
<p><b>Status:</b>
<span id="A1"></span>
</p>
<button onclick="loadPage()">Check Updates</button>
</body>
</html>
答案 1 :(得分:0)
为了清楚起见:您没有 拥有 来使用ajax。只需定期重新加载页面即可获得所需内容。但如果您希望应用程序顺利进行 - 那么您将不得不深入了解其他答案中概述的AJAX。
-CF
答案 2 :(得分:0)
我终于想出了怎么做。发布它可以对任何人有用。
这是php和javacript的组合,其中:
php文件return_timestamp.php只返回ID = 0的行的时间戳(没有真实ID,只是用触发器更新每次插入的时间戳)
javascript将收到的时间戳与先前收到的时间戳进行比较(第一个设置为0,因此它在开头更新div)
这样:
javascript代码这是重要的事情(我假设你们可以编写php从mysql中检索数据):
<script type="text/javascript">
$(document).ready(function() {
$timestamp1='0';
var refreshId = setInterval(function() {
$.get(('return_timestamp.php', function(data) {
$timestamp2 = data; } )
if ( $timestamp2 != $timestamp1 ) {
$('#data').load('data.php');
$timestamp1 = $timestamp2; }
}, 1000);
});
</script>
希望它有所帮助,也谢谢你的帮助!