【问题标题】:Delete multiple rows by selecting checkboxes using PHP通过使用 PHP 选择复选框来删除多行
【发布时间】:2013-01-06 15:49:57
【问题描述】:

我想从 MYSQL 数据库中删除多行。我创建了这个 delete.php 文件来选择各种链接并使用复选框删除它们。

<html>
<head>

<title>Links Page</title>

</head>

<body>

<h2>Choose and delete selected links.</h2>

<?php

$dbc = mysqli_connect('localhost','root','admin','sample')
or die('Error connecting to MySQL server');

$query = "select * from links ORDER BY link_id";

$result = mysqli_query($dbc,$query)
or die('Error querying database');

$count=mysqli_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="3" bgcolor="#FFFFFF"><strong>Delete multiple links</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">#</td>
<td align="center" bgcolor="#FFFFFF"><strong>Link ID</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Link Name</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Link URL</strong></td>
</tr>

<?php

while ($row=mysqli_fetch_array($result)) {
?>

<tr>
<td align="center" bgcolor="#FFFFFF"><input name="checkbox" type="checkbox" value="<?php echo $row['link_id']; ?>"></td>
<td bgcolor="#FFFFFF"><?php echo $row['link_id']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $row['link_name']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $row['link_url']; ?></td>
</tr>

<?php
}
?>

<tr>
<td colspan="4" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" value="Delete"></td>
</tr>
<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="3" bgcolor="#FFFFFF"><strong>Delete multiple links</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">#</td>
<td align="center" bgcolor="#FFFFFF"><strong>Link ID</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Link Name</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Link URL</strong></td>
 </tr>

<?php

while ($row=mysqli_fetch_array($result)) {
?>

<tr>
<td align="center" bgcolor="#FFFFFF"><input name="checkbox" type="checkbox" value="<?php echo $row['link_id']; ?>"></td>
<td bgcolor="#FFFFFF"><?php echo $row['link_id']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $row['link_name']; ?></td>
<td bgcolor="#FFFFFF"><?php echo $row['link_url']; ?></td>
</tr>

<?php
}
?>

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



<?php

// Check if delete button active, start this 

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

for($i=0;$i<count($checkbox);$i++){

$del_id = $checkbox[$i];
$sql = "DELETE FROM links WHERE link_id='$del_id'";
$result = mysqli_query($sql);
}
// if successful redirect to delete_multiple.php 
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=view_links.php\">";
}
 }

mysqli_close($dbc);

?>

</table>
</form>
</td>
</tr>
</table>

</body>

</html>

这似乎没有删除任何行。我的数据填充在表中。我想问题出在PHP代码上。请帮帮我。

【问题讨论】:

  • 我对 PHP 编程完全陌生。你能告诉我任何免费的调试 PHP 工具吗?
  • 开启错误报告并学习阅读消息。
  • 还可以尝试将最后的 PHP 部分 (isset($_POST['delete'])) 移到 HTML 标记之前,以确保在提交页面时不会重置任何数据。使用表单标签也可能会有所帮助:&lt;form method="post" action="&lt;?php echo $_SERVER['PHP_SELF']; ?&gt;" name="deleteForm"&gt;
  • &lt;?php error_reporting(E_ALL); ?&gt;添加到页面的最开始以启用所有调试信息。
  • 谢谢大家!这是我的一个小错误。我有“$result = mysqli_query($sql);”...检查了错误日志...发现 mysqli_query() 至少需要两个参数...我很傻 :)

标签: php html mysql checkbox isset


【解决方案1】:

你应该像这样把它当作一个数组,

<input name="checkbox[]" type="checkbox" value="<?php echo $row['link_id']; ?>">

只有这样,您才能对其计数并循环删除。

您还需要将数据库连接传递给查询。

$result = mysqli_query($dbc, $sql);

你的不包括它:

$result = mysqli_query($sql);

