我有一排这样的链接:
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 Get
和Form
vs <a>
吗?
答案 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
。始终验证。