有在這短短的一段代碼,唯一的好建議是得到一些初學者教程這麼多的缺陷。但是我會花點功夫解釋一些事情。希望這會有所幫助。
第一步將是行function advert($data)
,您將一個參數$data
傳遞給該方法。現在稍後在返回字段中使用相同的變量$data
。我想你試圖讓函數知道你想要填充什麼變量,但這不是必需的。
如果我正確理解你正在嘗試做什麼,我會通過$id
參數。然後你可以使用這個函數根據你提供的ID來獲取數組,它並不總是來自querystring(儘管它可以)。
function advert($id) {
}
現在我們有基礎設置,我們想從數據庫中獲取信息。你的代碼可以工作,但是對於SQL注入來說它也很脆弱。由於這是一個主題,我建議你使用谷歌來查找關於這個主題的信息。現在我只是說你需要驗證用戶輸入。在這種情況下,你需要一個ID,我假設它是數字,所以確保它的數字。我還會假設你有一個整數ID,這樣就可以了。
function advert($id) {
if (!is_int($id))
return "possible SQL injection.";
}
然後我會做出另一個假設,那就是ID是唯一的,而且您只希望返回1個結果。因爲只有一個結果,我們可以在查詢中使用LIMIT
選項,並且不需要while
循環。請注意,mysql_
函數已棄用,不應再使用。嘗試切換到mysqli
或PDO
。但現在,我只是使用你的代碼。
添加ID到$data
數組似乎沒用,但我想你明白如何從SQL表中添加其他列。
function advert($id) {
if (!is_int($id))
return "possible SQL injection.";
$query = mysql_query("SELECT * FROM advertisement WHERE id = $id LIMIT 1");
$row = mysql_fetch_assoc($query);
$data = array(
'id' => $row['id']
);
return $data;
}
不要調用這個方法,我們可以使用GET參數。請注意,回顯數組很可能不會給你想要的結果。我會將結果存儲在一個變量中,然後繼續使用它。
$ad = advert($_GET['id']);
if (!is_array($ad)) {
echo $ad; //for sql injection message
} else {
print_r($ad) //to show array content
}
聞SQL注入... – 2013-03-25 11:05:30
我能做到嗎?只告訴我的邏輯,謝謝 – Arturik1988 2013-03-25 11:06:23
看到這一個,可能會得心應手.. http://stackoverflow.com/questions/517201/coding-of-parameter-value-for-select-in-php-mysql – 2013-03-25 11:06:45