我在基于sql数据库中的行创建的页面上有未知数量的复选框输入。
复选框如下所示:
<input type="checkbox" class="deletefunc" value="<? echo $mid; ?>">
选中并提交复选框时,要根据$ mid
的值从数据库中删除一行。复选框可以是松散的(不包含在任何表单中),也可以以自己的形式包含每个复选框(没有提交按钮)。但是,无法在一个表单中包含所有复选框。
原因是它显示在一个循环中,输出如下:
<tr>
<td><input type="checkbox" class="deletefunc" value="<? echo $mid; ?>"></td>
<td><input type="checkbox" class="star" value="1"> <!-- jquery/ajax onclick function --></td>
<td><a href></td>
<td><form name....><input type="submit" value="something"></form></td>
<tr>
所以我需要帮助理解的是,如何根据类名收集所有复选框,并将它们附加到提交按钮....
此外,我将如何编写循环函数,以便知道要执行多少次删除?我的意思是,我如何编写一个循环来获取未知数量的输入值。通常情况下,我知道有多少输入和名称是什么,所以它是为每个输入分配一个变量的问题....我从来没有用未知数量的输入做到这一点。
答案 0 :(得分:1)
我会这样做:
HTML:
<input type="checkbox" class="deletefunc" value="<? echo $mid; ?>">
<button id="delete-them">Delete Them</button>
JS:
$(function() {
$('#delete-them').on('click', function() {
var data = $('.deletefunc').attr('name', 'delete[]').serialize();
$.ajax('delete-them.php', {
method: 'POST',
data: data,
success: function() {
alert('deleted!');
}
});
});
});
PHP:
<?php
$ids = $_POST['delete'];
$params = array_fill(0, count($ids), "?");
$sql = "DELETE FROM some_table WHERE id IN (" . implode(",", $params) . ")";
//DELETE FROM some_table WHERE id IN(?,?,?,?);
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'user', 'pass');
$stmt = $pdo->prepare($sql);
$stmt->execute($ids);
?>
所以我们基本上听一下我们的按钮,当它发生时,我们设置名称(最后用[]
,所以它变成一个数组),用于我们关心的所有类的项目,因此,当我们序列化这些项目时,我们知道如何在PHP中引用它。
然后我们将这些数据发送到服务器,在那里我们读取我们刚刚发送的数组,查看有多少数据,然后创建一个查询来删除这些项目。