【讨论】:

  • 将其从 name="checkbox" 更改为 name="checkbox[]"....仍然,它没有删除任何数据
  • 为您的删除查询放置回显,以查看数据 $del_id 是否完美。如果 $del_id 值完美,请在您的 mysql 编辑器中运行查询。你会知道数据库端是否有任何错误
  • @spyder 在 Edwin 发布他的答案后它没有被删除的原因是,您从未将数据库连接传递给 $result = mysqli_query($sql);。应该读为$result = mysqli_query($dbc, $sql);。 @ Edwin:我做了编辑。
【解决方案2】:

input 元素中使用像 name="checkbox[]" 这样的数组表示法。这将为您提供$_POST['checkbox'] 作为数组。在查询中,您可以将其用作

$sql = "DELETE FROM links WHERE link_id in ";
$sql.= "('".implode("','",array_values($_POST['checkbox']))."')";

这是将它们全部删除的一个查询。

注意:您需要使用mysql_real_escape_string 或类似的方式转义$_POST['checkbox'] 中传递的值,以防止SQL Injection

【讨论】:

    【解决方案3】:
    <?php $sql = "SELECT * FROM guest_book";
                                $res = mysql_query($sql);
                                if (mysql_num_rows($res)) {
                                $query = mysql_query("SELECT * FROM guest_book ORDER BY id");
                                $i=1;
                                while($row = mysql_fetch_assoc($query)){
                                ?>
    
    
    <input type="checkbox" name="checkboxstatus[<?php echo $i; ?>]" value="<?php echo $row['id']; ?>"  />
    
    <?php $i++; }} ?>
    
    
    <input type="submit" value="Delete" name="Delete" />
    
    if($_REQUEST['Delete'] != '')
    {
        if(!empty($_REQUEST['checkboxstatus'])) {
            $checked_values = $_REQUEST['checkboxstatus'];
            foreach($checked_values as $val) {
                $sqldel = "DELETE from guest_book WHERE id = '$val'";
               mysql_query($sqldel);
    
            }
        }
    } 
    

    【讨论】:

      【解决方案4】:

      使用 PHP 代码删除多个复选框

      <input type="checkbox" name="chkbox[]  value=".$row[0]."/>
      <input type="submit" name="delete" value="delete"/>
      <?php
      if(isset($_POST['delete']))
      {
       $cnt=array();
       $cnt=count($_POST['chkbox']);
       for($i=0;$i<$cnt;$i++)
        {
           $del_id=$_POST['chkbox'][$i];
           $query="delete from $tablename where Id=".$del_id;
           mysql_query($query);
        }
      }
      

      【讨论】:

        【解决方案5】:

        有时你可能会/可能不知道的事情

        在使用 IE 时不会总是被 $_POST['delete'] 获取。 Firefox 和 chrome 应该可以正常工作。我使用单独的 istead 来解决 IE 的问题

        至于您没有在上面的代码中删除,您似乎是在回显 2x 组复选框,它们都提取相同的数据?这只是复制 + 粘贴错误,还是您的代码实际上是这样的?

        如果你的代码是这样的,那将是问题,因为用户可能会勾选一个复选框数组项,但另一个将未选中,因此删除的 php 代码会变得混乱。重命名第二个复选框或删除该 html 块确定您不需要显示相同的列表两次?

        【讨论】:

        • 我希望表单将 id 显示为单独的列...另外,我需要复选框链接到主键,这又是 link_id 列..因此,两者的数据相同列
        • 我删除了一个数据集/列:)
        【解决方案6】:
         $deleted = $_POST['checkbox'];
         $sql = "DELETE FROM $tbl_name WHERE id IN (".implode(",", $deleted ) . ")";
        

        【讨论】:

          猜你喜欢
          • 2019-01-18
          • 2014-02-16
          • 1970-01-01
          • 2012-04-26
          • 1970-01-01
          • 2018-02-03
          • 2015-01-28
          • 1970-01-01
          • 2021-08-24
          相关资源
          最近更新 更多