2014-01-23 74 views
0

我正在創建一個頁面,您可以在其中上傳文件並將其刪除。使用ajax javascript和php刪除文件

我的上傳工作正常,我的下載也是。 但我不能讓我的刪除工作,我想有刪除使用AJAX和一個可能的確認框,但是當我點擊我的按鈕,現在它什麼都不做。

formatoverzicht.php和ajax.php位於主文件夾中,需要刪除的文件位於主文件夾的上傳文件夾中。

這是我的代碼。

Formatoverzicht.php

<script src="/website/libraries/jquery.js"></script> 
<script type="text/javascript"> 
$('.delete-btn').click(function(filename) { 
$.ajax({ 
    type: 'POST', 
    url: 'ajax.php', 
    data: { filename: filename }, 
    success: function(data) { 
     if(data == 'success') { 
      $this = $(this).closest('tr'); 
      $this.remove(); 
     } 
    } 
}); 
}); 
</script> 

的按鈕:

<button data-file="<?php echo $file ?>" class="delete-btn">Delete</button> 

Ajax.php:

<?php 

if (isset($_POST['filename'])) { 
    if (unlink(htmlentities($_POST['filename']))) { 
    echo "success"; 
    } 
} 
?> 

我試圖讓現在這個固定的幾天,但它仍然沒有工作。

編輯:我不使用此代碼

<script src="/website/libraries/jquery.js"></script> 

<script type="text/javascript"> 
$(document).ready(function() { 

$('.delete-btn').on('click',function() { 
filename=$(this).attr('data-file'); 
    $.ajax({ 
    type: 'POST', 
    url: 'ajax.php', 
    data: { 'filename': filename }, 
    success: function(data) { 
     if(data == 'success') { 
      $this = $(this).closest('tr'); 
      $this.remove(); 
     } 
    } 
}); 
}) 
}); 
</script> 

和我現在得到:event.returnValue已被棄用。請改用標準的event.preventDefault()。作爲錯誤。但代碼仍然不刪除或做任何事情。

+0

以及Ajax錯誤的返回值是什麼? – Pesulap

+0

實際問題是什麼?它是否至少達到目標服務器腳本? – dreamweiver

+0

是否能夠在php文件中獲取發佈數據? –

回答

0

這是因爲文件名是完全未定義的。你應該使用這樣的事情:

<script type="text/javascript"> 
$('.delete-btn').click(function() { 
var filename = $(this).attr('data-file'); 
$.ajax({ 
    type: 'POST', 
    url: 'ajax.php', 
    data: { 'filename' : filename }, 
    success: function(data) { 
     if(data == 'success') { 
      $this = $(this).closest('tr'); 
      $this.remove(); 
     } 
    } 
}); 
}); 
</script> 
0

不應該

$('.delete-btn').click(function(filename) 

是:

$('.delete-btn').click(function(file)

或檢索匿名函數內部等的文件名:

$(this).attr('data-file');

0
<script type="text/javascript"> 
    $('.delete-btn').on('click',function() { 
    filename=$(this).attr('data-file'); 
    $.ajax({ 
     type: 'POST', 
     url: 'ajax.php', 
     data: { filename: filename }, 
     success: function(data) { 
      if(data == 'success') { 
       $this = $(this).closest('tr'); 
       $this.remove(); 
      } 
     } 
    }); 
    }); 
    </script> 

嘗試這樣做('點擊'),您的文件名也不會傳遞給函數。

+0

這一塊仍然是錯誤的,因爲你創建一個基於變量不是字符串數據對象......應該是'數據:{「文件名」:文件名}'.. 。第二件事是,它不使用全局變量這樣的功能,所以使用'變種文件名= $(「刪除-BTN。」)ATTR(‘數據文件’)一個很好的做法;',和第三。硬編碼按鈕選擇器也是錯誤的,因爲可能有多個按鈕。 –

0

試試這個,

HTML:

<button data-file="<?php echo base64_encode($file); ?>" class="delete-btn">Delete</button> 

ajax.php

<?php 

if (isset($_POST['filename'])) { 
    $file = base64_decode($_POST['filename']); 

    if(is_file($file)){ 
     if (unlink($file)) { 
     echo "success"; 
     } 
    }else{ 
     echo "there is no file found (". $file.")"; 
    } 

} 
?> 
0

你按一下按鈕沒有處理,因爲JavaScript是不會被觸發。你需要用你的JavaScript jQuery的「準備就緒()」語句,像這樣:

$(document).ready(function() { 
    // your stuff 
}); 

那麼你應該設置你的文件名可變的,通過別人的建議,像這樣:

filename=$(this).attr('data-file'); 

代替直接傳遞給函數...

此外,請檢查發送到ajax.php的文件名是否與原始文件名匹配。路徑也應該關閉,因爲刪除是文件系統操作。刪除時使用完整的系統路徑(或相對路徑),或確保ajax.php位於與要刪除的文件相同的目錄中