プロが教えるわが家の防犯対策術!

jQuery UIのsortableを利用し、HTMLで作成したテーブルをtr単位で
ソートできるプログラムを作成しました。
ソート後の並びをDBに保存する為に、各TRにdata-idの属性を設定の上、
sortableのイベントメソッドから、データをサーバへ送るプログラムを書きましたがうまく動きません。
というより、、、サーバサイド側は、PHPでデータを取得しているのですが、
うまく処理する方法がわかりません。。。どうやったら、値を取得できるでしょうか。
下記にサンプルコードとサーバサイド側での取得データを記載しています。
取得したいデータは、サンプルデータ内の1、3、2です。

ユーザインタフェース側
-----------------------------------------------------
$('#src').sortable({
items: 'tr',
axis: 'y',
opacity: 0.2,
handle: '.drag',
placeholder: 'ui-state-highlight',
update: function() {
$.post('serverside.php', {
file: $(this).sortable('serialize'),
});
}

});
-----------------------------------------------------


serverside.php
-----------------------------------------------------
$res = $_POST['file'];
-----------------------------------------------------
$resの中身を見たら、

file[]=1&file[]=3&file[]=2

が入ってました。
それぞれの値をどうやって取り出したらよいのでしょうか。。。

A 回答 (1件)

sortableを使うときのコードは結構使い回しができるので、パターンさえ覚えて作ってしまえば、流用が可能です。




まず、PHPで受け取れているのであれば、そのデータを配列に変換してやる必要があります。

parse_str($_POST['file']);

としてやれば、Query Stringのような文字が$fileという変数に配列変換されて入ると思います。

これで並び替えされたID順に配列が設定されると思うので、あとはこの順でDBに設定してやるだけです。

foreach ($file as $key => $val) {
$sql = "update テーブル名 set orderby = :orderby where id = :id";
$stmt = $db->prepare($sql);
$stmt->bindValue(':orderby', $key);
$stmt->bindValue(':id', $val);
$stmt->execute();
}

上はPDOで書いていますが、mysql_query()等を使っても考え方は同じです。

foreach ($file as $key => $val) {
$sql = sprintf("update テーブル名 set orderby = '%d' where id = '%d'", mysql_real_escape_string($key), mysql_real_escape_string($val));
$result = mysql_query($sql);
}

これで並び替えされた順に、orderbyフィールドに「0、1、2、・・・」と順番に数字が入っていきます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!