2016-11-16 11 views
0

私は現在、提出時に渡す必要がある1000以上の変数を持つ巨大なフォームを持っています。現在のところ、PHPはこれを1000個の変数に制限しており、PHPを回避するにはphp.iniを編集する必要があります。

私はかなり悪い習慣だと知っていますが、回避策はありません。おそらく、$ _POST変数を同じ連想配列階層のチャンクに分割して、チャンク間でループして利用することができますか? max_input_vars

OR
の上限を増加させることにより

+0

制限を拡大しますか? –

+3

私は1000が非常に多くの 'POST'値であることをアドバイスしたいと思います。複数のフォーム値を連鎖している場合は、すべてのデータを格納する前にセッションを使用するのが好ましいかもしれません。 –

+0

フォームを表示し、私はphp.iniファイルを編集することを意図的に避けています。私はこの不都合を回避するための他の可能な選択肢を探しています。 – theflarenet

答えて

0

php.iniのファイル あなたは、単一のJSONエンコードされたパラメータにすべての入力を組み合わせること

php_value max_input_vars 6000 
php_value suhosin.post.max_vars 6000 
php_value suhosin.request.max_vars 6000 
+0

私はこれを避けようとしています。 php.iniに触れることなく、どんな方法で? – theflarenet

+0

次に 'ini_set'を試してください –

+0

申し訳ありません!私はあなたの投稿を誤解しました。私はini_setを試しましたが、配列は切り捨てられました。 (私も10000を使った)。これはini_setには適していないようです。 – theflarenet

3

JavaScriptを使用htaccessファイルでそれを変更することができます。ここで

あなたはjQueryのを使用してそれを行うことができる方法です:PHPで

$("#formid").submit() { 
    var params = JSON.stringify($(this).serializeArray()); 
    $(this).find(":input:not(#params)").prop("disabled", true); // prevent submitting the real inputs 
    $("<input>", { 
     type: 'hidden', 
     name: 'params' 
     value: params 
    }).appendTo(this); 
}); 

、あなたはその後、どうなる:ボタンはserializeArray()により符号化されたパラメータに含まれていません

$_POST = json_decode($_POST['params']); 

注意。したがって、PHPが何かを行う場合、

if (isset($_POST['submit'])) 

は動作しません。それを明示的にparamsに追加する必要があります。

params.submit = "submit"; 
関連する問題