2011-01-18 7 views
2

私はGet vs Postに関する別のStackoverflow投稿に出くわしました。 CIでは、私のレコードを削除するためのURLはhttp://domain.com/item/delete/100で、私のDBからレコードID 100を削除します。 record_idは$this->uri->segmentを介して取得されます。私のモデルでは、ユーザーが実際にそのレコードの所有者であることを確認するwhere句があります。 user_idは、DB内のセッションに格納されます。それで十分ですか?Codeigniterでレコードを削除する適切な方法

私の理解では、POSTはデータの一回の変更に使用し、GETはアイテムの取得(アイテムやパーマリンクの表示など)のためのものです。

答えて

4

本当にあなたは削除の際に投稿リクエストを要求する必要があります。 CodeIgniterでは、これは$ this-> input-> post( 'confirm')をチェックするのと同じくらい簡単です。

ゲットリクエストでデータを変更したくないということです。あなたはその人がオーナーであることを要求していると言っているので、ある人がソースがhttp://domain.com/item/delete/100であるというイメージが残っているという問題が残っています。投稿を使用することは、javascriptから投稿要求を行うことができるあなたが適切に入力をフィルタリングしていない場合、悪意のあるユーザーが削除要求を作成する可能性があります。

私は純粋主義者であり、ポストには正しい方法が必要だと感じることは認められます。標準がどのように書かれているか(大丈夫ですが、DELETE要求ではあるがブラウザは通常それらをサポートしていないと主張できます)、他の場合は本当に使用する必要があります(Webクローラーがページを削除するケースがあります)。

削除リンクをhttp://domain.com/item/delete/100にしたい場合は、削除を確認するポストアクションを行う確認メッセージを表示することができます。私はこれが役に立てば幸い

、 ビル

+0

いや、私はPOSTリクエスト経由でレコードを削除するに取り掛かる方法がわかりませんでした。どのような例を表示することができますか?私はこれがモデルのどこかにあるはずだと思います。私のコントローラでは、URIとセッションIDをモデルに渡します。モデルはこれらの2つの値をチェックし、一致するかどうかを削除します。 – luckytaxi

+0

$ _POST ['post_id']、$ _POST ['user_id'](隠しフィールドから)を使って "item/delete"にフォームを送信することができます。あなたの "item"コントローラの "delete"機能は "$ this-> input-> post( 'post_id')と - > post( 'user_id')を引っ張って権限を確認し、レコードを削除します。 – kevtrout

+0

ユーザーがリンクを介してレコードを削除できる場合は、$ _POST変数に "$ this-> uri-> segment"を渡しますか? – luckytaxi

関連する問題