我必须添加一个form
操作才能转到另一个页面来编辑特定的记录,但这样做不会允许我删除记录,因为它会在执行query
之前将我从记录中带走。当我点击"编辑"按钮时,我不确定如何做到这一点,并且仍然可以进入新页面。
<table id="tableid">
<thead>
<tr>
<th>ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Product</th>
<th>Save</th>
<th>Delete</th>
<th></th>
</tr>
</thead>
<tbody>
<?php
$stmt = $dbc->query("SELECT `id`,`first`,`last`,`product` FROM users");
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while($row = $stmt->fetch()) {
?>
<form method="POST" action="edit-product">
<tr>
<td><?php echo $row['id'];?>"</td>
<td><?php echo $row['first'];?></td>
<td><?php echo $row['last'];?></td>
<td><?php echo $row['product'];?></td>
<input name="id" type="hidden" value="<?php echo $row['id'];?>" readonly>
<input name="first" type="hidden" value="<?php echo $row['first'];?>">
<input name="last" type="hidden" value="<?php echo $row['last'];?>">
<input name="product" type="hidden" value="<?php echo $row['product'];?>">
<td><input name="save" type="submit" value="Save"></td>
<td><div class="delete-class" name="delete" id="<?php echo $row['id']; ?>">Delete</div></td>
<td><input name="edit" type="submit" value="Edit"></td>
</tr>
</form>
<?php } ?>
</tbody>
</table>
PHP DELETE
query
if(isset($_POST['delete'])) {
$id = $_POST['id'];
$stmt = $dbc->prepare("DELETE FROM users WHERE id = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
}
如何更改标记,以便仍然可以编辑(带操作转到另一个页面)和删除该页面?
更新AJAX代码:
$(function() {
$(".delete_class").click(function(){
var del_id = $(this).attr('id');
$.ajax({
type:'POST',
url:'delete-product.php',
data:'delete_id='+del_id,
success:function(data) {
if(data) { // DO SOMETHING
} else { // DO SOMETHING }
}
)); //here
});
});
这不是很理想,但却是一种方法。您可以更改HTML标记以创建两个表单,一个用于编辑大小写,另一个用于删除。删除案例将请求发送到当前页面,如下所示:
while($row = $stmt->fetch()) {
?>
<tr>
<td><?php echo $row['id'];?></td>
<td><?php echo $row['first'];?></td>
<td><?php echo $row['last'];?></td>
<td><?php echo $row['product'];?></td>
<td>
<form method="post" action="edit-product">
<input name="id" type="hidden" value="<?php echo $row['id'];?>">
<input name="first" type="hidden" value="<?php echo $row['first'];?>">
<input name="last" type="hidden" value="<?php echo $row['last'];?>">
<input name="product" type="hidden" value="<?php echo $row['product'];?>">
<input name="save" type="submit" value="Edit">
</form>
</td>
<td>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input name="id" type="hidden" value="<?php echo $row['id'];?>">
<input name="delete" type="submit" value="Delete">
</form>
</td>
</tr>
<?php }
?>
</tbody>
</table>
<?php
// the delete code goes here
if(isset($_POST['delete'])) {
$id = $_POST['id'];
$stmt = $dbc->prepare("DELETE FROM users WHERE id = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
}
?>
我省略了保存案例,但它将类似于编辑案例。
与其有一个表单,不如只有链接而不是表单提交按钮。这样,每个链接都可以将您带到执行特定任务的特定页面。通过传递查询字符串变量并使用$_GET而不是$_POST,可以保留产品ID信息。
示例:
<td><a href="save_product.php?id=<?php echo $row['id'];?>">Save</a></td>
<td><a href="delete_product.php?id=<?php echo $row['id'];?>">Delete</a></td>
<td><a href="edit_product.php?id=<?php echo $row['id'];?>">Edit</a></td>
然后,这些单独的页面可以在数据库中执行您的任务。保存和删除都可以使用Header重定向返回到带有产品列表的原始页面。
delete_product.php示例:
// delete product from database
$id = $_GET['id']; // Note that it's a $_GET
$stmt = $dbc->prepare("DELETE FROM users WHERE id = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
// re-direct to original list page
header("Location: product_list.php"); // or whatever you have your list page named.
然后,edit_product.php页面将具有对特定产品进行更改的典型表单。您将需要使用$_GET['id']值在数据库中再次查找产品以匹配它。
正如评论中所建议的那样,使用AJAX将使整个过程看起来无缝,而不是在页面之间跳转并重新定向。