php - 如何在 PHP 中从循环中删除多个复选框

标签 php mysql sql

我想从复选框中删除记录。我有一个表格可以像这样显示数据库中的数据

$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/

相关文章:

javascript - 隐藏错误文本,直到框/按钮被点击

php - 为几个页面设置 SSL

java mysql 事务死锁

sql - 如何在SQL中使用替换变量来提示用户输入客户名称?

sql - 在 Redshift 中将时间戳转换为整数

c# - 无法将参数值从 DropDownList 转换为字符串

php - 允许多语言显示的好界面是什么

php - 将 PHP/MySQL 数据拆分为 3 列

php - 如何在任何 Excel 电子表格或替代方案中导出数据库

mysql - mybatis选择两个时间之间的记录