-2

チェックボックスを使用して mySQL 行を削除したい。これは、インターネット上の誰かによると機能するはずのコードですが、何らかの理由で私には機能しません。削除をクリックすると更新されるだけですが、行は消えません。これはテーブル内の私の ID と関係がありますか?

<body>
<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="*****"; // Mysql password
$db_name="test"; // Database name
$tbl_name="deviation"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

?>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td><form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF">&nbsp;</td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Delete multiple rows in mysql</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">Åtgärda</td>
<td align="center" bgcolor="#FFFFFF"><strong>Chassinummer</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Problem detail</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Fault code</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Position</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Help object</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Operation step</strong></td>
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center" bgcolor="#FFFFFF"><input name="checkbox[]" type="checkbox"     id="checkbox[]" value="<?php echo $rows['id']; ?>"></td>
<td bgcolor="#FFFFFF"><?php echo $rows['chassi']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['problem_detail']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['fault_code']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['fault_code']; ?></td>
<td bgcolor="#FFFFFF"><?php  echo $rows['position']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['help_object']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows['operation_step']; ?></td>
</tr>
<?php
}
?>

<tr>
<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete"     type="submit"     id="delete" value="Delete"></td>
</tr>
<?php

**$checkbox = $_POST['checkbox'];**
**$delete = $_POST['delete'];**

// Check if delete button active, start this
if($delete){
for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];

**$sql = "DELETE FROM $tbl_name WHERE id='$del_id'";**
$result = mysql_query($sql);
}

// if successful redirect to delete_multiple.php
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=deletetable.php\">";
}
}
mysql_close();
?>
</table>
</form>
</td>
</tr>
</table>
</body>
4

2 に答える 2

1

私があなたの注意を向けたい特定の事柄があります:

1)PHPには、無意味な二重アスタリスクで囲まれた行がいくつかあります。PHPが実際にそれらを実行したことにショックを受けました。

2)$resultスクリプトの上部にあるグローバルスコープ内に定義があります(ここで、からリソースポインターが指定されていますmysql_query())。これは、チェックする下部でif($result)、そのチェックが常に行われることを意味しますtrue(構文エラーがない限り)。これは、削除が実際に行われたかどうかに関係なく、[送信]をクリックするとページが常に更新されることも意味します。

コメントで述べたように、そのコードは(率直に言って)がらくたの一部です。SQLインジェクションに対して脆弱であり、コードは実際には本来の機能を実行せず、非推奨の属性と関数を使用しています...コードが目的の機能を実行できないのは、テーブル内のIDが原因ではありません。あなたがインターネットからコピーした壊れた、機能していないコードのために。

于 2012-07-30T16:11:43.353 に答える
-1

テーブル全体を繰り返さないでくださいこれを置き換えます

for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];

**$sql = "DELETE FROM $tbl_name WHERE id='$del_id'";**
$result = mysql_query($sql);
}

if(isset($_POST['checkbox']) && is_array($_POST['checkbox')){
    foreach($_POST['checkbox'] as $id){
        $id = (int)$id;
        $sql = "DELETE FROM $tbl_name WHERE id='$id'";
        $result = mysql_query($sql);
    }
}
于 2012-07-30T15:53:32.223 に答える