ユーザーがjQueryuiボタンをクリックすると、特定の情報がデータベースに送信されるブックマーク機能に取り組んでいます。ただし、ユーザーが入力する情報がないため、フォームは使用していません。
セッションデータからユーザーのIDを取得し、URIセグメント(URLの一部)を送信しています
Codeigniter/phpを使用します。
フォーム/データが入力されていないため、ajax/post関数のデータ部分に何を入力するか、およびコントローラーの「送信」部分をどうするかを理解しようとしています。
コントローラー
function addBookmark(){
if ($this->input->post('submit')) {
$id = $this->session->userdata('id');
$bookmark = $this->uri->segment(3, 0);
$this->bookmarks_model->postBookmark($id, $bookmark);
}
}
モデル
function postBookmark() {
$data = array(
'user_id' => $user_id,
'bookmark_id' => $bookmark,
);
$this->db->insert('bookmarks', $data);
}
[〜#〜] html [〜#〜]
<button class="somebutton">Add bookmark</button>
jQuery
$('.somebutton').click(function() {
$.ajax({
url: 'controller/addBookmark',
type: 'POST',
data: ???,
success: function (result) {
alert("Your bookmark has been saved");
}
});
});
問題は、submit
引数でPOST
キーをチェックしていることです。 data: {submit:true}
を送信するか、ifステートメントを削除してPOSTリクエストを処理するだけで、偽造できます。
$('.somebutton').click(function() {
$.ajax({
url: 'controller/addBookmark',
type: 'POST',
data: {'submit':true}, // An object with the key 'submit' and value 'true;
success: function (result) {
alert("Your bookmark has been saved");
}
});
});
jQuery.ajax() のドキュメントから
サーバーに送信されるデータ。まだ文字列でない場合は、クエリ文字列に変換されます。 GETリクエストのURLに追加されます。
データに何を入れるべきかわからない場合は、おそらくそのオプションを削除する必要がありますか?コントローラ関数addBookmark()で、ifチェックを削除することでコードを減らすことができます。これを試して、それがあなたのために働くかどうか確かめてください。