2017-08-16 20 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ブロックに入れましたか?行は削除されましたか?その他

もう1つのことは、データをコミットする必要があるかどうかです。たとえば、自動コミットの情報についてはhttp://php.net/manual/en/mysqli.autocommit.phpを参照してください。オフの場合(トランザクションテーブルを使用している場合)は、手動でコミットする(または自動コミットをtrueに設定する)必要があります。

希望に役立ちます。

+0

Wowは説明をしてくれてありがとうございます。私はそれを試してみる:)しかし、私はまだ混乱している、何が疑問符は "No_Identity =?" "mysqli_stmt_bind_param($ stmt、$ netizenData)"の$ stmtは何ですか? –

+0

'?'はバインド変数と呼ばれます。後で挿入する値です(つまり、mysql_stmt_bind呼び出しを使用します)。あなたのコードで、誰かが ''のような値を提出した場合、 DROP TABLE table_data_netizen; 'あなたのテーブルは削除されます。バインド変数は、値が疑問符のスペースだけを占めるように解釈されます。 [php docs](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); 
     } 
    } 
?> 
関連する問題