2012-07-30 5 views
-2

확인란을 사용하여 mySQL 행을 삭제하고 싶습니다. 이것은 인터넷상의 누군가에 따라 작동해야하는 코드이지만, 그것은 나를위한 것이 아닙니다. 삭제를 클릭하면 새로 고침 만되지만 행은 사라지지 않습니다. 이게 내 ID와 관련이 있니?For 루프에서 루프 가져 오기

<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'대신'meta http-equiv = \ "refresh \"content = \ "0; URL = deletetable.php \"> ";'header ('Location : deletetable.php')'를 사용하여 모든 사용자를 삭제 입력 또는 당신이 위험에 처한 –

+1

"인터넷에있는 누군가"는 [SQL injection attacks] (http://bobby-tables.com)에 관해 당신에게 이야기하는 것을 잊어 버렸습니다. –

+0

코드가 죄보다 오래되었습니다. 더 이상 사용되지 않는'align' 속성,'mysql_ *'함수, 무의미한 이중 별표 (nonsensical double-asterisks)가 있습니다 ... 그래서 "인터넷상의 누군가"의 코드를 신뢰하지 않고 항상 미세한 톱니 모양의 빗 더 나은, 자신의 쓰기). – Palladium

답변

-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_ *'은 더 이상 사용되지 않습니다. 나는 그저 어떻게 생겼는지에 대한 생각을 알려 드리고자합니다. –

+0

1. 그는 테이블 전체를 반복하지 않습니다! 그는 $ checkbox 배열을 반복합니다! – Besnik

+0

2. 답변으로 문제가 해결되지 않습니다! – Besnik

1

나는쪽으로 당신의주의를 지시 할 어떤 일이 있습니다

1) 무의미한 두 개의 별표로 묶인 여러 줄의 PHP가 있습니다. 나는 PHP가 실제로 그것들을 헤쳐 나갔다는 것에 충격을 받았다.

2) 스크립트 상단의 전역 범위 (mysql_query()의 리소스 포인터가 지정된 곳)에 $result이 정의되어 있습니다. 즉, if($result)을 확인한 하단의 구문 검사 오류가없는 한 해당 검사는 항상 true이됩니다. 또한 삭제가 실제로 발생했는지 여부에 관계없이 제출을 클릭하면 페이지가 항상 새로 고침됩니다.

나는 코멘트에서 언급했듯이, 그 코드는 (솔직히 말해서) 쓰레기 다. 그것은 SQL 주입에 취약합니다. 코드는 실제로 수행 할 작업을 수행하지 않으며, 사용되지 않는 속성 및 함수를 사용합니다. 원하는 코드를 수행하는 데 실패한 것은 테이블의 ID 때문이 아니라 깨진 기능이없는 코드 때문에 인터넷에서 복사했습니다.