繁体   English   中英

从MySQL删除ID

[英]Delete id from 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时,它会在URL中说正确的话(action=verwijderGebruiker&id=5)但不会删除它,而是返回到主页。

您的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']);

尽管您应该在测试$ id是否等于!= false之前检查$ id中的值,但是还有一些更根本的问题:根据您从URL获得的参数更改数据库值可能会使某人继续尝试使用该URL上的其他值,从而更改数据库值。

您可能会默默地删除记录,或者您可能什么都不做,具体取决于$ leerling-> getId()插入URL的值

我认为$ id可能没有任何价值。 该测试可能无声无息,因为它的评估结果为false,并且没有数据库更新可以跟随。

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

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

使用GET应该只检索数据,并且没有其他效果。

否则,可以使用许多顺序ID发送URL,并在数据库中更改记录,噩梦安全性会失败!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM