2013-01-24 30 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($猫),如果类别是字符串。

相关问题