我正在尝试使用checkbox
从我的sql数据库中删除行。只要只标记了一个checkbox
,这样就可以正常工作。但我也希望它可以删除多行。我见过许多例子,但我无法让它发挥作用。希望这里的任何人都可以帮助我。
首先是result.php文件(这里是创建的所有行/表):
while ($row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_BOTH)) {
echo "<tr>";
echo "<td><input type='checkbox' name='id[]' class='toedit' value='" . $row[0] . "'></td>";
echo "<td>" . $row[1] . "</td>";
echo "<td>" . $row[2] . "</td>";
echo "</tr>";
}
echo "</table>";
这个文件包含在我的主html(main.html)文件中,这里也是Jquery。
Jquery将chechbox变量发送到delete.php文件:
<script type="text/javascript">
$(".deletelogg").on('click', function(){
$.ajax({
type: 'POST',
url: "php/delete.php",
data: {id:$('.toedit:checked:first').val()},
success: function(data) {
alert(data);
$("p").text(data);
}
});
});
</script>
最后在我的delete.php文件中:
include 'connect-database.php';
for ($i = 0; $i < count($_POST['id']); $i++) {
if ($_POST['id'][$i] != "") {
echo $_POST['id'] ;
$sql = "DELETE FROM Logg Where LoggID LIKE '".$_POST['id']."'";
$stmt = sqlsrv_query( $conn, $sql);
if ($stmt == false) {
die( print_r(sqlsrv_errors(), true) );
}
}
}
我试图制作一个包含来自id
的所有checkbox
的数组,但它不起作用..任何帮助请求?
答案 0 :(得分:2)
一个工作示例:http://jsfiddle.net/Twisty/1y4zy5mn/
您应该遍历复选框并收集值。给出以下HTML:
<table>
<tr>
<td>
<input type="checkbox" name="id[]" class="toedit" value="1" />
</td>
<td>One</td>
<td>Fish</td>
</tr>
<tr>
<td>
<input type="checkbox" name="id[]" class="toedit" value="2" />
</td>
<td>Two</td>
<td>Fish</td>
</tr>
<tr>
<td>
<input type="checkbox" name="id[]" class="toedit" value="3" />
</td>
<td>Red</td>
<td>Fish</td>
</tr>
<tr>
<td>
<input type="checkbox" name="id[]" class="toedit" value="4" />
</td>
<td>Blue</td>
<td>Fish</td>
</tr>
</table>
<button class="deletelogg">Delete</button>
<p></p>
你的JQuery需要做更多的工作。这适用于1个或多个:
$(".deletelogg").on('click', function () {
var ids = [];
$(".toedit").each(function () {
if ($(this).is(":checked")) {
ids.push($(this).val());
}
});
if (ids.length) {
$.ajax({
type: 'POST',
url: "php/delete.php",
data: {
id: ids
},
success: function (data) {
alert(data);
$("p").text(data);
}
});
} else {
alert("Please select items.");
}
});
有了这个,您也可以切换到foreach()
循环:
include 'connect-database.php';
foreach ($_POST['id'] as $id) {
echo $id;
$sql = "DELETE FROM Logg Where LoggID = $id";
$stmt = sqlsrv_query( $conn, $sql);
if ($stmt == false) {
die( print_r(sqlsrv_errors(), true) );
}
}
答案 1 :(得分:0)
我是这样做的:先做一个&#34; checkAll&#34;复选框,选中时,选中所有复选框。然后在表单的最后,输入&#34; delete&#34;按钮。按下此按钮后,将删除所有选中的复选框。我认为即使对于某些复选框也是如此(如果您只检查其中一些复选框,而不是所有复选框)。
<div id="content"></div>
<input type="checkbox" id="checkAll">
//get all the rows from db here, or make them manually
<input type="checkbox" class="check" name="checkbox" value="<?php echo $row->id;?>">
//...
然后,使用这段js代码,你可以检查它们或其中一些,并且&#34;发送&#34;它们是服务器端脚本,它将抓取它们,并从数据库中删除它们。
var checkBoxes = document.getElementsByTagName('input');
var param = "";
var params = [];
for (var counter=0; counter < checkBoxes.length; counter++) {
if (checkBoxes[counter].type.toUpperCase()=='CHECKBOX' && checkBoxes[counter].checked == true) {
param += checkBoxes[counter].value+' ';
params = param;
}
}
$.ajax({
type: "POST",
url: "path/to/server/side/script",
data: { params:params },
success: function(resp){
$('#content').html(resp);
}
});
并检查所有:
$("#checkAll").click(function(){
$(".check").prop('checked', $(this).prop('checked'));
});
我不知道这是否是最好的方式,但这是一个重点。此外,请不要忘记保护您的应用。