2014-07-03 534 views
0

我試圖創建一個列出數據庫表中所有行的HTML表。然後,在每一行旁邊我想要一個按鈕,以便用戶可以刪除該條目。我創建了表格,但無法使按鈕正常工作。PHP - 使用按鈕刪除數據

我一直在尋找,我發現這個職位How to Call a PHP Function on the Click of a Button,但我不能得到它的工作。我從來沒有使用Ajax,所以我可能無法正確理解代碼。

下面是代碼:

去通過表中的所有數據,併爲每個條目

<?php 
for ($x = 0; $x < sizeof($data); $x++) { 
?> 
    <input type="submit" class="tableButton" name="<?php echo $x ?>" value="<?php echo $x ?>"> 
<?php 
}  
?> 

當tableButton被點擊,它的值發送到AJAX創建一個按鈕。 PHP

$('.tableButton').click(function() { 
    var clickBtnValue = $(this).val(); 
    var ajaxurl = 'ajax.php', 
    data = { 'action': clickBtnValue }; 
    $.post(ajaxurl, data, function (response) { 
    }); 
}); 

ajax.php

獲取被按下的鍵的值,並用它做什麼

<?php 
if (isset($_POST['action'])) { 
    $data = $_POST['action']; 
    echo $data; 
} 
?> 

目前我只是把它呼應的值來測試它,但它顯示什麼。我會做的是運行此查詢:

DELETE from myTable WHERE id = $data; 

或者,如果有人知道更好的方法來做到這一點,請讓我知道。

編輯

做更多搜索後,我發現爲什麼這是不工作我沒有料到。由於我懷疑自從我從未使用過AJAX,所以我不知道回聲不會直接打印到屏幕上。我只是將回聲更改爲刪除查詢,並對其進行了測試,並且它可以工作...所以代碼很好,但我認爲我應該在某個時候學習AJAX。感謝所有的答覆。

我也意識到可能在這裏的SQL注入,這只是一個快速的模擬,謝謝。

+0

這是一個不錯的SQL注入漏洞。 –

+0

@André:信用在何處:至少OP知道'isset' ...對於OP:如果用戶將您的按鈕的值更改爲_「%」_,那麼在查詢中使用該值會給出如下結果:'DELETE FROM myTable WHERE id =「%」',那不是你要求的安全,是嗎? –

+0

這裏:[我怎樣才能防止SQL注入在PHP?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)與一個很好的例子注入準備好的語句,你幾乎可以將它複製/粘貼到你的PHP代碼中而不是'echo $ data'中並調整查詢。 –

回答

1

從這個角度來看,我們很難幫到你。

你應該做一些調試,如:

  1. 檢查相關ajax.php被稱爲(用「F12」,例如檢查控制檯)
  2. 如果是,檢查所傳遞的數據通過您的AJAX POST
  3. 如果沒有,也許參考鏈接錯誤

讓我聽到你得到了什麼。

+0

在這種情況下,Javascript/AJAX部分看起來不錯,只是作者不知道如何處理PHP部分,所以你的回答是無關緊要的。 –

+0

你是第二個燃燒的傢伙,我認爲這個社區即將是建設性的。 而不是浪費時間與該聲明,更好地幫助他。 PHP部分看起來不錯,順便說一句。 Greetz – Thomas

+0

我沒有燃燒,我只是告訴你,你的答案是無關緊要的,所以你可以改善它/刪除它/之前有人來到它實際上火焰或downvotes你。而且我不確定如果在那裏沒有數據庫查詢,PHP部分的外觀如何。 –

1

好的。首先你需要創建帶有行ID的按鈕。你可以使用mySQL和PHP循環來完成。用以下格式創建它。

<input type="submit" name="test" data-id="23" value="Remove" class="delete_row" />    
<input type="submit" name="test" data-id="24" value="Remove" class="delete_row" />    
<input type="submit" name="test" data-id="25" value="Remove" class="delete_row" />    
<input type="submit" name="test" data-id="26" value="Remove" class="delete_row" /> 

這裏替換數據-ID與你正在尋找刪除行的id每個按鈕。(更換23,24等進行數據庫ID動態)。

Java腳本的

$(document).ready(function(){ 

    $(".delete_row").click(function(e){ 

     e.preventDefault(); 
     var deleteId = $(this).attr("data-id");//unique id of the raw to be deleted 

     var request = $.ajax({ 
     url: "ajax.php", 
     type: "POST", 
     data: { id : deleteId }, 
     dataType: "json" 
     }); 
     request.done(function(msg) { 

      if(msg.status) 
       alert("Deleted successfully!"); 
      else 
       alert("Something gone wrong!!"); 
     }); 
     request.fail(function(jqXHR, textStatus) { 
      alert("Request failed: " + textStatus); 


     }); 

    }); 


}); 

ajax.php

<?php 
    /* AJAX check */ 
    if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 

     $delete_id = $_POST["id"]; 
     if(is_numeric($delete_id)){ 

      /*DELETE QUERT WHERE id = $delete_id (Try to use mysqli or PDO) */ 
      /* $affected_rows = effected_rows() */ 

      if($affected > 0) 
      { 
       echo json_encode(array("status" => true));die; 
      } 

     } 
     echo json_encode(array("status" => false));die; 
    } 
    die("Get out of here!"); 
?> 

我希望這將幫助你:)

1

您可以通過這種方式嘗試。我認爲這將有助於你

HTML文件

<html> 
<head> 
<title>Test</title> 
</head> 
<body> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script> 
<script> 
$('.tableButton').live('click', function(){ 
    var id = $(this).val(); 
    $.ajax({ 
     url:'ajax.php' 
     ,data:{id:id} 
     ,type:'post' 
     ,success:function(data){ 
      if(data == 'success'){ 
       $('#' + id).remove(); 
      } 
     } 
    }); 
}); 
</script> 
<?php 
    for ($x = 0; $x < 5; $x++) { 
?> 
<input type="submit" class="tableButton" id="<?=$x?>" name="<?php echo $x ?>"value="<?php echo $x ?>"> 
<?php 
} 
?> 
</body> 
</html> 

ajax.php

<?php 
if(isset($_POST['id'])){ 
    $id = $_POST['id']; 
    //delete operation here 
    //if(deleted) echo 'success'; 
} 
?>