2017-04-24 34 views
1

删除多个行我有以下代码,其工作在一定程度:PHP - 经由复选框

if(isset($_POST['remove'])) { 
    $user = $_POST['user']; 
    $passcode = $_POST['passcode']; 

    $sql = "SELECT * 
      FROM admin 
      WHERE username = '" . $user . "' 
      and passcode ='".md5($passcode)."'"; 

    $result = mysqli_query($conn,$sql); 
    $row = mysqli_fetch_array($result,MYSQLI_ASSOC); 
    $count = mysqli_num_rows($result); 
    if($count==0) { 
     echo "Invalid Credentials"; 
    } else { 

     include 'config.php'; 
     $cnt=array(); 
     $listCheck = "'" .implode("','", $_POST['checkbox']) . "'"; 
     $sql6 = "DELETE FROM `customer` WHERE `name` IN ($listCheck)"; 
     $delete = mysqli_query ($conn,$sql6); 
    } 

问题是,它只能删除选定的行1。如何修改代码以删除所有选定的行?

<input type="submit" name="remove" class="btn2" value="Delete Selected"> 
<div> 
<?php 
$query1 = "SELECT `name` FROM `customer` ORDER BY `name` ASC "; 
$result = mysqli_query($conn, $query1); 

echo "<table>"; 
while($row = mysqli_fetch_array($result)) 
{ 
echo "<tr>"; 
echo "<td>" . $row['name'] . "</td>"; 
echo "<td><input name='checkbox[]' type='checkbox' id='checkbox[]' value=" . $row['name'] . "></td>"; 
echo"</tr>"; 
} 
echo "</table>"; 
echo "<br>"; 
?> 
</div> 
+0

结果($ _ POST [ '复选框'])? – Peter

+0

检查循环循环的次数。 – mi6crazyheart

+1

向我们展示了HTML,特别是''

含有的复选框中的问题 – RiggsFolly

回答

3

您只需使用一个查询,删除所有记录,而不对环

include 'config.php'; 
$array = $_POST['checkbox']; 
$listCheck = "'" . implode("','", $array) . "'"; 
echo $sql6 = "DELETE FROM `customer` WHERE `name` IN ($listCheck)"; 
$delete = mysqli_query ($conn,$sql6); 

痛也有在此代码的问题。与您的代码替换下面的行

echo "<td><input name='checkbox[]' type='checkbox' id='checkbox[]' value='" . $row['name'] . "'></td>"; 
+0

你可以打印'$ sql6'吗? –

+0

您正在使用'LIKE'运算符而不是'IN'。你也可以var_dump($ _ POST ['checkbox'])' –

+0

你为什么使用'for循环'。我已经添加了删除循环的答案。请粘贴'$ _POST ['checkbox']' –

0

更好的去与​​,它可能并不总是数字即使这样,你不必为每一个可能的范围内,但只为每个选定的复选框的循环。

也有对SQL查询准备语句的样子,你不希望有可能的注射。

除了LIKE更好地被精确比较=所取代。

+1

“我的代码”将确实不删除任何东西,它只是提供了它遍历列表中的key和value ...然后你可以用它来删除您需要的东西;反正在这种情况下,阿甘的例子是整齐,解决了该请求,并应该由你投票和标记;)当然 – vv01f

+0

,你不会有'$ i'任何更多...你就必须'有关键和'$ $ k' v'作为列表的值;也许看看它们,例如用'print_r()'并以同样的方式发现'$ _POST'的结构,那么你可能会开始理解它。 – vv01f

0

试试下面的代码:

include 'config.php'; 
$array = $_POST['checkbox']; 
$listCheck = ""; 
foreach($array as $arr) { 
    $listCheck .= "'" . urldecode($arr) . "',"; 
} 
$listCheck = substr(trim($listCheck), 0, -1); 
echo $sql6 = "DELETE FROM `customer` WHERE `name` IN ($listCheck)"; 
$delete = mysqli_query ($conn,$sql6); 
+0

您的'$ row ['name']'是否包含全名? – gaganshera

+0

您的输入中有一个分号错误 – gaganshera

0

这件事,引起了我的眼睛

echo "<td><input name='checkbox[]' type='checkbox' id='checkbox[]' value" . $row['name'] . "></td>"; 

应该

echo '<td><input name="checkbox[]" type="checkbox" id="checkbox[]" value="'.$row['name'].'" ></td>'; 

的复选框的值缺少的var_dump的=

+0

好吧。 在这种情况下使用用户名可能会有风险。 如果更多的人出现同一个名字会发生什么? 对于这种类型的情况,始终使用一个ID。如果你的桌子没有一个。添加它。这将解决您的问题与空间名称以及 –

+0

很高兴听到它的解决。如果你使用ID的话,这可能很容易避免;-) –