JavaScript 使用复选框从 MySQL 数据库中删除多行
Posted
技术标签:
【中文标题】JavaScript 使用复选框从 MySQL 数据库中删除多行【英文标题】:JavaScript delete multiple rows from MySQL db with checkbox 【发布时间】:2018-03-09 12:26:32 【问题描述】:我一直试图弄清楚如何使用复选框和 javascript 从 mysql 中删除多条记录。
此时我有一个工作脚本,它只从我的数据库中删除一条记录(最新 id)。
对于每个product
,我都有复选框
<input class="checkboxProduct" type="checkbox" name="deleteProduct" value="<?php echo $product['id'];?>">
我有一个按钮和 JS 表单(工作 - 它获取所有需要的 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();
【问题讨论】:
mysite.com/?deleteProduct=true&action=select&id=1%20or%201%3D1%3B%20--%20gonner
应该是&action
,而不是?action
。
【参考方案1】:
您需要使用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);
【讨论】:
谢谢,这真的很好用。将接受答案,什么时候可以。以上是关于JavaScript 使用复选框从 MySQL 数据库中删除多行的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用Javascript从gridview获取复选框选中的行值
如何从 django 表单库中隐藏复选框并使用 Javascript 切换其显示属性
如何从复选框中获取值并使用 javascript 计算单击的项目
使用 jquery 表中的复选框从数组中删除 JavaScript 对象