2015-11-01 61 views
0

我有一個看起來像這樣兩種形式:如何獲得一個兩種形式提交

<h2>First form</h2> 
 
<form id="first-form"> 
 
    <table> 
 
    <tr> 
 
     <td> 
 
     <input type="text" name="left[]" value=""> 
 
     </td> 
 
     <td> 
 
     <input type="text" name="right[]" value=""> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input type="text" name="left[]" value=""> 
 
     </td> 
 
     <td> 
 
     <input type="text" name="right[]" value=""> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input type="text" name="left[]" value=""> 
 
     </td> 
 
     <td> 
 
     <input type="text" name="right[]" value=""> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input type="text" name="left[]" value=""> 
 
     </td> 
 
     <td> 
 
     <input type="text" name="right[]" value=""> 
 
     </td> 
 
    </tr> 
 
    </table> 
 
</form> 
 
<!-- some more HTML --> 
 
<h2>Second form</h2> 
 
<form id="second-form"> 
 
    <label> 
 
    <input type="search" name="sentence" value="i like the bananas"> 
 
    </label> 
 
    <label> 
 
    <input type="text" name="parse-as" value="S"> 
 
    </label> 
 
    <label> 
 
    <select name="include-features"> 
 
     <option>Yes</option> 
 
     <option selected="selected">No</option> 
 
    </select> 
 
    </label> 
 
    <label> 
 
    <select name="show-earley"> 
 
     <option>Yes</option> 
 
     <option selected="selected">No</option> 
 
    </select> 
 
    </label> 
 
    <button type="submit">Parse</button> 
 
</form>

需要注意的是第一種形式可以包含更多的行;用戶可以向表單添加更多行。正如你所看到的,只有一個提交按鈕。這是因爲兩種表格都必須一起提交。在jQuery的我會做這樣的事情:

$("#second-form").submit(function(event) { 
    $("first-form").submit(); 
    event.preventDefault(); 
}); 

作爲球隊的前端開發人員,我需要這兩種形式的值傳遞到後端。不幸的是,我不知道如何做到這一點。我想我可以做這樣的事情:

$("#second-form").on("submit", function(event) { 
    $("#first-form").submit(); 
    $.post("php/do.php", $("#second-form").serialize()); 
    event.preventDefault(); 
}); 

$("#first-form").on("submit", function(event) { 
    $.post("php/do.php", $("#first-form").serializeArray()); 
    event.preventDefault(); 
}); 

.serializeArray()似乎必要的,因爲在HTML中#first-form陣列狀值。然而,在第二種形式中,我們不需要數組。我現在遇到的問題是,我需要在do.php中處理輸入的代碼。你如何訪問數據,即PHP中的序列化表單?

我嘗試了一些東西,如

<?php 
$data = parse_str($_POST["right[]"]); 
var_dump($data); 
$date1 = parse_str($_POST["right[][0]"]); 
var_dump($data); 
$data2 = parse_str($_POST["right[][1]"]); 
var_dump($data); 
?> 

但所有這些返回Undefined index錯誤,這似乎意味着我的「選擇」是錯誤的。我將如何去從第一種形式選擇數組,以及PHP中第二種形式的值?我的jQuery提交first-form與第二個正確的方法?

+1

你將不得不結合形式或使用ajax。你不能提交2個像這樣的HTML表單。 –

+0

@ DanielA.White你可以在答案中詳細說明嗎?合併表單不是一種選擇。 –

+0

@ DanielA.White請重新打開。這是*不重複,因爲我問如何訪問PHP中的內容,而鏈接的問題不關心PHP訪問。重要的是一個表單是一個數組('serializeArray'),另一個不是。鏈接的問題甚至沒有談及PHP訪問。請重新打開。 –

回答

0

你爲什麼不這樣做:

<h2>First form</h2> 
 
<form id="first-form"> 
 
    <table> 
 
    <tr> 
 
     <td> 
 
     <input type="text" name="left[]" value=""> 
 
     </td> 
 
     <td> 
 
     <input type="text" name="right[]" value=""> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input type="text" name="left[]" value=""> 
 
     </td> 
 
     <td> 
 
     <input type="text" name="right[]" value=""> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input type="text" name="left[]" value=""> 
 
     </td> 
 
     <td> 
 
     <input type="text" name="right[]" value=""> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <input type="text" name="left[]" value=""> 
 
     </td> 
 
     <td> 
 
     <input type="text" name="right[]" value=""> 
 
     </td> 
 
    </tr> 
 
    </table> 
 
    <!-- some more HTML --> 
 
    <h2>Second form</h2> 
 
    <label> 
 
    <input type="search" name="sentence" value="i like the bananas"> 
 
    </label> 
 
    <label> 
 
    <input type="text" name="parse-as" value="S"> 
 
    </label> 
 
    <label> 
 
    <select name="include-features"> 
 
     <option>Yes</option> 
 
     <option selected="selected">No</option> 
 
    </select> 
 
    </label> 
 
    <label> 
 
    <select name="show-earley"> 
 
     <option>Yes</option> 
 
     <option selected="selected">No</option> 
 
    </select> 
 
    </label> 
 
    <button type="submit">Parse</button> 
 
</form>

也許這不是做最徹底的方法,但它是更容易。只是得到的結果:

<?php 
$data = parse_str($_POST["right[]"]); 
var_dump($data); 
$date1 = parse_str($_POST["right[][0]"]); 
var_dump($data1); 
$data2 = parse_str($_POST["right[][1]"]); 
var_dump($data2); 
?>