2009-03-03 60 views
1

在頁面結束時,如果發生什麼事情,需要清除它,然後在提供給客戶端之前需要重新分析整個頁面。我打算迴應一個JavaScript來刷新頁面,但這將使他們加載頁面,然後重新加載它......我想知道是否有一種方法來告訴PHP引擎回到開始和重新 - 分析整個頁面?PHP:在服務之前重新解析整個頁面?

謝謝!

我會盡量更清楚地解釋這個問題,但它很複雜,我是一個糟糕的溝通者。我在列出產品的頁面上給予用戶選擇字段以縮小結果的選項。系統記住這一點,所以他們不必選擇它們。如果他們縮小金屬顏色等類別,然後進入金屬顏色與水晶雕像無關的類別,則不會顯示任何結果,因爲沒有顏色與所選的金屬顏色相匹配。要生成查詢以從數據庫中提取產品非常複雜,因爲不同的類別對於找到正確的產品有不同的要求。所以一旦生成查詢,我想測試它對mysql_num_rows(),如果沒有結果清除用戶的選擇,並重新開始。

+0

根據您的附加文本,我會說mabwi有正確的想法。 – 2009-03-03 22:50:22

回答

1

要生成查詢以從數據庫中提取產品非常複雜,因爲不同的類別對於找到正確的產品有不同的要求。所以一旦生成查詢,我想測試它對mysql_num_rows(),如果沒有結果清除用戶的選擇,並重新開始。

在這種情況下,只需將查詢放入一個返回結果的函數中,檢查行數,如果爲零,則清除過濾器並再次調用該函數。

9

你有點含糊不清,但如果你只是在談論重新輸出,你可以用output buffering來做到這一點。

+0

你能解釋一下如何使用輸出緩衝?我對這個概念完全陌生。謝謝! – 2009-03-03 20:16:09

3

我不完全清楚問題是什麼,但是不能確定在創建HTML之前要顯示什麼,然後第一次發送正確的東西嗎?

1

輸出緩衝(ob_start和ob_clean),結合將手邊的功能分離爲一個單獨的文件和eval()來實現。

哦,最近的PHP版本實際上有一個 goto聲明...雖然我會一直否認提及任何有關它。 :-)

0

我認爲你有點偏離。

你應該做些什麼來重新分析頁面是再次將用戶重定向到的頁面,使用

header('Location: thepagefile.php'); 

但是,如果你真的想重新分析文件,而無需創建一個新的頁面,你也可以只再次包含文件:

包括thepagefile.php

但你可能會得到同樣的結果。如果你想真正解析你會做什麼樣的頁面的輸出:

ob_start(); // this is at the very top of the code/page 
// all the code goes here 
$output = ob_get_clean(); 
eval($output); // WTF? 

,但實際上是沒有意義的,但我希望它能幫助。

我真的很想知道你真正想解決的問題是什麼。

0

我覺得你在尋找這樣的事情:

<?php 
ob_start(); //we start output buffering, this means nothing is send to the browser 
//We do some code stuff 
$time = microtime(); 
echo "Hai \n"; //Note taht mixing logic and output in real life 
echo $time; // is terribly practice 
echo "\n bai"; //I do it here purely for the example 
if(/*some condition */){ 
$anErrorHappened = true; 
} 
if($anEroorHappened === true){ 
    //Load the output in a var if you need it 
    //Otherwise don't 
    $output = ob_get_clean(); 
    //Do other code stuff 
    //I.E. send an error page 
    include('errorPage.html'); 
} 
else{ 
ob_end_flush(); //Send everything the script has echo()'d, print()'ed and send to the browser in any other way (I.E. readfile(), header() etc.) 
} 
?>