2013-01-24 34 views
0

我想做一個功能,選擇每個領域與特定的標準。所以基本上我想點擊一個鏈接,並讓該鏈接的一部分告訴我的PHP函數選擇的標準是什麼。如何從url中獲取信息並在php函數中使用它?

我有這樣的鏈接列表:

<li><a href="category.php?category=cat1">Cat1</a></li> 
<li><a href="">Cat2</a></li> 
<li><a href="">Cat3</a></li> 
<li><a href="">Cat4</a></li> 
<li><a href="">Cat5</a></li> 

鏈接的部分是.php?category=criteria。我如何將這些信息發送到我的功能並使用它來選擇字段?

這是我具備的功能:

public function get_by_category ($cat) { 
    $cat = $_GET['category']; 
    $sql = $this->db->prepare("SELECT * FROM Content WHERE category=?"); 
    $sql->bindParam(1, $cat); 
    $sql->execute(); 

    while ($row = $sql->fetch()) { 
    echo $row['Title']; 
    } 
} 

的結果是什麼,沒有錯誤等不知道怎麼弄的標準,因爲我不知道如何指導準則,以它。我該如何做這項工作?通過鏈接指定標準很重要。

+0

@ Mr.Radical不是真的:bindParam逃脫的變量。也就是說,你是正確的,作者應該知道$ _GET如何非常不安全地使用,就像這樣。 – berkes

+0

@ Mr.Radical 這是示例代碼,我將其簡化爲基本要素。 – ejx

+0

@berkes我不知道PDO有這個功能。我通常使用mysqli_庫。 –

回答

1

使用PDO與命名參數通常工作:

public function get_by_category ($cat) { 
    $cat = $_GET['category']; 
    $sql = $this->db->prepare("SELECT * WHERE category=:category"); 
    $sql->bindParam("category", $cat); 
    $sql->execute(); 

    while ($row = $sql->fetch()) { 
    echo $row['Title']; 
    } 
} 

你可以看到什麼是被放置print $sql->fullStmt檢查準備好的語句它會發送到SQL之前執行的SQL。

更新:爲了看PDO的例外,你可以試試,趕上他們:

public function get_by_category ($cat) { 
    $cat = $_GET['category']; 
    try { 
    $sql = $this->db->prepare("SELECT * WHERE category=:category"); 
    $sql->bindParam("category", $cat); 
    $sql->execute(); 
    } 
    catch (PDOException $e) { 
    print $e->getMessage(); 
    } 

    while ($row = $sql->fetch()) { 
    echo $row['Title']; 
    } 
} 
+0

事實上,你是對的這個工作! – ejx

0

薪火$貓值查詢應該做的工作,但鏈接應該是這樣的:

<li><a href="category.php?category=15">Cat1</a></li> 

public function get_by_category() { 
    $cat = $_GET['category']; //Check if is numeric, strip code out of it etc.. 
    $sql = $this->db->prepare("SELECT * FROM `table` WHERE `category` = $cat"); 
    $sql->bindParam(1, $cat); 
    $sql->execute(); 

    while ($row = $sql->fetch()) { 
    echo $row['Title']; 
    } 
} 
+0

Downvote引入一個漏洞安全漏洞:sql注入。 – berkes

+0

@berkes問題在這裏(閱讀問題)不是安全,但如何得到這個工作。 – mallix

+0

正確:但原始問題示例代碼對於SQL注入是安全的,您的建議會引入一個新的示例代碼。這只是一個糟糕的建議。抱歉。 – berkes

0

至於除了mallix的答案,我建議你來改變INTVAL $貓( $貓)如果類別是數字,或addslashes($貓),如果類別是字符串。

相關問題