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