【问题标题】:Deleting a selected record in an HTML form with a checkbox使用复选框删除 HTML 表单中的选定记录
【发布时间】:2015-04-24 09:59:56
【问题描述】:

我有一个 HTML 表单,其中包含一些记录。应通过选择一个或所有记录对应的复选框来删除记录。

当我选中一条记录的复选框并单击删除时,查询运行成功,但记录没有删除。

这是 PHP 代码:

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

    array_map ('mysql_real_escape_string', $allCheckBoxId);
    $ids = implode(",", $allCheckBoxId);

    $object=new connection();
    $object=$object->dbConnect();


    $st=$object->prepare(
        "delete * from banners where bannerid IN (?)");

    $st->bindParam(1, $ids);
    $delete=$st;
    $delete->execute();
    if($delete)
    {
        echo "record deleted successfully." . 
             "This will go to banners within 5 sec";

    }
    else
    {
        echo "not deleted";

    }
}

和HTML表单:

<form name="myform" action="listbanners.php" method="post" OnSubmit="return onDelete();" id="frm1">
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <th width="13"><input type="checkbox" class="checkbox" title="select all" onclick="checkAll(document.myform.chkDel);" name="CheckAll" /></th>
        <th width="13">ID</th>
        <th>Name</th>
        <th><input type="submit" name="delete" value"Delete"></th>
    </tr>
    <?php
        $object=new connection();
        $object=$object->dbConnect();
        $st=$object->prepare("select * from banners order by bannerid desc");
        $st->execute();
        while($row=$st->fetch(PDO::FETCH_ASSOC))
        {
    ?>

    <tr>
        <td><input name="chkDel[]" type="checkbox" title="select" class="checkbox" value="<?php echo $row['bannerid'];?>"/></td>
        <td><?php echo $row['bannerid'];?></td>
        <td><h3 onClick="location='editbanner.php?bannerid=<?php echo $row['bannerid'];?>'"><?php echo $row['file'];?></h3></td> 
        <td><input type="submit" name="delete" value="delete"/></td>
    </tr>
</form>

【问题讨论】:

  • 回显您正在生成的 SQL;直接在数据库中运行它是否有效?
  • 我正在使用 PDO 方式与 mysql db 进行通信。如何在 PhpMyAdmin 中运行该查询?
  • 复制查询并将其粘贴到 phpmyadmin(选项卡“SQL”)中。

标签: php html database


【解决方案1】:
$st=$object->prepare("delete * from banners where bannerid IN (?)");
$st->bindParam(1, $ids);

您正在尝试将单个参数绑定到值数组。您需要将每个值作为单独的参数传入;例如:

$st=$object->prepare("delete * from banners where bannerid IN (?,?,?)");

您需要为要包含在 IN 子句中的每个值包含一个占位符。您可以根据$ids 中的项目数动态生成 SQL。

我错过了'DELETE *',这是无效的语法;但我把它留在原地,因为我注意到的一点是有效的。这是一个不完整的答案,不是错误的。

【讨论】:

  • 如果我做 $st->bindParam(1,$ids);$st->bindParam(2,$ids);$st->bindParam(3,$ids);方法对吗?
  • 对不起各位!这太容易了。我解决了小查询问题。问题出在“删除*”中,现在我删除了“*”,现在它正在工作。
  • 我绝对应该注意到这一点。您应该将其添加为答案。
  • 我试图回答,因为我是这个网站的新手,所以不需要为回答自我问题而赢得声誉。
猜你喜欢
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 2014-06-20
相关资源
最近更新 更多