PHP バージョン 5.3.9 より前の max_input_vars 制限を回避するために、1000 を超える変数を持つ巨大な HTML フォームからすべてのデータを圧縮したいと考えています。
HTMLフォームのすべてのデータをjavascriptで読み取り、シリアル化(またはjsonを作成)して、データ全体を含む1つの隠しフィールドにすべて入れるにはどうすればよいですか?
受信側では、PHP で解凍します (たとえば、json_decodeを使用) 。
PHP バージョン 5.3.9 より前の max_input_vars 制限を回避するために、1000 を超える変数を持つ巨大な HTML フォームからすべてのデータを圧縮したいと考えています。
HTMLフォームのすべてのデータをjavascriptで読み取り、シリアル化(またはjsonを作成)して、データ全体を含む1つの隠しフィールドにすべて入れるにはどうすればよいですか?
受信側では、PHP で解凍します (たとえば、json_decodeを使用) 。
ajax投稿を送信しただけですか?
<form action="process.php" method="post" id="form">
<input type="text" name="name">
<input type="text" name="username">
<button type="submit" id="sendForm">Send</button>
</form>
<!-- YOUR JAVASCRIPT -->
<script type="text/javacript">
$('#sendForm').click(function() {
$.ajax({
type: 'POST',
url: $('#form').attr('action'),
data: $('#form').serialize(),
success: function(data) {
// WHATEVER YOU WANT HERE
}
});
return false;
});
</script>
<?php
$name = $_POST['name'];
// other form fields here
}
すべての投稿フォームで自動的にジョブを実行するスクリプトを作成しました。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
// this disables all form elements and creates only one new element that contains all data serialized
$('form[method="post"]').submit(function() {
var num_form_elements=$(this).find('input, select, textarea').not('[type="submit"]').length;
var num_elements_already_disabled=$(this).find('input:disabled, select:disabled, textarea:disabled').length;
enabled=(num_form_elements-num_elements_already_disabled);
if($('textarea[name="serialized_data"]', this).length > 0) {
alert("Backbutton is not supported yet!");
return false;
}
if($('textarea[name="serialized_data"]', this).length > 0 || enabled<=0) {
alert("Reload of the form is not supported yet!");
return false;
}
var data=$(this).serialize();
$(this).find('input, select, textarea').not('[type="submit"]').attr("disabled", true);
$(this).append(' <input type="hidden" name="num_form_elements" value="'+num_form_elements+'">');
$(this).append(' <input type="hidden" name="num_elements_already_disabled" value="'+num_elements_already_disabled+'">');
$(this).append(' <textarea style="display:true" name="serialized_data">'+(data)+'</textarea>');
// maybe in the textarea I have to .replace(/</g,'<') ?
});
</script>
parse_str()
受信側では、max_input_vars ディレクティブがこの関数にも影響するため、PHP 関数を使用できないため、別のものが必要です: https://gist.github.com/rubo77/6821632my_parse_str()
から取得
<?php
$params=my_parse_str($_REQUEST['serialized_data']);
echo count($params,1)." serialized variables:<br>";
var_export($params);
?>
おそらく serialize と JSON.stringify は一緒に動作するかもしれませんが、私は試していません。
Serialize it using JQuery. You can then parse the URL string using PHP.