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

时间:2015-02-27 01:00:57

标签: php mysql ajax page-refresh

我有一个php页面,在页面中间还有第二个php页面,类似于下面的内容:

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

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

我宁愿不经常扫描数据库的更改以触发刷新,因为数据库仅在单击按钮时更新。有关如何链接按钮单击或数据库更新以使db-info.php页面刷新的任何想法?

=====编辑以下====

谢谢Kaleb和Steven我很感激你的建议。即使用户单击显示数据库信息的同一页面上的按钮,也会创建与文档写入语法类似的按钮(此编辑器不允许我将实际按钮代码放入) 按钮单击会在单独的javascript文件上触发一个函数。 Kaleb,我可以重新编写数据库信息显示在主php页面上的方式,但主php页面不知道数据库已经更新,除非我经常检查数据库。问题是如何在单击按钮或更新数据库时触发主页面上的刷新。我不知道如何捕获该事件或无论做什么都需要。单击按钮并更新数据库时,db-info.php页面将更新。 db-info.php页面已更新,但主内容php页面仍然显示相同(过时)的db-info.php页面,该页面在最初加载主php页面时加载。

================= update =====================

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

的同一页面上
<?php include 'db-info.php';?>

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

============ update ===================== 我将重新编写主要内容php页面,将数据库信息表构建到主页面。我仍然需要一种方法来从整个主页内容中单独刷新数据。

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

我为我原来的问题缺乏明确性而道歉。此外,起初并不理解所给出的答案,但现在我意识到他们指的是我正确的方向。再次感谢您的帮助。 我计划重新编写主要内容页面,按照以下示例在div的innerHTML中显示数据库信息:

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

db info将显示在此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);

在示例中,使用select onchange事件调用javascript我可以通过按钮onclick事件调用javascript

2 个答案:

答案 0 :(得分:1)

选项#1

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

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

  

$。get(&#34; ajax / test.html&#34;,function(data){      $(&#34; .result&#34;)。html(数据);      警报(&#34;已执行加载。&#34;);   });

选项#2

如果您正在寻找实时或&#34;推送&#34;更新,你需要websockets和mysql触发器。你需要一个&#34;守护进程&#34;用于处理连接的脚本,您需要通知该脚本一些数据库的更改方式。

查看http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html#c10251以获取mysql触发器的起点

并查看How to create websockets server in PHP以获取守护程序服务的起点。

选项#3 &#34;实时&#34;的另一种选择取决于您需要容纳多少用户,您的服务器统计信息是&#34; Pull&#34;方法。在这种情况下,您使用javascript计时器每X秒秒执行选项1中提到的ajax请求。

这比构建推送服务或与现有服务集成要容易得多,但显然如果没有新数据则退回,那么用户正在向服务器发出不必要的请求,从技术上讲,这不是&#34 ;实时&#34;因为它只会像您设置计时器一样快速更新

---更新---

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

<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回调onload来加载初始数据,除非有理由。通过使用php include进行初始页面加载,每页加载至少可以节省1个额外请求。

答案 1 :(得分:0)

首先,不要嵌套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);
    });
});