2012-07-30 71 views
-2

我想用複選框刪除mySQL行。這是一個代碼,應該根據互聯網上的某個人工作,但有些原因它不適合我。當我點擊刪除它只刷新,但行不會消失。這件事與我在桌上的ID有關嗎?for循環取數組在php

<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> 
+0

打印您的結果SQL查詢以查看您發送到數據庫的內容。而不是'echo「」;'使用'header('Location:deletetable.php')',清理所有用戶輸入或你有風險 – 2012-07-30 15:47:37

+1

「互聯網上的某個人」忘記告訴你有關[SQL注入攻擊](http://bobby-tables.com)。 – 2012-07-30 15:53:33

+0

該代碼比罪大。不贊成使用'align'屬性,'mysql_ *'函數,無意義的雙星號......這就是爲什麼你不信任來自「互聯網上的某個人」的代碼,並且應該總是用細齒梳更好的,寫你自己的)。 – Palladium 2012-07-30 15:54:14

回答

-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); 
    } 
} 
+0

但是如果你從頭開始重寫那些代碼會更好。 'mysql_ *'已棄用。我只是想給你一個想法,看看它可能是什麼樣子。 – 2012-07-30 15:56:59

+0

1.他不是遍歷整個桌子!他正在遍歷$ checkbox數組! – Besnik 2012-07-30 15:59:04

+0

2.你的答案沒有解決問題! – Besnik 2012-07-30 15:59:24

1

有一些事情我想提請你注意對:

1) PHP中有許多行用無意義的雙星號標出。我很震驚PHP實際上是通過了這些。

2)您在腳本頂部的全局範圍內定義了一個$result(從mysql_query()獲得資源指針)。這意味着在底部,您檢查if($result)時,該檢查總是會到true(除非存在語法錯誤)。這也意味着,無論刪除事件是否發生,點擊提交後頁面將始終刷新。

正如我在評論中提到的,該代碼(坦率地說)是一個廢話。它很容易受到SQL注入攻擊,代碼實際上並沒有做它應該做的事情,它使用了不推薦使用的屬性和函數......代碼沒有做到你想做的事情並不是因爲你的表中的ID,而是因爲你從互聯網上覆制了不起作用的代碼。