删除后端带有<;a href></a>;在前端


Delete DB row on back end with <a href></a> on front end

我有一行这样的链接:

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>方法似乎也是一个安全问题。然后任何人都可以通过更改url来删除用户评论。

那么我应该使用PostGet以及Form<a>吗?

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

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

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

您可以使用<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而信任它。始终验证。