2011-10-17 20 views
1

在此先感謝您的幫助。重寫?id = __到存儲在db行中的頁面標題

我想弄清楚如何重寫動態URL創建一個簡單的CMS編程我正在建設。該代碼輸出帶有ID(www.mysite.com/index.php?id=1)的URL。我想修改代碼,以便輸出數據庫中的行標題,其ID爲1,例如www.mysite.com/home或www.mysite.com/about,其中about是存儲在行中的標題與1

這裏的ID DB的是代碼如何輸出的一個例子:

$result = mysql_query("SELECT id, title FROM pages"); 

while ($row = mysql_fetch_array($result)) { 
    // Do not list the home page twice 
    if ($row['id'] != $homeID) { 
     $pageID = $row['id']; 
     $pageTitle = $row['title']; 

     echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID'>$pageTitle</a></li>"; 
    } 

我要離開CMS教程來源:http://fwebde.com/web-design/creating-a-php-cms-part-1/

任何幫助將是很大的讚賞。我曾嘗試過很多.htaccess重寫,並且他們中的任何一個都沒有工作。請讓我知道這是否像切換MySQL代碼一樣簡單。

+0

我不確定問題是什麼?你有錯誤嗎?如果您在文檔加載時執行上述代碼,您可以將$ pageTitle放入並顯示。 – Genzume

+0

什麼是您的問題..請詳細解釋 – ravi404

回答

1

你將不得不修改生成的鏈接,然後行:

echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID'>$pageTitle</a></li>"; 

您可以添加標題爲單獨的和未使用的&title=參數,這是一個很好的黑客,以避免對其他任何修改:

echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID&title=$pageTitle'>$pageTitle</a></li>"; 

或產生123+title鏈接:

echo "<li><a href='" . BASE_URL . "/index.php?id=$pageID+$pageTitle'>$pageTitle</a></li>"; 

這將需要調整實際的「cms」調度程序代碼,因爲它必須從$ _GET參數中分解id和標題。

甚至只有標題替換整個index.php?id=

echo "<li><a href='" . BASE_URL . "/$pageTitle'>$pageTitle</a></li>"; 

這反過來會要求部署.htaccess規則(類似於htaccess URL routing for PHP MVC?)。並且您將不得不再次修改index.php腳本以從title查找id。如果數據庫中的標題都是獨一無二的,那麼這種情況只會起作用。您應該也使用urlencode($pageTitle)htmlspecialchars()上的$pageTitle即成爲鏈接文字。

+0

您的解決方案很簡單,可以將&title = $ pageTitle添加到鏈接生成器部分。我能夠構建.htaccess重寫並更正它,並刪除id = __部分以保留$ pageTitle。這是你有時忽略的最簡單的東西:)謝謝! – KGDD

+0

另一個問題,你知道如何調整.htaccess以允許任何範圍的id號碼?如?id = 1一直到三位數字,即?id = 999?這是我迄今爲止,對兩次評論抱歉。 RewriteRule ^([^ _] *)$/goober /?id = 1&title = $ 1 [L],我希望id = __部分允許任何範圍的id數字一直到999。提前!! – KGDD

+0

然後不要去掉'id = ???'。如果你只是將它固定在「1」上,那就是問題所在。不知道您當前的傳入URL,我無法修復您的RewriteRule。 – mario

0

它不會像你想的那麼簡單。最簡單的方法是將頁碼包含在最終的網址中。 http://www.mysite.com/1/articles但我不知道這是不是你正在尋找。

重寫規則是。

RewriteRule ^([0-9]*)/.*$ index.php?id=$1 

我有我自己的CMS系統所做的是另一個字段添加到一個名爲urlname頁表。這將是該URL訪問該頁面的原因。您需要更改所有對$ _GET ['id']的引用。

將此項添加到functions.php。

function thisPageId(){ 
    $sql="SELECT id FROM pages WHERE urlname = '" . $_GET['urlname'] ."'"; 
    $result=mysql_query($sql); 
    $row=mysql_fetch_assoc($result); 
    return $row['id']; 
} 

htaccess的重寫規則

這將重定向不存在的index.php任何要求嗎?URLNAME = ...

RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteRule (.*) index.php?urlname=$1 

替換任何引用到$ _GET [ 'id']與來自thisPageId的值。對於你的listPages函數和URL顯示的任何地方,你都會做這樣的事情。

echo "<li><a href='" . BASE_URL . "/" . $row['urlname'] . "'>$pageTitle</a></li>"; 

請記住,您還必須編輯管理頁面以添加新字段。

+1

請請不要鼓勵在查詢中使用unsanitized全局變量。這對注入攻擊是廣泛的。 –

+0

我還有一個關注.htaccess部分的問題。在 的RewriteCond%{SCRIPT_FILENAME}!RewriteEngine敘述-f 的RewriteCond%{SCRIPT_FILENAME}!-d 重寫規則^([^ _ *)$/sitefoldernamehere /?ID = 1&標題= $ 1 [L] 我如何告訴RewriteRule識別任何id號,無論是1,2或25還是100? – KGDD