从MySQL删除id

时间:2015-05-29 08:52:45

标签: php mysql

在MySQL中我有几个用户,当我想删除用户时,我使用以下代码:

<td><b><a href='.?control=directeur&action=verwijderGebruiker&id=".$leerling->getId()."'><img src='img/delete.png' /></a></b></td>

在我的控制器中:

 private function verwijderAction()
 {
       $this->model->verwijderGebruiker();
       $this->forward('default','directeur');
 }

在我的模特中:

 public function verwijderGebruiker()
 {
   $id = filter_var($_REQUEST['id'], FILTER_VALIDATE_INT);

   if($id!=false)
   {
     $sql = 'DELETE FROM `contacten` WHERE `id`=:id';
     $stmnt = $this->db->prepare($sql); // bereid de query voor
     $stmnt->bindParam(':id',$id); // bindParam = verbindt de parameter: ":<parameter>" met de "<variable>".
     $stmnt->execute(); // voert de query uit
   } 
} 

当我想要删除ID时,它在网址(action=verwijderGebruiker&id=5)中说了正确的内容,但它没有删除它,而是返回到主页。

2 个答案:

答案 0 :(得分:0)

你的id永远不会进入你的方法。你必须将它作为参数交给你的函数:

public function verwijderGebruiker($id)
{
   $id = filter_var($id, FILTER_VALIDATE_INT);
   // ....
}

//call it outside your class with your request-variable:
$my_class = new MyClass();
$my_class->verwijderGebruiker($_REQUEST['id']);

答案 1 :(得分:0)

虽然您应该在测试之前检查$ id中的值,如果它!= false,则存在更多基本问题:根据您从URL获取的参数更改数据库值可能允许某人继续在URL上尝试不同的值,从而更改数据库值。

您可能会默默地删除记录,或者您可能无所事事,具体取决于通过$ leerling-&gt; getId()

插入到您网址中的值

我认为$ id可能没有任何价值。该测试可能默默无法说出任何内容,因为它的评估结果为false,并且无法进行数据库更新。

更重要的是:$ id必须在POST中发送,而不是GET请求。

请参阅:http://www.wikiwand.com/en/Hypertext_Transfer_Protocol#/Request_methods

  

使用GET应该只检索数据,不应该有任何其他影响。

否则可以发送URL,其中包含许多顺序ID,并且数据库中的记录已更改,噩梦安全性失败!

此外,您的测试不仅需要确保$ id有一个值,而且它是一个可以删除的DB记录并返回结果,捕获任何错误。