簡體   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