2015-11-01 60 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); 
?>