2015-04-02 20 views
0

那麼,我已經看到很多關於「用一個按鈕提交兩個表單」等類似問題的答案,但從未涉及到我的具體疑問。兩個HTML表單和一個提交(帶有動態字段的一個表單)

我花了圍繞這兩天,測試不同的解決方案,這是我所:

第一種形式是一個動態的形式,通過信息只能從我的MySQL數據庫自動生成一個欄裏面,所以後來我在PHP中爆炸並分隔字段來構建表單。

到目前爲止好!

然後在JavaScript中,我有這個腳本,將獲得所有選項和/或用戶寫入(取決於輸入類型),並將POST一個變種。

再一次,到目前爲止這麼好!

但是,我有第二種形式(假設它有「靜態字段」),我希望那些在POST上。

我對着這裏有兩個難題: - (?會話VAR也許)

1如果我真的這樣分成兩種形式,並嘗試提交他們一次一個以存儲在VAR的第一個

2 - 我是否應該將所有內容都放在一個表單中,並嘗試一次全部提交? (我已經試過這個,並且用我的實際的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條件必須在子命令之後完成(獨立於一個或兩個表單)。這些條件在同一個文件中,根據選擇的選項將做不同的事情,所以如果沒有檢查這些條件,我真的不想離開這個文件。

回答

0

你不能同時提交兩個表單,所以我建議使用Ajax,這樣你就可以用ajax提交第一個表單,然後在成功函數中提交第二個表單。

$.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"); 
     }); 
     }); 

或者你可以只在一個Ajax請求同時發送的形式,這樣做,你只需要Concat的兩種形式的序列化:

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

我感謝您的評論和你的幫助,但不幸的是你的代碼不適合我的情況。 :( – Pedro 2015-04-05 02:50:03

相關問題