/ / 2つのHTMLフォームと1つの送信(動的フィールドを持つ1つのフォーム)-javascript、php、jquery、html、forms

2つのHTMLフォームと1つのサブミット(動的フィールドを持つ1つのフォーム) - javascript、php、jquery、html、forms

「1つのボタンで2つのフォームを送信する」などの質問に対する回答はたくさんありますが、特に疑問があることはありません。

私はこれを2日間過ごし、さまざまなソリューションをテストしました。これが私が持っているものです。

最初のフォームは動的フォームであり、MySQLデータベースからのみ1つの列内の情報から自動的に生成されるため、PHPで展開し、フィールドを分離してフォームを作成します。

ここまでは順調ですね!

次に、javascriptにこのスクリプトがあり、ユーザーがすべてのオプションを選択および/または書き込み(入力タイプに応じて)し、変数をPOSTします。

そして繰り返しますが、これまでのところとても良いです!

しかし、2番目の形式(「静的フィールド」があるとしましょう)があり、それらにもPOSTを実行してもらいたいと思います。

私はここで2つのジレンマに直面しています。

1-これを実際に2つのフォームに分けて、最初のフォームをvarに保存するために一度に1つずつ送信する必要があります(セッションvarかもしれませんか?)

2-私はそれをすべて1つの中に入れるべきですかフォームを作成して一度に送信してみますか? (私はこれを試しましたが、実際のJavaScriptでは機能しません。変更する必要がありますが、問題は...方法がわかりませんが、これが最善の解決策だと思います。)

そして今、十分に「話し」、いくつかのコードを見てみましょう。

これらは動的フィールドです(コードはここでは完全ではありません。このコードだけが機能しているため、アイデアを持っているのはあなただけです)。

$types = explode(",",$row["field_type"]);
$values = explode("|",$row["field_values"]);
$count =1;
$c = 1;
if($types[0]!=""){
foreach($types as $type){

$value = explode("^",$values[$c-1]); ?> <div class="fields" data-count="<?=$count?>" data-type="<?=$type?>"> <span id="label<?=$count?>" class="labels"><?=$value[0]?></span>
<span <?php if($type=="select") { ?> class="styled quotoesDiv" <?php } ?>>
<?php if($type=="text"){ ?>
<input name="input<?=$count?>" type="text" id="input<?=$count?>" required value="" class="details">
<?php }else if($type=="textbox"){ ?>
<textarea style="  width: 450px;height: 150px;" name="input<?=$count?>" id="input<?=$count?>"></textarea>
<?php }else if($type=="select"){ $options = explode(",",$value[1]); ?>
<select name="input<?=$count?>" id="input<?=$count?>" class="qt-li">
<?php foreach($options as $option){ ?>
<option value="<?=$option?>"><?=$option?></option>
<?php } ?>
</select>
<?php }else if($type=="combo"){ $options = explode(",",$value[1]); ?>
<select multiple name="input<?=$count?>" id="input<?=$count?>" class="qt-li combo">
<?php foreach($options as $option){ ?>
<option value="<?=$option?>"><?=$option?></option>
<?php } ?>
</select>
<?php }else if($type=="checkbox"){ $options = explode(",",$value[1]); ?>
<?php foreach($options as $option){ ?>
<input type="checkbox" name="input<?=$count?>" id="input<?=$count?>" value="<?=$option?>"> <?=$option?>
<?php $count++; } ?>

<?php $count--; }else if($type=="radio"){ $options = explode(",",$value[1]); ?>
<?php foreach($options as $option){ ?>
<input type="radio" name="input<?=$count?>" id="input<?=$count?>" value="<?=$option?>"> <?=$option?>
<?php  } ?>

<?php } ?>
</span>

次に、送信後に呼び出されるJavaScriptがあります。

$(document).ready(function(e) {
$("#request_form").on("submit",function(e){
//e.preventDefault();
var count = $(".fields:last").data("count");
var values = "";
for(i=1;i<=count;i++){
var type = $("#label"+i).closest(".fields").data("type");
if(type=="checkbox"){
values += $("#label"+i).html()+"__";
var number_of_checkboxes = ($("#input"+i).closest("span").find("input").length)-1;
$("#input"+i).closest("span").find("input").each(function(index, element) {
if($(this).is(":checked")){
values += $(this).val()+",";
}
});
values = values.substr(0,values.length-1);
values += "^^";
i = i-(-number_of_checkboxes);
}else if(type=="radio"){
values += $("#label"+i).html()+"__"+$("input[name="input"+i+""]:checked").val()+"^^";

}else{
values += $("#label"+i).html()+"__"+$("#input"+i).val()+"^^";
}
}
values = values.substr(0,values.length-2);

$("#need_request").val(values);
console.log(values);
}); });

どんな助けでも大いに感謝されるでしょう、それは私が言うことができるすべてです!:)

PS:送信後に実行する必要のあるPHP条件がたくさんあることに注意してください(1つまたは2つのフォームではありません)。これらの条件は同じファイル内にあり、選択したオプションに応じて異なる処理を実行するため、実際には実行しません。 「これらの条件をチェックせずにこのファイルを終了したくない。

回答:

回答№1は0

2つのフォームを同期して送信することはできないため、Ajaxを使用して最初のフォームを送信し、成功関数で2番目のフォームを送信することをお勧めします。

$.ajax({
method: "POST",
url: "action.php",
data: $("#form1").serialize()
})
.done(function( msg ) {
alert( "Form 1 submitted" );
$.ajax({
method: "POST",
url: "action.php",
data: $("#form2").serialize()
})
.done(function( msg ) {
alert( "Form 2 submitted" );
});
});

または、1つのajaxリクエストで両方のフォームを送信することもできます。そのためには、2つのフォームのシリアル化を連結する必要があります。

$.ajax({
method: "POST",
url: "action.php",
data: $("#form1").serialize()+"&"+$("#form2").serialize()
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});