2013-03-24 133 views
0

我想用chekboxes删除多行。以下是我的代码PHP用多个复选框删除SQL行

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

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

$result = mysql_query("SELECT * FROM members WHERE dealer='Panzer Protection'"); 
?> 
<form name="form1" method="post" action=""> 
     <?php 
while($rows=mysql_fetch_array($result)){ 
?> 
     <tr> 
     <td bgcolor="#666666"><input name="checkbox[]" type="checkbox" id="checkbox[]"  
value="<? echo $rows['member_id']; ?>"></td> 
     <td bgcolor="#666666"><? echo $rows['member_id']; ?></td> 
     <td bgcolor="#666666"><center> 
      <? echo $rows['member_msisdn']; ?></td> 
     <td bgcolor="#666666"><center> 
      <? echo $rows['member_name']; ?></td> 
     <td bgcolor="#666666"><div align="center"><? echo $rows['dealer']; ?></div> 

</td> 
     <td align="center" bgcolor="#FFFFFF"><a href="control_clientinfo.php?member_id= 
<? echo $rows['member_id']; ?>" class="update">Look Up</a></td> 
     </tr> 
     <?php 
} 
?> 

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

</form> //Forgot form close in past 
<?php 

// Check if delete button active, start this 
if($_POST['delete']){ 
for($i=0;$i<$count;$i++){ 
$i = 0; 
while(list($key, $val) = each($_POST['checkbox'])) { 
$sql = "DELETE FROM $tbl_name WHERE id='$val'"; 
mysql_query($sql); 
$i += mysql_affected_rows(); 
} 
} 
// if successful redirect to 
if($result){ 
echo "<meta http-equiv=\"refresh\" content=\"0;URL=control_clientlistdel.php\">"; 
} 
} 
mysql_close(); 
?> 

它向我显示了我打电话的列表,并且我可以在框中打勾。如果我点击删除按钮,它只是刷新屏幕和一个我打勾仍然存在

+2

您的DELETE查询很容易发生SQL注入。恰当地逃避用户内容,或者更好地了解参数化查询。请注意,不建议使用mysql_ *'函数(请参阅[red box](http://php.net/mysql_query))。将数据库字段输出到HTML标记时使用'htmlspecialchars'来防止XSS。而'bgcolor'和'align'属性已被弃用。还有'中心'元素。 – 2013-03-24 13:57:18

+0

你的表单关闭了吗? – itsols 2013-03-24 14:03:02

+1

另外,要捕获被点击的按钮,你应该使用类似$ _POST [“delete”]的东西。不要只使用$ delete。这曾经是旧的PHP 4及更早版本的方法,但不再接受。此外,您应该在打印结果之前检查删除。否则,它将打印记录,然后删除。是没有意义的 – itsols 2013-03-24 14:04:43

回答

2

第一件事。 使用mysql是个坏主意,因为它确实很旧,并且已被弃用。

其次,当你分配你的变量($delete$count

你必须检查,如果你POSTdelete键设置:

if (isset($_POST['delete'])) { // Then the form has been submitted 
在此之后

,分配您$count变量

$checkbox = $_POST['checkbox']; 
$count = count($checkbox); 

而且一切都必须正常工作。

最终结果

if (isset($_POST['delete'])) { 
    $checkbox = $_POST['checkbox']; 
    $count = count($checkbox); 

    for($i = 0; $i < $count; $i++) { 
     $id = (int) $checkbox[$i]; // Parse your value to integer 

     if ($id > 0) { // and check if it's bigger then 0 
      mysql_query("DELETE FROM table WHERE member_id = $id"); 
     } 
    } 
} 

退房的mysqliPDO驱动程序与数据库交互。

+0

@ Mirmko Akkov你的方法工作我刚刚在$ sql =“DELETE FROM $ tbl_name WHERE member_id ='$ val'”中有一个错字: hust有id而不是member_id – 2013-03-24 14:26:50

+0

而不是执行查询删除一条记录,运行1条删除所有所需记录的查询会快得多。请参阅[我的答案](http://stackoverflow.com/questions/15599303/php-to-delete-sql-row-with-multiple-checkboxes/20175242#20175242)。 – 2013-11-24 13:50:02

0

不知道,如果它是一个错字或不..但你你有一个失踪from结束标记,并在发布代码<table> ..

.... 
<td colspan="6" align="center" bgcolor="#FFFFFF"> 
<input name="delete" type="submit" id="delete" value="Delete"></td> 
</tr> 
</form> //here 

,你需要在如果condition..the正确的方法是,因为你正在使用的方法POS ..这里method="post"使用$_POST检查贴$delete值。

更新

if(isset($_POST) && $_POST['delete']){ //here 
    $count=count($_POST['checkbox']); 
    for($i=0;$i<$count;$i++){ 
     $sql = "DELETE FROM $tbl_name WHERE id='".$_POST['checkbox'][$i]."'"; 
     mysql_query($sql); 

    } 
} 

可以使用header()在PHP重定向第一

header('Location: http://www.yoursite.com/ontrol_clientlistdel.php') ; 
+0

注意:未定义指数: 如果($ _ POST [ '删除']){ 是的,我忘了粘贴 – 2013-03-24 14:11:42

+0

@TrevorAckermann时:使用'如果(isset($ _ POST [ '删除'])) '来测试POST数组中是否存在'delete'。 – 2013-03-24 14:12:49

+0

现在您只检查是否存在'$ _POST',而不检查'delete'索引是否存在。 – 2013-03-24 14:15:33