2012-04-07 22 views
3

我想讓自己的CMS和我在php和mysql中很新。讓我談談點:MySQL:按行顯示永久鏈接中的內容ID

到目前爲止,我在索引頁面創建了帶有「閱讀更多」固定鏈接的新聞(這意味着,當我按下閱讀更多時,它將我移動到其他頁面,例如/readmore.php?id=[news ID],並在該頁面只有內容是那些特定的消息即從表中特定的行,我什麼堅持使用越來越特定行ID在固定鏈接。

讓我顯示,目前對我的作品的代碼。

索引文件與新聞:

while($row = mysql_fetch_array($result)) 
    { 
/*... title, news content... */ 
    echo "<a href='readmore.php?id=".$row['ID']."'>".$read_more_link."</a></div>"; 
} 

有確切的行readmore.php(?例如readmore.php ID = 1201):

$params = $_SERVER['QUERY_STRING']; 
$str = $params; 
$id1 = $str[strlen($str)-1]; 
$id2 = $str[strlen($str)-2]; 
$id3 = $str[strlen($str)-3]; 
$id4 = $str[strlen($str)-4]; 
$news_id = "$id4$id3$id2$id1"; 

$query = "SELECT * FROM naujiena WHERE ID='$news_id'"; 

基本上它,它恢復從地址欄搜索和最後4位數字與該4位ID的消息

這是一個非常原始的做法,但我堅持了幾天,並找不到出路。

我以前試過的是在while($row = mysql_fetch_array($result))循環中創建一個帶有會話的變量,它在索引頁面中顯示它應該顯示的ID,但是在readmore頁面中只顯示最後一個或第一個(取決於desc或asc)這是相當明顯的期望

你能幫我嗎?我會很感激。

回答

2

您可以通過名稱$_GET訪問數組中的查詢字符串的值。

例如,$_GET['id']將是查詢字符串的id=<ID>部分的值。它適用於查詢字符串的每個字段。

// url : readmore.php?id=1201 
$news_id = intval($_GET['id']); 
// now, $news_id contains the value 1201 
$query = "SELECT * FROM naujiena WHERE ID='$news_id'"; 

你可以閱讀官方的幫助:$_GET或各種教程,你可以在網上找到的一個:http://www.w3schools.com/php/php_get.asp

更新

既然你接受我的回答,我覺得有義務也拋出一個關於SQL注入的說法。您應該始終使用mysql_real_escape_string來清理您在SQL查詢中使用的任何輸入。您可以在Wikipedia上找到更多詳細信息:SQL injection或在PHP文檔中:SQL Injection

由於您的ID是數字值,您也可以確保。我更新了代碼片段,以intval執行此操作。

+0

謝謝你的關注,我已經在我的登錄和註釋表單上放置了mysql_rea_escape_string()。並感謝你'intval'的東西!感謝。 – Baseckas 2012-04-07 22:37:26

+1

你應該逃避**所有**,有很多方法可以在數據庫中注入某些東西,你不會想要冒險! – krtek 2012-04-07 22:40:31

2

爲了提取在PHP查詢字符串的參數,使用$_GET超級全局,像這樣:

$_GET["id"] 

還要注意,由遠程(用戶,瀏覽器等)中提供的任何數據可被僞造。因此,攻擊者不妨發送給你?id=0; DROP TABLE users或類似的東西。

查看更多about SQL Injections

驗證輸入始終是個好主意。 你期待ID是一個整數,所以爲了安全起見,你可以檢查if(ctype_digit($_GET["id"]))) ...

最後,它也是消毒使用的是SQL語句的任何輸入一個好主意。使用mysql_real_escape_string()或考慮使用PDO

+1

那麼,你說我應該讓喜歡這一行:'$ ID = mysql_real_escape_string($ _ GET [ 「ID」])'? (或/並且)使用if(ctype_digit(...)))檢查。 – Baseckas 2012-04-07 22:42:26

+0

是的,總是驗證數據,並永遠逃脫它。如果你們兩個都這樣做,那麼你們就安全起來了 – poncha 2012-04-07 22:43:18

1

要獲得特定的HTTP-GET變量,您可以使用$_GET["variableName"]。你的情況,你可以得到的ID是這樣的:

$news_id = $_GET["id"];

0

使用PDO它已經包括SQL注入prevetion

+1

你應該考慮解釋爲什麼這會有所幫助,並且還包括一個指向外部資源的鏈接以獲取更多信息。 – jmort253 2012-04-08 03:49:27