2011-10-20 66 views
0

我對這個問題的長度表示歉意,並且想提前說聲謝謝。MySQL PHP CMS創建URL(需要編輯)

下面是有問題的代碼片段。我有一個MySQL表,用於存儲基於本教程的自定義PHP MySQL CMS程序的信息:cms tutorial。正如您在「列表頁面」和「顯示管理」功能中所看到的,該URL是使用基本URL和ID以及標題構建的。該ID是MySQL表中的主鍵,用於提取所有必要的信息以顯示在頁面上。我將如何重寫下面的代碼,以便它僅在URL中顯示標題而不在ID中顯示標題,但是仍然將ID作爲用於在頁面中顯示信息的唯一標識符?

來自的functions.php:

'// Display center bottom column 
function centerbottomcolumn() { 
if ($_GET['id']) { 
    $pageID = (int) $_GET['id']; 

    $result = mysql_query("SELECT centerbottomcolumn FROM pages WHERE id='$pageID'"); 
    $row = mysql_fetch_array($result); 

    echo $row['centerbottomcolumn']; 
} else { 
    $result = mysql_query("SELECT value FROM settings WHERE name='homePage'"); 
    $row = mysql_fetch_array($result); 

    $pageID = $row['value']; 

    $result = mysql_query("SELECT centerbottomcolumn FROM pages WHERE title='$pageID'"); 
    $row = mysql_fetch_array($result); 

    echo $row['centerbottomcolumn']; 
} 

}

// List the pages 
function listPages() { 
// List the home page first 
$result = mysql_query("SELECT value FROM settings WHERE name='homePage'"); 
$row = mysql_fetch_array($result); 

$homeID = $row['value']; 

$result = mysql_query("SELECT title FROM pages WHERE id='$homeID'"); 
$row = mysql_fetch_array($result); 

$homeTitle = $row['title']; 

echo "<li><a href='" . BASE_URL . "/index.php'>$homeTitle</a></li>"; 

// List the rest of the pages 
$result = mysql_query("SELECT id, title FROM pages"); 

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

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

}

// Display admin table 
function displayAdmin() { 
// Find the home page ID 
$result = mysql_query("SELECT value FROM settings WHERE name='homePage'"); 
$row = mysql_fetch_array($result); 

$homeID = $row['value']; 

// Display a table 
$result = mysql_query("SELECT id, title, date FROM pages"); 

echo '<table width="961">'; 
echo '<tr height="50"> 
    <th align="left">ID</th> 
    <th align="left">Title of the Page</th> 
    <th align="left">Date Created</th> 
    <th align="left">Actions</th> 
    </tr>'; 

while ($row = mysql_fetch_array($result)) { 
    $id = $row['id']; 
    $title = $row['title']; 
    $date = date('M d, Y', $row['date']); 

    echo "<tr> 
     <td>$id</td> 
     <td><a href='". BASE_URL . "/id=$id&title=$title'>$title</a>"; 
    if ($id == $homeID) { 
     echo ' <strong>(Home Page)</strong>'; 
    } 
    echo "</td> 
     <td>$date</td> 
     <td><a href='edit.php?id=$id'>Edit</a></td><td> 
     <a href='confirm.php?id=$id'>Delete</a></td><td> 
     <a href='sethome.php?id=$id'>Set as Home</a>"; 
} 
echo '</table>'; 

}

// Get array with page IDs 
function getArray() { 
$result = mysql_query("SELECT id FROM pages"); 

$IDs = array(); 
$i = 0; 
while ($row = mysql_fetch_array($result)) { 
    $IDs[$i] = $row['id']; 
    $i++; 
} 
return $IDs; 

}

From index.php: 

(above head tag) 
require_once 'functions.php'; 

connect(); 

$IDs = getArray(); 

(from body) 
<?php if (in_array($_GET['id'], $IDs) || !$_GET): ?> 
<?php centerbottomcolumn(); ?> 
<?php else: ?> 

     <!-- Show a not found error --> 
     <p>Not found</p> 

    <?php endif; ?>' 

回答

1

你想讓你的頁面根據給定的ID顯示信息,但是你不想將ID傳遞給URL查詢字符串上的頁面?您可以將數據發佈到目標頁面而不是查詢字符串。你可以發明一個新的ID,它是真實ID的代理。但總的來說,你不能在沒有輸入的情況下讓一個頁面根據用戶輸入做一些事情(在這種情況下點擊一個帶有ID的鏈接)。如果你想隱藏ID,因爲它應該是祕密的,或者你不希望人們能夠猜出它們,那麼你可以用某種隨機GUID替換你的ID,這種GUID映射到數據庫中的真實(祕密)ID 。

+0

我該怎麼做呢?對不起,我對此很新。隨我去學習! – KGDD

+0

一個典型的實現是在創建記錄時生成guid並存儲guid列中的每條記錄。您可以使用自己的算法進行guid生成或使用您的語言或數據庫提供的算法(例如MySql中的uuid())。向guid添加一個唯一的索引。那麼,無論你在哪裏使用ID,都可以使用guid。你仍然需要傳遞它,但是你降低了某人猜測下一個GUID的概率。但爲什麼你想隱藏身份證號碼?真正的解決方案可能是防止授權訪問。 –

+0

我不想阻止訪問。我需要ID從表格中提取頁面信息。所以我希望通過.htaccess隱藏URL中的id,並在.htaccess中指定一系列id編號,但還沒有想出如何。所以我正在探索所有的選擇。 – KGDD