我有一行这样的链接:
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来删除用户评论。
那么我应该使用Post
与Get
以及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
而信任它。始终验证。