2010-07-15 51 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作業運行腳本。這樣用戶從來不會受到困擾。