2017-09-27 16 views
-1

私はチェックボックスとJavaScriptを使用してMySQLから複数のレコードを削除する方法を解明しようとしています。JavaScriptチェックボックス付きのMySQLデータベースから複数の行を削除

現時点では、私はdb(最新ID)からレコードを1つだけ削除する作業スクリプトを持っています。各productに対して

私はボタンとJSフォーム(作業持っているチェックボックス

<input class="checkboxProduct" type="checkbox" name="deleteProduct" value="<?php echo $product['id'];?>"> 

ました - 。それは、すべての必要なIDを取得し、私はそれらを表示することができますが、削除することはできませんが

<script> 
    $(function(){ 
    var e = document.getElementById("selectAction"); 
    $("#btn-action").click(function(){ 
     if(e.options[ e.selectedIndex ].value == "delete"){ 
     var checked = $('.checkboxProduct:checked'); 
     var id = checked.map(function() { 
      return this.value; 
     }).get().join(","); 
     if (id) { 
      checked.closest(".product").remove(); 
      $.ajax({ 
      url: "<?php echo $_SERVER['PHP_SELF']; ?>?deleteProduct=true?action=select&id=" + id, 
      type: "get", 
      success: function(result){ 
       alert("You have successfully deleted these products!"); 
      } 
      }); 
     } 
     } 
    }); 
    }); 
</script> 

削除機能:

public function deleteProduct(){ 
    try{ 
    $product_id = $_GET['id']; 
    $stmt = $this->conn->prepare("DELETE FROM products WHERE id=('$product_id')"); 
    $stmt->execute(); 
    } 
    catch(PDOException $e){ 
    echo $e->getMessage(); 
    } 
} 
+0

'mysite.com/?deleteProduct=true&action=select&id=1%20or%201%3D1%3B%20 - ?%20gonner' – Isaac

+0

それは'&action'、ない 'action'でなければなりません。 – Barmar

答えて

0

あなたが照合するINを使用する必要がありますリストではなく、=です。また、すべてのIDを単一の文字列にすることはできません。リテラルリスト内のアイテムを別々にする必要があります。

SQLインジェクションを防ぐには、パラメータ化された文を使用する必要があります。

$product_id = explode(',', $_GET['id']); 
// Create a set of ?, ?, ?, ... placeholders the same length as the product ID array 
$placeholders = implode(', ', array_fill(0, count($product_id), '?')); 
$stmt = $this->conn->prepare("DELETE FROM products WHERE id IN ($placeholders)"); 
$stmt->execute($product_id); 
+0

ありがとう、これは本当にうまく動作します。できるときは答えを受け入れるだろう。 – Crelix

関連する問題