2010-07-15 48 views
1

我不知道是否有可能只用PHP,但想到这里会问...通过PHP进行后台更新?

我确实有一个PHP代码,每15天更新一次数据。我的问题是当它更新整个过程需要超过5秒钟,所以用户必须等待更新完成。

我在看的是我想在用户查看内容时进行后台更新。或在网页加载后显示更新闪烁文本。

我当前的代码下面给出: -

$result = $db->sql_query("SELECT * FROM data1,data2,data3,data4 WHERE person='" .$name. "'"); 

$row = $db->sql_fetchrow($result); 
$day = $row['regtime']; 
$days = (strtotime(date("Y-m-d")) - strtotime($row['regtime']))/(60 * 60 * 24); 
if($row > 0 && $days < 15){ 

$row = ['name']; 
$row = ['age']; 
$row = ['place']; 
$row = ['address']; 
$row = ['lat']; 
$row = ['long']; 
$row = ['geo']; 
//etc 
}else{ //do update 
//insert into database 
} 
+0

可能对您的问题的答案:http://stackoverflow.com/questions/45953/php-execute-a-background-process – Redlab 2010-07-15 08:38:12

+0

mathew - 我添加了jQuery标签为你:) – 2010-07-15 10:40:47

回答

1

OK马修,

这里的假设是,你有一个id = myStatusDiv网页上的空div。另外,它假定你有一个url/php文件/ home/longprocess。添加jQuery的页面,然后在页面的底部,添加以下内容:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      type: 'POST', 
      data: "username=" + $("#username").val(), 
      url: 'longprocess.php', 
      beforeSend: function() { 
       // you could also put a spinner img or whatever here too.. 
       $("#myStatusDiv").html("please wait, page being updated..."); 
      }, 
      success: function(result) { 
       $("#myStatusDiv").html(result); 
      } 
     }); 
    }); 
</script> 

基本上,当DOM已经加载,$就功能会默默地在backgound运行。完成后,myStatusDiv div将获得您从longprocess方法生成的任何状态消息的弹出窗口。这可以是从简单的消息到页面上的“几乎”整个部分的任何内容。你的php页面只需要搜索通过数据对象发送的命名参数 - 即在上面的例子中 - > $ name = $ _POST ['username'];

在网上有很多的例子,在这里。

好运(提示:谷歌搜索的PHP AJAX jQuery的$ _ POST');)

吉姆

[编辑] - 当然,你必须有你的$ _ POST变量在$,ajax方法中...我假设你已经有了一个id = username的文本框输入。还有很多例子,但是这里有一个很快的例子,我发现它可以帮助你:http://www.talkphp.com/vbarticles.php?do=article&articleid=58&title=simple-ajax-with-jquery

+0

大吉姆谢谢。我搜索时的一个问题是,我的结果页面会显示旧数据,直到更新完成或者它说更新? – mathew 2010-07-15 09:04:25

+0

mathew - 你可以添加一个事件来显示页面在beforeSend:事件中更新的事实。我会更新我的例子。另外,如果你确实接受这个答案,一定要更新你的标签,以包括jquery,以便将来的搜索显示你的任务:) – 2010-07-15 09:08:04

+0

但吉姆这里有一些问题,我认为...如果15天内的数据和更新不是必需的? – mathew 2010-07-15 09:28:52

0

马修 - 我不会对代码本身进行评论,我只想说,希望这不是包含在页面中。无论如何,用这种方式:)。 php/linux(据我所知)不会让你产生新的线程,所以你最好的计划可能是通过$ ajax调用一个服务器方法。这样,它就超出了页面用户的范围,并且会保持页面的响应。

正如我所说,希望上面的代码包含在某个可通过URL访问的类中。那么你只需调用该方法并返回一个html结果或一个简单的消息到一个状态div。

+0

你有什么可以是插图??我不介意它是否在阿贾克斯。 – mathew 2010-07-15 08:40:53

+0

确定 - 给我5分钟和下面的单独消息... – 2010-07-15 08:45:58

1

而不是在用户的请求上运行更新,你也可以每天晚上通过cron作业运行脚本。这样用户从来不会受到困扰。