我想从复选框中删除记录。我有一个表格可以像这样显示数据库中的数据
$connect = mysqli_connect('Ian', 'root', '', 'penduduk');
$call_db = mysqli_query($koneksi, "select * from tabel_data_penduduk");
<form action="deleteData.php" method="post">
<table style="border:black solid; width: 100%">
<tr style="font-weight: bold">
<th style="width: 2%"><input type="checkbox"/></th>
<th style="width: 3%">No. Identity</th>
<th style="width: 4%">No. Driving License</th>
<th style="width: 10%">Name</th>
<th style="width: 12%">Birth Date</th>
<th style="width: 9%">City Code</th>
</tr>
<?php
$counter=0;
while($db = mysqli_fetch_array($call_db, MYSQLI_NUM)){
echo "<tr>"
. "<td style='text-align:center; width:2%'>"
. "<input type='checkbox' name='deleteNetizen[$counter]' value='". $db[0] ."'/>"
. "</td>"
. "<td style='width: 3%'>". $db[0]. "</td>"
. "<td style='width: 4%'>". $db[1]. "</td>"
. "<td style='width: 10%'>". $db[2]. "</td>"
. "<td style='width: 12%'>". $db[3]. "</td>"
. "<td style='width: 9%'>". $db[4]. "</td></tr>";
++$counter;
}
?>
</table>
<button type="submit" name="btnNetizen" value='ButtonNetizen'>Delete Data Netizen Table</button>
</form>
`
然后 deleteData.php(与表单相同的文件)是:
<?php
$netizenData= $_POST['deleteNetizen'];
echo "$netizenData";
$hapusPenduduk = $_POST['btnNetizen'];
$db = mysqli_connect('Ian', 'root', '', 'netizen');
if($hapusPenduduk){
$deleteData_Netizen = mysqli_query($db, "delete from table_data_netizen where No_Identity = $netizenData");
}
?>
当我调试它时,$netizenData
返回一个值,但不知何故无法从数据库中删除它。我想知道我哪里出错了?
感谢帮助
最佳答案
很难从这个代码片段中完全调试,但这里有一些改进/调试的技巧:
在查询中使用绑定(bind)变量而不是字符串。因此,将您的最后一个代码片段更改为:
<?php
$netizenData= $_POST['deleteNetizen'];
$db = mysqli_connect('Ian', 'root', '', 'netizen');
$delete_stmt = mysqli_prepare($db, "delete from table_data_netizen where No_Identity = ?"); // note that you can / should re-use this prepared statement
if($hapusPenduduk){
mysqli_stmt_bind_param($delete_stmt, $netizenData);
mysqli_stmt_execute($delete_stmt);
// some debug info:
printf("%d rows deleted.", mysqli_affected_rows($delete_stmt));
}
// if necessary
mysqli_stmt_close($delete_stmt);
?>
此更改将使您的代码中发生的事情更加清晰。例如,如果有人在 $netizenData
中加上引号,您会得到奇怪的结果。 (事实上,这就是 SQL 注入(inject)攻击的源头,也是您的代码不安全的原因。)然后您应该开始能够调试诸如以下内容:您是否将其放入 if
block 中?是否删除了任何行?等等
要查看的另一件事是您是否正在提交/需要提交您的数据。例如,参见 http://php.net/manual/en/mysqli.autocommit.php有关自动提交的信息。如果它关闭(并且您正在使用事务表),那么您可能需要手动提交(或将自动提交设置为 true)。
希望对您有所帮助。
关于php - 如何在 PHP 中从循环中删除多个复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45724139/