2017-08-16 125 views
1

我想从复选框中删除记录。我有一个表格,以从数据库这样如何从PHP中的循环多个复选框中删除

$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返回一个值,当我调试它,但不知何故它不能从数据库中删除。我想知道我哪里错了?

感谢您的帮助

+0

代码中并没有太大的意义。变量的值和来源是未知的。和'$ hapusPenduduk'一样,我没有看到分配的位置,以及'$ call_db'的相同内容。 –

+0

对不起,我的错,我忘了添加它们。现在修复:) –

+0

似乎您有一组复选框,但在选择要删除的值时不指定索引。 – dkretz

回答

0

很难从这个代码片断完全调试,但这里是改善/调试一些提示:

使用绑定变量,而不是在你的查询字符串。所以改变你的最后一个代码段是这样的:

<?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注入攻击的来源以及代码不安全的原因。)然后,您应该开始能够调试如下内容:是否将它嵌入到if块中?是否有行被删除?等

另一件要看的是你是否承诺/需要提交你的数据。例如,有关自动提交的信息,请参阅http://php.net/manual/en/mysqli.autocommit.php。如果它关闭(并且您正在使用事务表),那么您可能需要手动提交(或将autocommit设置为true)。

希望有所帮助。

+0

谢谢你的解释。我会尝试它:)但我仍然困惑,什么是“哪里No_Identity =?”的问号。什么是“mysqli_stmt_bind_param($ stmt,$ netizenData)”的$ stmt呢? –

+0

'?'被称为绑定变量。这是您稍后将插入的值(即,使用mysql_stmt_bind调用)。在你的代码中,如果有人提交了一个类似“'的值; DROP TABLE table_data_netizen;'你的表将被丢弃。绑定变量被解释为使得值可以*只占用问号的空间。 [php文档](http://php.net/manual/en/mysqli-stmt.bind-param.php) – EvanM

+0

另外,请查看[W3学校PHP绑定变量](https://www.w3schools。 COM/PHP/php_mysql_prepared_statements.asp)。它为你如何/为什么要他们提供了一个很好的解释。 :)重复使用它们也有性能优势。 – EvanM

0

现在有效。我的代码更改为:

<?php 
    $connect = mysqli_connect('Ian', 'root', '', 'netizen'); 
    $call_db = mysqli_query($connect, "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_ASSOC)){ 
     echo "<tr>" 
       . "<td style='text-align:center; width:2%'>" 
       . "<input type='checkbox' name='deleteNetizen[$counter]' value='". $db['No_Identity'] ."'/>" 
       . "</td>" 
       . "<td style='width: 3%'>". $db['No_Identity']. "</td>" 
       . "<td style='width: 4%'>". $db['No_Driving_License']. "</td>" 
       . "<td style='width: 10%'>". $db['Name']. "</td>" 
       . "<td style='width: 12%'>". $db['BOD']. "</td>" 
       . "<td style='width: 9%'>". $db['City_Code']. "</td></tr>"; 
      ++$counter; 
     } 
     ?> 
    </table> 
    <input type="submit" name="btnNetizen" value='Delete Data Netizen Table'/> 
    </form> 

deleteData.php

<?php 
$netizenData= $_POST['deleteNetizen']; 
$hapusPenduduk = $_POST['btnNetizen']; 
$db = mysqli_connect('Ian', 'root', '', 'netizen'); 

    if($hapusPenduduk){ 
     $delete_stmt = mysqli_prepare($db, "delete from table_data_netizen where No_Identity = ?"); 
     foreach ($netizenData as $del) {//array processed using foreach  
      mysqli_stmt_bind_param($delete_stmt, 's', $del); 
      //'s' is type of parameter $del which is string 
      mysqli_stmt_execute($delete_stmt); 
     } 
    } 
?> 
相关问题