2012-12-24 97 views
0

我正在製作一種CMS系統,它可以在網頁的各個部分中工作,並將每個條目作爲不同條目存儲到使用MySQL的數據庫中的表中。當用戶首次設置頁面時,PHP腳本調用一個名爲addsection($name, $content)的函數,該函數將該部分添加到數據庫中。但是,爲了使這個系統更加靈活,所以它不使用靜態部分,我希望能夠將功能更改爲addsection($name, function),其中您提供了參數function的功能。有什麼方法可以將這個函數或函數名稱存儲在數據庫中,然後在代碼需要獲取段文本時調用它?如果不是,我能做些什麼呢?我用來獲取該部分內容的功能只是section($name)
另外,有沒有人知道一個簡單的方法來重定向到另一個頁面,如果當前頁面沒有被瀏覽過之前,不使用文件或任何東西?將函數名存儲在數據庫中,然後執行它

+0

爲什麼downvote? – cpdt

回答

0

您可以使用可變函數(http://php.net/manual/en/functions.variable-functions.php)。

$r = mysql_query("SELECT method FROM method_table WHERE id = 2"); 
$row = mysql_fetch_assoc($r); 
$func = $row['method']; 
$func($parameter); //will execute whatever method you stored in the `method` field 

這樣,您可以執行一個功能誰的名字被存儲在數據庫中。如果你想在一個對象的上下文中執行它(因此是method),你可以這樣做:$ this - > $ func($ parameter);

-2

您可以將功能內容存儲在數據庫中。例如,您存儲的內容領域可能是

$var = 12; 
$var2 = 21; 
echo $var+$var2; 

然後用eval()解析代碼的頁面。

+2

根據php.net .. eval()語言結構非常危險,因爲它允許執行任意PHP代碼。因此不鼓勵它的使用。 – cpdt

+2

只有當用戶有權訪問正在解析的內容 –

+0

時,它纔是危險的。 – cpdt

相關問題