删除后端的DB行,前端为<a href=""></a>

时间:2013-07-25 16:49:36

标签: php html

我有一排这样的链接:

Delete | Votes (2) | Comments (1)

它们每个都与用户帖子相关联。

我的问题是Delete

我想让用户做的就是点击它,然后这需要在php端进行:

<?php
    $reviewId = $database -> escape_value(trim($_POST['reviewId']));
    $user_id = $database -> escape_value(trim($_POST['user_id']));
    // Delete Review Method    
    $result = Data::deleteMyReview($reviewId);
?>

我的问题是,为Delete编写代码的最有效方法是什么?

我真的不想要那个单词的整个表单。但是,继续使用<a href="thispage.php?reviewId=1&userId=1">Delete</a>方法似乎也是一个安全问题。然后任何人都可以通过更改网址来删除用户评论。

我应该使用Post vs GetForm vs <a>吗?

2 个答案:

答案 0 :(得分:1)

使用带有post方法的表单似乎更适合删除操作。我会为每一行创建一个单独的表单,其中包含一个带ID的隐藏输入和一个提交按钮。单个表单可以工作,但是在单击每个按钮时,您必须使用一些Javascript来设置ID。

表单不比链接更安全。要使两种方式都安全,您需要验证当前用户是否有权删除目标审阅。例如,检查他是否拥有该评论。这应该在删除代码执行之前完成。

可以隐藏不属于用户的评论的删除按钮,但是您不应该依赖它来获取安全性,因为任何人都可以发布表单并将评论ID设置为删除,无论您隐藏什么并在页面上显示。

答案 1 :(得分:1)

您可以使用<a>元素并仍然发布数据。例如,使用jQuery执行AJAX帖子:

HTML:

<a href="#" class="delete-review" data-review-id="123" data-user-id="123">Delete</a>

jQuery的:

$(document).ready(function(){
    $('.delete-review').click(function(){
        $.ajax({
            type: "POST",
            url: "thispage.php",
            data: { reviewId: $(this).data('review-id'), userId: $(this).data('user-id') },
            success: function(data) {
                //Do whatever you want to do when the delete succeeds such as redirect to another page
            },
            error: function(jqXHR,textStatus,errorThrown) {
                //Handle your error here
            }
        });
        return false;
    });
});

正如我的评论中所述,出于安全考虑,您肯定需要在执行删除之前验证数据。不要相信它只是因为删除选项只应由有效用户看到并且您正在使用POST。始终验证。