0

ソート可能な行を持つテーブルがあります。テーブルは、テーブルを変更する「displayorder」というフィールドを持つmysqlデータベースから生成されます。ユーザーが行をドラッグアンドドロップするとき、ユーザーが行をドロップするたびにAJAXを使用してそれらの変更をデータベースに送信したいと思います。

現在、AJAX呼び出しの成功部分からのconsole.log()出力を見ることができ、そこにデータを出力すると(順序)、次のようになります。 ["order_1=1", "order_2=2", "order_4=3", "order_3=4"]

しかし、Firebugによると、$_POSTで渡されるものはすべて「宣言されていない」ものです。indexpage_order.phpファイルからその注文変数にアクセスするにはどうすればよいですか?

私はこのjqueryコードを持っています:

    <script>
    $(document).ready(function() {
        var fixHelper = function(e, tr) {
            var $originals = tr.children();
            var $helper = tr.clone();
            $helper.children().each(function(index)
            {
              $(this).width($originals.eq(index).width())
            });
            return $helper;
        };
        var sortable = $("#sort tbody").sortable({
        helper: fixHelper,
        stop: function(event, ui) {
            //create an array with the new order
            order = $(this).find('input').map(function(index, obj) {
                var input = $(obj);
                input.val(index + 1);
                return input.attr('id') + '=' + (index + 1);
            });
            $.ajax({
                    type: 'POST',
                    url: 'indexpage_order.php',
                    data: order,
                error: function() {
                    console.log("Theres an error with AJAX");
                },
                success: function(order) {
                    console.log("Saved.");
                    console.log(order);
                }
            });
            return false;
        }
        });
    });
    </script>

indexpage_order.phpに含まれるもの:

if(isset($_POST) ) {

    while ( list($key, $value) = each($_POST) ) {
        $id = trim($key,'order_'); //trim off order_
        $sqlCommand = 
            "UPDATE indexpage 
             SET displayorder = '".$value."' 
             WHERE id = '".$id."'";
        $query = mysqli_query($myConnection,$sqlCommand) or die (mysqli_error($myConnection));
        $row = mysqli_fetch_array($query);
    }
}
4

5 に答える 5

1

POST用のデータを生成しているjsコードを簡単に書き直すことができます。

order = {}
$(this).find('input').map(function(index, obj)
  { 
    return order[this.id] = index;
  }
)

残りはPHPで動作するはずです。

于 2012-09-27T16:08:40.890 に答える
0

ajaxを使用したPOSTメソッドのPHPファイルで$_POSTの代わりに$_REQUESTを試してください。

于 2012-09-27T15:49:57.947 に答える
0

JavaScript配列で注文を送信しているようです

そしてそれがあなたのPHPに到着したとき、それは読めません。

オブジェクトがjson_decode関数を調べている場合。配列の場合は、データをシリアル化してから、php側でシリアル化を解除します。

PHPは、JavaScriptの配列またはオブジェクトが正しくエンコード/シリアル化されていない限り、それらを理解できません。

于 2012-09-27T16:01:13.307 に答える
0

ajaxデータはを使用してjsonにある必要があるため、js配列orderをjsonオブジェクトに変換しJSON.stringifyます。data:JSON.stringify(order),したがって、 ajax関数に含める必要があります。

または、ajax関数でjson_encodeこのように使用しますdata: <?php echo json_encode(order); ?>,

于 2012-09-27T16:03:38.517 に答える
0

orderは配列です。ajaxスクリプトでこのように変換orderします。query string

data: order.join('&'),

于 2012-09-27T16:08:45.357 に答える