2011-05-11 122 views
-2

请有人可以帮我解决这个问题。我是一个总的noob与php/mysql/stackoverflow。使用复选框删除记录/多个记录(PHP/MYSQL)

我想删除一个MySQL数据库中的记录 - 这是到目前为止我的代码....

//Includes db connect file 


// Display the student(s) within the html table 
     while($row = mysql_fetch_array($result)) 

{ 
echo "<tr><td align='centre' bgcolor='#693'><input name='checkbox[]' type='checkbox' id='checkbox[]' value=' $rows'Delete record?'>"; 
echo "<td> $row[studentid] </td> <td> $row[password] </td>"; 
echo "<td> $row[dob] </td><td> $row[firstname] </td>"; 
echo "<td> $row[lastname] </td><td> $row[house] </td>"; 
echo "<td> $row[town] </td><td> $row[county] </td>"; 
echo "<td> $row[country] </td><td> $row[postcode] </td>"; 
}echo "</table>"; 

echo "<tr><td colspan='11' align='center' bgcolor='#FFFFFF'><input name='delete' type='submit' id='delete' value='Delete selected student(s)'></td>"; 
echo "</tr>"; 

?> 

<?php 


if($_POST['delete']) // from button name="delete" 
{ 
    $checkbox = $_POST['checked']; 
    $countCheck = count($_POST['checked']); 

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

    $sql = "DELETE FROM student WHERE = $del_id"; 
    $result = mysql_query($sql); 
    } 
} 


?> 
+7

你得到什么错误? – 2011-05-11 16:39:54

+4

即使您的要求很紧急,您也不要过分强调这一点。这里的人大部分都是志愿者,所以这样的话题实际上让更多的人不愿意提供帮助。 – 2011-05-11 16:42:25

+3

您现在对SQL注入很开放。 – Brad 2011-05-11 16:42:39

回答

1
$sql = "DELETE FROM student WHERE id= %d"; 
$sql = sprintf($sql,(int)$del_id); 
$result = mysql_query($sql); 

现在应该工作,除非你有其他错误

+0

除非$ del_id没有设置为开头。这假定OP的正确设置他们的HTML表单并且指向正确的表单字段。 – 2011-05-11 16:43:02

+0

使用sprintf +1 – shevski 2011-05-11 16:44:08

2
$sql = "DELETE FROM student WHERE = $del_id"; 

WHERE <something> = $del_id,您错过了<something>,推测应该是id。因为你的代码目前不能清理输入/输出或防止SQL注入,所以你可能想研究“SQL Injection”,“Prepared Statements”和“Input Sanitization”。

1

几件事情需要注意:

  1. 你删除前应在输出之前。我这样说是因为即使删除成功,在删除实际触发之前它也会再次出现,给您留下一个“Ghost”条目。
  2. 确保在处理数据库时对来自用户的输入进行清理 - mysql_real_escape_string具有特定用途,尤其是在您未使用ADO时。或者,你可以使用类似$delete_id = (int)$checkbox[$i]的东西来确保它是一个整数值。
  3. 您的删除需要引用删除属于您的where子句中的哪一列。通常这是表格的主键。确保复选框的值更改为类似$row['id'](或任何键),然后再引用该列在您的DELETE FROM student WHERE <column> = <checkbox_value>)
0

LIVE DEMO

if(isset($_POST['delete'])) 
{ 
$check=$_POST['check']; 
$count=count($check); 
for($i=0;$i<$count;$i++){ 
$del_id = $check[$i]; 
$delete=mysql_query("delete from emp where id='$del_id'") or die(mysql_error()); 
} 
if($delete){ $msg2="Successfully Deleted!!";} 

}