2013-12-08 25 views
0

我正在使用blueimp文件上傳程序。我遇到的問題 是在刪除文件時能夠更新數據庫表。jquery文件上傳如何從db表中刪除

當兩個不同的用戶輸入相同的文件名進行上傳時,在mysql表中註冊爲 作爲具有相同文件名和不同用戶標識的兩個不同記錄。問題是當你去「刪除」文件名時,它會刪除所有具有該名稱的文件。這是文件上傳部分工作正常代碼:

protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, 
     $index = null, $content_range = null) { 
    $file = parent::handle_file_upload(
     $uploaded_file, $name, $size, $type, $error, $index, $content_range 
    ); 
    if (empty($file->error)) { 
     $sql = 'INSERT INTO `'.$this->options['db_table'] 
      .'` (`name`, `size`, `type`, `url`, `listid`, `dorder`, `link`)' 
      .' VALUES (?, ?, ?, ?, ?, ?, ?)'; 
     $query = $this->db->prepare($sql); 
     $query->bind_param(
     'sisssss', 
      $file->name, 
      $file->size, 
     $file->type, 
      $file->url, 
      $file->listid, 
      $file->dorder, 
      $file->link 
     ); 
     $query->execute(); 
     $file->id = $this->db->insert_id; 
    } 
    return $file; 
} 

我遇到的問題是能夠在「listid」變量添加到 WHERE下面的MySQL查詢的WHERE子句。 Listid識別用戶。這是 刪除代碼從數據庫表中刪除的文件名:

public function delete($print_response = true) { 
    $response = parent::delete(false); 
    foreach ($response as $name => $deleted) { 
     if ($deleted) { 
      $sql = 'DELETE FROM `' 
       .$this->options['db_table'].'` WHERE `name`=?' ; 
      $query = $this->db->prepare($sql); 
      $query->bind_param(
      's', 
      $name 
      ); 
      $query->execute(); 
     } 
    } 
    return $this->generate_response($response, $print_response); 
} 

任何幫助是極大的讚賞,我已經嘗試多種解決方案 無濟於事。

+0

聽起來像你的設置中有一些邏輯問題。允許兩個具有相同文件名的不同用戶是有問題的。你爲什麼這樣做?這是一個有效的用例嗎?你能否簡單地爲每個用戶使用一個文件夾來避免這種情況? –

+1

您應該使用主鍵和用戶ID列執行所有數據庫記錄操作 – Scuzzy

+0

發送到數據庫文件的唯一信息是文件和用戶信息。實際的圖像文件全部上傳到特定的用戶目錄。當文件被刪除時,正確的用戶文件將從用戶映像目錄中刪除,在那裏沒有問題。問題是如何將「listid」變量添加到mysql DELETE語句的WHERE子句中,以便正確更新表。 – Jim

回答

0

找到了一個解決方案,雖然它有點破解,但它的工作原理。上傳程序 是blueimp jquery-file-upload。它使用2個php文件以及一組javascript文件。 php文件是index.php和uploadHandler.php。

我捕獲uploadHandler.php文件中的用戶標識。我創建了一個全局變量 併爲其分配了用戶標識。

$ GLOBALS ['listidDel'] = $ listid;

然後在index.php文件和刪除功能,我改變了SQL查詢 到:

$ SQL = 「DELETE FROM " . $this->options['db_table'] . " WHERE listid =」。 $ GLOBALS ['listidDel']。 「AND name =?」 ;

有點破解,它確實有效。現在,當我刪除文件時,它只會刪除由用戶標識擁有的 文件名。步步高昇。