表单操作不允许删除记录

时间:2016-04-07 14:59:49

标签: php mysql

我必须添加一个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
 });

});

2 个答案:

答案 0 :(得分:1)

这不是很理想,但有一种方法可以做到。您更改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();
}
?>

我省略了保存案例,但它与编辑案例类似。

答案 1 :(得分:0)

您可以只使用链接而不是表单提交按钮,而不是拥有表单。这样,每个链接都可以将您带到执行特定任务的特定页面。通过传递查询字符串变量并使用$ _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>

然后,这些单独的页面可以在数据库中执行您的任务。保存和删除都可以使用标题重定向来返回包含产品列表的原始页面。

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会使整个过程看起来是无缝的,而不是在页面之间跳转并被重定向。