web-dev-qa-db-ja.com

jqueryボタンをクリック+フォームなしでデータを送信-ブックマーク

ユーザーが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");
                }
            });  

    });
9
chowwy

問題は、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");
            }
        });  

});
8
Brombomb

jQuery.ajax() のドキュメントから

サーバーに送信されるデータ。まだ文字列でない場合は、クエリ文字列に変換されます。 GETリクエストのURLに追加されます。

データに何を入れるべきかわからない場合は、おそらくそのオプションを削除する必要がありますか?コントローラ関数addBookmark()で、ifチェックを削除することでコードを減らすことができます。これを試して、それがあなたのために働くかどうか確かめてください。

0
Jasonw

.ajax()を使用する代わりに、 .get() または .post() のいずれかを使用します

.get()の使用

_ $.get('controller/addBookmark',function(data){ 
     alert('Your bookmark has been saved'); 
 });
_

.post()の使用

_ $.post('controller/addBookmark', function(data) {
     alert('Your bookmark has been saved, The contents of the page were:' + data); 
 });
_
0
Control Freak