2

jquery:

$("#btnSaveForm").click(function(){
...
$.post('../optional/setup/processItemcn.php', $("#FormTemplate").serialize(), function(data) {
     alert(data);
});
...
});

フォームのphp:

<form id="FormTemplate" class="FormTemplate">
  <input type="text" name="kode_item[]" value="1" />
  <input type="text" name="kode_item[]" value="2" />
  <input type="text" name="kode_item[]" value="3" />
  .
  .
  <input type="text" name="kode_item[]" value="197" />
</form>

サーバーサイドのphp:

$ID = $_POST["kode_item"];
$count = count($ID);   
echo "$count";

jquery post と serialize を使用して、すべての配列データをフォームからサーバーサイドに送信しようとしています。kode_item = 197 アイテムの合計アイテム配列がありますが、それをサーバー側に送信した後、サーバー側からチェックしてエコーし、$count = 167 アイテムの結果を返します。そのため、サーバー側で処理されないため、kode_item > 167 に関連するデータを更新できません。誰にもアイデアはありますか?

4

3 に答える 3

1

私もこの問題に直面しましたが、解決策が見つかりませんでした.jQueryのドキュメントを読んだ後、私はアイデアを得ました.

php.ini ファイルをいじる.serializeArray()だけではなく、そのまま使用できます。.serialize()これが私のプロジェクトで使用したコードです。

jQuery('.modal').on('click','.saveFeature',function(){ 

        var form = jQuery('#featureForm').serializeArray();
        jQuery.ajaxSetup({
            data:{
                csrf_name:jQuery('input[name="csrf_name"]').val()
            }
        });
        var url = "<?php echo 'product/features/'.$pid;?>";
        jQuery.post(url,{form}, function(msg){
            alert(msg);
        } );
    });

フォームを送信すると、以下の形式でデータが取得されます。

Array
(
[0] => Array
    (
        [name] => csrf_name
        [value] => 3802b11296d42e602533bf266bb800bd
    )

[1] => Array
    (
        [name] => title
        [value] => kjhkjh
    )

[2] => Array
    (
        [name] => title_icon
        [value] => fa fa-heart
    )

[3] => Array
    (
        [name] => icon_color
        [value] => #a81616
    )

[4] => Array
    (
        [name] => icon_bg_color
        [value] => #662f2f
    )

[5] => Array
    (
        [name] => description
        [value] => testb
    )

[6] => Array
    (
        [name] => box_bg_color
        [value] => #bd2222
    )

[7] => Array
    (
        [name] => box_bttm_bg
        [value] => #a61e1e
    )

)

バックエンドで投稿データを処理するため、CodeIgniter Framework を使用しています。key=>valueデータを保存しやすい形式で投稿データを整理します。

$arry = $this->input->post('form');
    $post = [];
    //check if this is not empty and is array
    if(!empty($arry) && is_array($arry)){
        //iterate over post data and organize array in key value format.
        foreach($arry as $ar) 
        {
            $post[$ar['name']] = $ar['value'];
        }
    }

    $data = [
        'pid' => $pid,
        'title' => $post['title'],
        'icon' => $post['title_icon'],
        'icon_color' => $post['icon_color'],
        'icon_bg_color' => $post['icon_bg_color'],
        'description' => $post['description'],
        'box_bg_color' => $post['box_bg_color'],
        'box_bttm_color' => $post['box_bttm_bg'],
    ];

    $this->db->insert(TBL_PRODUCT_FEATURES, $data);

間違っていたら訂正してください。この問題を解決するためのアイデアを共有しました。

于 2017-08-11T05:25:13.093 に答える
1

php.ini に正しい設定があるかどうかを確認してみてください

; Maximum size of POST data that PHP will accept.
post_max_size = 8M
于 2013-02-13T12:01:52.620 に答える
0

解決策は、私のウェブホスティング技術者から出てきました。

フォームからサーバーサイドに送信する配列データが長すぎます.. suhosin送信される配列データを制限します.

この方法は私のために働きます。次の 2 行を php.ini に追加します。

suhosin.post.max_vars = 1500
suhosin.request.max_vars = 1500
于 2013-02-14T08:54:42.463 に答える