1

フォームから複数の値を削除しようとしています (レンタカー システムで、スタッフがレコードから車を削除できるようにしたい)。私はPHPが初めてですが、これは私が今持っているものです。

<?php
$link = mysql_connect ("xxxx", "xxxx", "xxxx");
mysql_select_db ("xxxx");

    $query = "SELECT * from car";
    $result = mysql_query ($query);
    echo ("<form action=\"deleting2.php\" method=\"GET\">");
    echo "<table id = 'table-3'>";
    echo "<thead>";
    echo "<th>Car ID</th>
    <th>Car Name</th>
    <th>Fuel Type</th>
    <th>Transmission</th>
    <th>Engine Size</th>
    <th>Doors</th>
    <th>Total</th>
    <th>Available</th>
    <th>Date Added</th>
    <th>Delete</th> ";
    echo "</thead>";
    for ($i = 0; $i < mysql_num_rows ($result); $i ++)
      {        
       $row = mysql_fetch_object ($result);
       echo "<tbody>";
       echo "<tr>";
       echo "<td>$row->ID</td>";
       echo "<td>$row->CARNAME</td>";
       echo "<td>$row->FUELTYPE</td>";
       echo "<td>$row->TRANSMISSION</td>";
       echo "<td>$row->ENGINE_SIZE</td>";
       echo "<td>$row->DOORS</td>";
       echo "<td>$row->TOTAL</td>";
       echo "<td>$row->AVAILABLE</td>";
       echo "<td>$row->DATEADDED</td>";
       echo "<td><input type='checkbox' name='delete[]' value='$row->ID' /></td>";
       echo "</tr>";
       echo "</tbody>";
      }
      echo ("<tr><td colspan='6' align='center'><input type=\"submit\" value=\"Delete  \"></td> </tr></table></form>");
      echo  "</table>";
      mysql_close ($link);
      ?>

ここで、削除ボタンを押すと、フォーム アクションで述べたように、次のコードを持つ「deleting2.php」という私の php ページに移動します。

<?php
$link = mysql_connect ("xxxx", "xxxx", "xxxx");
mysql_select_db ("xxxx");

$ID='$_GET[ID]';

// DELETE ANY RECORDS IN DATABASE
for ($i = 0; $i < @mysql_num_rows ($result); $i ++)
{
if(isset($_GET['delete[]']) && $_GET['delete[]']=='$row->ID');
{
   $query=("DELETE FROM car WHERE ID='$_POST[ID]'");
    $result1 = mysql_query($query);
}
}
mysql_close ($link);

?>

問題は、データベースから何も削除していないことです。削除2.phpが処理されているときのアドレスバーのURLは次のとおりです。

http://www.computing.northampton.ac.uk/~11430900/a1/webpages/deleting2.php?delete[]=6

私の知る限り、チケットの値を選択します。ここでは、対応する ID 値が 6 のボックスにチェックを入れました。したがって、チェックボックスは機能します。データベースに対して何も行わず、値を削除しません。多くのチュートリアルを試しましたが、チェックボックスを使用して削除できません。どんな助けでも大歓迎です。

4

3 に答える 3

1

質問で述べたように、次のループを繰り返す必要はありません

for ($i = 0; $i < @mysql_num_rows ($result); $i ++)
{
if(isset($_GET['delete[]']) && $_GET['delete[]']=='$row->ID');
{
   $query=("DELETE FROM car WHERE ID='$_POST[ID]'");
    $result1 = mysql_query($query);
}
}
mysql_close ($link);

ちょうど次へ。

フォーム メソッドを POST に変更します。

次のコードを使用します。$_POST['delete'] は配列になるため、内破が必要です

if(isset($_POST['delete']) && count($_POST['delete']) > 0) {
    $query=("DELETE FROM car WHERE ID in ('".implode(',',$_POST['delete'])."')");
    $result1 = mysql_query($query);
}
于 2012-12-10T13:55:00.873 に答える
0

データはサニタイズする必要がありますが、ID が数字であることが予想される場合は問題ありません。

$id = (int)$_GET['ID'];    
$query=("DELETE FROM car WHERE ID=$id");

SQL インジェクション攻撃については、コードの残りの部分を確認する必要があります。

于 2012-12-10T13:41:05.483 に答える
0

まず第一に、データベース エントリの削除を実装するときは、最終的に空のデータベースになる可能性があるため、十分に注意してください。

第二に、常にあなたの入力をサニタイズしてSQL Injection.

PDO第三に、少なくともmysqli_*関数の代わりに学習mysql_することは、現在非推奨であり、次の PHP リリースで削除される可能性があります。

さて、あなたの問題に対して、ID値をdelete[]配列値に設定しています。つまり、これを行う必要があります。

// DELETE THE DESIRED RECORDS IN DATABASE
foreach($_GET['delete'] as $id) {
    $result = mysql_query("DELETE FROM car WHERE ID = '" . mysql_real_escape_string($id) . "'");
    // do something with the $result here ...
}

他のオプションは、整数のみを期待することです:

// DELETE THE DESIRED RECORDS IN DATABASE
foreach($_GET['delete'] as $id) {
    $result = mysql_query("DELETE FROM car WHERE ID = '" . (int)$id . "'");
    // do something with the $result here ...
}
于 2012-12-10T13:47:47.863 に答える