如何在数据库更新时强制刷新包含的php


how to force refresh of included php when database is updated

我有一个php页面,在页面中间有第二个php页面包括在内,类似于下面:

<?php
main content page
<?php include 'db-info.php';?>
more content
?>

db-info.php显示一个包含数据库信息的表。数据库更新后,我希望主页面显示更新后的结果。如果我把db-info.php页面作为一个独立的页面,我可以让它刷新,但当它包含在主要内容php页面中时,我不知道如何让它刷新。

我不希望经常扫描数据库以触发刷新,因为只有单击按钮时数据库才会更新。关于如何链接按钮点击或数据库更新以刷新db-info.php页面,有什么想法吗?

=====在下面编辑====

谢谢卡莱布和史蒂文,我很感激你的建议。尽管用户在显示数据库信息的同一页面上单击了一个按钮,但该按钮的创建方式与文档编写语法类似(该编辑器不允许我输入实际的按钮代码)单击按钮会在一个单独的javascript文件上触发一个函数。Kaleb,我可以重写数据库信息在主php页面上显示的方式,但主php页面不知道数据库已经更新,除非我不断检查数据库。问题是如何在单击按钮或更新数据库时触发主页面的刷新。我不知道如何捕捉那个事件,也不知道该做什么。单击中的按钮并更新数据库时,db-info.php页面将更新。db-info.php页面已更新,但主要内容php页面仍继续显示最初加载主php页面时加载的相同(过时)db-infophp页面。

=====================更新=====================

我移动了按钮,使其位于主内容php页面上。该按钮触发javascript来更新数据库。现在,由于按钮在具有的同一页面上

<?php include 'db-info.php';?>

我应该能够用onclick做两件事,运行javascript,并以某种方式加载和重新加载db-info.php页面???大概

====================更新=====================我将重写主要内容php页面,将数据库信息表直接构建到主页中。我仍然需要一种与整个主页内容分开刷新数据的方法。

=============请将此问题标记为已回答=============

我为我最初的问题不够清楚而道歉。此外,一开始我不理解给出的答案,但现在我意识到它们为我指明了正确的方向。再次感谢您的帮助。我计划重新编写主内容页面,以在div的innerHTML中显示数据库信息,例如:

http://www.w3schools.com/php/php_ajax_database.asp

数据库信息将显示在这个div 中

<div id="dbInfoHere">Database info will be listed here</div>

使用这个ajax从数据库获取更新的信息

document.getElementById("dbInfoHere").innerHTML = xmlhttp.responseText;
xmlhttp.open("GET","save-rankings.php?q="+str,true);

在本例中,javascript是用select onchange事件调用的。我可以从按钮onclick事件

调用javascript

选项#1

如果您想要一个简单的ajax更新,比如说,当用户按下刷新按钮时,请尝试使用jQuery的.get或.post方法

http://api.jquery.com/jquery.get/

$.get("ajax/test.html",函数(数据){$(".result").html(数据);alert("加载已执行。");});

选项#2

如果你在寻找实时或"推送"更新,你需要websockets和mysql触发器。您需要一个"守护进程"脚本来处理您的连接,并且您需要向该脚本通知数据库的更改情况。

结账http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html#c10251作为mysql触发器的起点

并查看如何在PHP中创建websockets服务器,作为守护进程服务的起点。

选项#3"实时"的另一个选项是使用"拉"方法,这取决于你需要容纳多少用户和你的服务器统计数据。在这种情况下,您使用javascript计时器每隔X秒执行选项1中提到的ajax请求。

与构建推送服务或与现有服务集成相比,这要容易得多,但很明显,如果没有新数据,用户就会向服务器发出不必要的请求,而且从技术上讲,这不是"实时",因为它只会在您设置计时器时快速更新

---更新---

刷新按钮需要位于正在刷新的元素之外。所以我推荐这样的东西:

<div> 
   <button onclick="updateData();">Refresh</button> 
</div> 
<div id="dataContainer"> 
    <?php include "db-info.php"; ?> 
</div>
<script> 
function updateData(){    
     $.get( "db-info.php", function(data ) {       
        $( "#dataContainer" ).html( data );    
      }); 
}; 
</script>

此外,我会尽量避免在加载初始数据时进行额外的ajax回调,除非有原因。通过使用php include进行初始页面加载,您可以在每次页面加载时为自己节省至少1个额外的请求。

首先,不要嵌套php标签。这将导致页面失败
其次,使用AJAX是在不刷新页面的情况下实现这一点的方法。你只需要使用AJAX从页面中获取数据,然后显示它

PHP页面:

<?php
$data = array(
    "message": "This is JSON data"
);
echo @json_encode($data);

JavaScript:

 $(function()
{
    var jdata = { "task": "do_something" };
    $.get('db-info.php', {data: jdata}, function(data)
    {
        // PHP script returns JSON data.
        // message is an object that's returned
        // and added to the data object.
        alert(data.message);
    });
});