【发布时间】:2020-01-07 11:59:05
【问题描述】:
如何使用复选框和 PDO 准备语句删除多行?
使用给定的代码,我只能从已检查的行中删除最后一行,但不能全部删除。我认为我在 Main.php 中有错误,具体是在准备好的语句中。
我该如何解决这个问题?
Main.php
// DELETE DATA with PDO
public function delete($id){
$sql = "DELETE FROM $this->table WHERE id IN (:id)";
$stmt = DB::prepare($sql);
$stmt->bindParam(':id', $id);
return $stmt->execute();
}
index.php
// DELETE DATA
if(isset($_POST['delete'])) {
$id = $_POST['id'];
if ($user->delete($id)){
echo "Data Deleted Successfully.. </br>";
}
}
index.php 中的 form
<form method="POST">
<div class="row">
<?php if ($user->readAll() > 0) : ?>
<?php foreach ($user->readAll() as $value) : ?>
<div class="col-md-3 ajax-del"> <!--Delete div with AJAX-->
<div class="card border-secondary mb-4">
<a href="#"><img src="<?= $value['image'] ?>" alt="<?= $value['name']?>" class="card-img-top img-fluid"></a>
<div class="card-body bg-light text-center">
<input type="checkbox" class="float-left" value="<?php echo $value['id']?>" name="id"></<input>
<p class="card-text mt-3"><?=$value['barcode'] ?></p>
<h5 class="card-title text-danger font-weight-bold"><?= $value['name']?></h5>
<p class="card-text">$<?= number_format($value['price'], 2)?></p>
<p class="card-text"><?=$value['weight']?></p>
<p class="card-text"><?=$value['size']?></p>
<p class="card-text mb-4"><?=$value['height']?> <?=$value['width'] ?><?=$value['length']?></p>
</div>
</div>
</div>
<?php endforeach ?>
<?php endif ?>
</div>
<input type="submit" class="btn btn-danger float-right mr-3" id="delete" name="delete" onclick="return confirm('Are you sure?')"></input>
</form>
【问题讨论】:
-
这个函数只需要一个ID,所以它看起来不能删除多行,除非你多次调用它。我猜
$_POST['id']是复选框值?它是数组还是单个值?如果该函数完全有效,我假设它是一个值,但也许它不应该是。你的表单是什么样子的? -
我已经在我的答案中更新并粘贴了
form代码。
标签: php mysql pdo prepared-statement