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 を変更してユーザー コメントを削除できます。

Postでは、 vsGetFormvsを使用する必要があり<a>ますか?

4

2 に答える 2

1

メソッドでフォームを使用するとpost、削除アクションに適しているようです。ID と送信ボタンを含む非表示の入力を含む、行ごとに個別のフォームがあります。単一のフォームは機能しますが、各ボタンがクリックされたときに ID を設定するには、Javascript が必要です。

フォームはリンクほど安全ではありません。どちらの方法でも安全にするには、現在のユーザーが対象のレビューを削除する権限を持っていることを確認する必要があります。たとえば、彼がレビューを所有していることを確認します。これは、削除コードが実行される直前に行う必要があります。

ユーザーに属していないレビューの削除ボタンを非表示にすることは問題ありませんが、セキュリティのために信頼するべきではありません。なぜなら、誰でもフォームを投稿し、レビュー 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 に答える