1

我有一排这样的链接:

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);
?>

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

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

那么我应该使用PostvsGetFormvs<a>吗?

4

2 回答 2

1

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

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

隐藏不属于用户的评论的删除按钮很好,但您不应该依赖它来确保安全,因为任何人都可以发布表单并将评论 ID 设置为删除,无论您隐藏和显示什么这页纸。

于 2013-07-25T17:12:12.303 回答
1

您可以使用一个<a>元素并仍然 POST 数据。例如,使用 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. 始终验证。

于 2013-07-25T17:12:30.987 回答