[英]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.