2016-05-06 46 views
0

我在php中爲mysqli做了一個oop刪除功能。 函數被執行,但它不刪除給定的項目。php/mysqli刪除功能被認可,但它並沒有刪除該項目

THS是我的代碼:

PHP(的mysqli類)

class mysqli_Functions 
    { 
     private $conn; 

     function __construct() 
     { 

      $this->conn = mysqli_connect("localhost","root","usbw"); 

      if (!$this->conn) { 
       echo "Cannot connect to server"; 
       exit(); 
      } 

      $db = mysqli_select_db($this->conn,"geweldig"); 


      if (!$db) { 
       echo "Cannot select database"; 
       exit(); 
      } 
     } 


     public function selectAll($tablename) 
     { 
      return mysqli_query($this->conn,"SELECT * FROM ".$tableName); 
     } 

     public function select() 
     { 

     } 

     public function update() 
     { 

     } 

     public function delete($query, $realEscape = false) 
     { 
      if(!empty($realEscape)){ 
      $what = mysqli_real_escape_string($this->conn, $realEscape); 
      $q = $query .' '. $realEscape; 
      return mysqli_query($this->conn, $q); 
      } 
      else{ 
      return mysqli_query($this->conn, $query); 
      } 
     } 
    } 

PHP(如果函數被調用)

<?php 
    $mysqli_Functions::delete("DELETE FROM modules WHERE id=" , $_POST['id']); 
?> 

Ajax代碼(要觸發事件)

$.ajax({ 
      type: 'post', 
      url: 'actions/module-delete.php', 
      data: {'id': id} 
     }); 
     // Reload 
     setTimeout(function(){ 
      location.reload(); 
     }, 2000); 
    } 

因此,與上面的代碼試圖刪除項目與ID。該ID在一個按鈕中,這就是爲什麼我們使用AJAX。

有人能解釋爲什麼上述的心不是通過ID

+0

請不要做「oop功能」。使用原始mysqli而不需要任何中間類別 –

+0

此外,您的代碼易受SQL注入攻擊。你必須使用準備好的語句。 –

+0

id在Ajax函數中爲哪個值賦值? – Gavin

回答

1

$mysqli_Functions::delete()刪除項目的代碼看起來像它的調用delete()靜態的,但我不知道,因爲你使用$mysqli_Functions,而不是一個類名,所以:

  • 沒有$this作爲其不是一個對象
  • __construct()從未反正叫

你應該嘗試:

$db = new mysqli_Functions(); 
$db->delete("DELETE FROM modules WHERE id=" , $_POST['id']); 

通知->,而不是::

+0

我已經在index.php上做了'$ mysqli_Functions = new mysqli_Functions();' –

+0

但是你用'::'靜態調用不這樣做。 – AbraCadaver

+0

感謝您使用' - >':) –

0

爲什麼你將該方法稱爲靜態? 你應該稱之爲公衆,像這樣的一個:

$id = $_POST["id"]; 
$query = "DELETE FROM modules WHERE id = {$id}"; 

$mysqli = new mysqli_Functions(); 
$mysqli->delete($query, $id); 
+0

將它稱爲靜態有什麼問題? –