2013-03-25 80 views
0

你好我想創建函數與返回數據,例如當我有函數廣告我想讓它每次顯示我需要什麼,我有表id,sub_id,名稱,日期,我想創建的功能,我可以打印每次我需要廣告(ID),廣告(名稱),我想使它顯示每次我需要什麼,我想保存我所有的結果在數組中,並且每次都抓住我想要的那一排PHP函數保存結果在陣列

<?php 
    function advert($data){ 

    $id = $_GET['id']; 
    $query = mysql_query("SELECT *FROM advertisement WHERE id = $id"); 
    while($row = mysql_fetch_assoc($query)){ 
     $data = array(
     'id'  => $row['id'] 
     ); 
    } 
    return $data; 
} 
    echo advert($data['id']); 
    ?> 

但是我的結果每次都是空的,你能幫我一下嗎?

+0

聞SQL注入... – 2013-03-25 11:05:30

+0

我能做到嗎?只告訴我的邏輯,謝謝 – Arturik1988 2013-03-25 11:06:23

+0

看到這一個,可能會得心應手.. http://stackoverflow.com/questions/517201/coding-of-parameter-value-for-select-in-php-mysql – 2013-03-25 11:06:45

回答

-1

您已經將ID作爲函數參數傳遞。同時在*FROM之間留出空格。

所以請按如下所示使用。

$query = mysql_query("SELECT * FROM advertisement WHERE id = '".$data."'"); 

OR

function advert($id) 
{ 
    $query = mysql_query("SELECT * FROM advertisement WHERE id = '".$id."'"); 
    $data = array(); 
    while($row = mysql_fetch_assoc($query)) 
    { 
     $data[] = $row; 
    } 
    return $data; 
} 

不要使用mysql_*作爲已被棄用,而不是使用PDOMYSQLI_*

+0

和爲什麼是這樣的投票...解釋,所以我可以糾正自己 – 2013-03-25 11:10:31

+0

嘿下來選民回答我,所以我可以糾正它... – 2013-03-25 11:32:31

-1

試試這個:

<?php 
function advert($id){ 
$data= array(); 
//$id = $_GET['id']; 
$query = mysql_query("SELECT *FROM advertisement WHERE id = $id"); 
while($row = mysql_fetch_assoc($query)){ 
    array_push($data,$row['id']); 
} 
return $data; 
} 
var_dump($data); 
//echo advert($data['id']); 
?> 
+0

三連續和所有保持相同的漏洞 – 2013-03-25 11:10:32

+0

非常感謝 – Arturik1988 2013-03-28 09:55:08

1

有在這短短的一段代碼,唯一的好建議是得到一些初學者教程這麼多的缺陷。但是我會花點功夫解釋一些事情。希望這會有所幫助。

第一步將是行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_函數已棄用,不應再使用。嘗試切換到mysqliPDO。但現在,我只是使用你的代碼。

添加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 
}