如何在具有多行并且动态构建的数据表中提交表单?

时间:2015-06-02 14:21:33

标签: javascript php jquery html forms

好吧,我在这里提交问题真的不太好,所以如果我没有把所有的标记做得恰到好处,那就去看看吧。我正在构建一个包含数据行的表单,其中有几个字段是输入,并且所有行都包含匹配的数据。也就是说,每行包含相同的字段。这是我的表单的HTML ...

echo "<div id='display-wrapper' style='position:absolute;
    left:-100000px;'><form method='post'><table id='uploan' class='table-striped table-bordered'><thead><tr>";
        $TtlReactHeaderNames = array_keys($TtlReactQuery[1]);
        foreach($TtlReactHeaderNames as $TtlReactkey=>$TtlReactvalue) {
            echo "<th>" . $TtlReactvalue . "</th>";
        }    
        echo "<th class='green'>Revised BB Value</th><th class='green'>Revised Max Loan Capacity</th></tr></thead><tbody>";
        foreach($TtlReactQuery as $TtlReactkey=>$TtlReactvalue) {
            echo "<tr>";
            echo "<td>" . $TtlReactvalue['Store Name'] . "</td>";
            echo "<td>" . $TtlReactvalue['VIN Number'] . "</td>";
            echo "<td><input type='text' name='display-name' value='" . $TtlReactvalue['Full Name'] . "' readonly /></td>";
            echo "<td>" . $TtlReactvalue['SSN(Last Four)'] . "</td>";
            echo "<td>" . $TtlReactvalue['Ecash Vehicle Value'] . "</td>";
            echo "<td>" . $TtlReactvalue['Max Capacity'] . "</td>";
            echo "<td><input type='text' name='revised-bb-value' /></td>";
            echo "<td><input type='text' name='revised-max-loan-capacity' /></td>";
            echo "</tr>";
        }
        echo "</tbody></table><input type='submit' /></form></div>";

...这种形式有大约200行数据。最终用户只会选择一行,填写空白字段中的信息并提交。但就像现在一样,它只会提交最后一行的内容,因为所有输入的行都具有相同的名称。我想添加一个计数器并在name属性后附加数字,以便每个字段都有一个唯一的名称,但是当我提交时,我最终在POST数组中有一个空字段的BUNCH,尽管数据也在那里,并且我不知道他们要填写什么行,所以我不知道从POST数据中获取什么。有人建议使用javascript填充表单的隐藏表单,但我不确定如何去做。任何帮助都会非常感激!!!

3 个答案:

答案 0 :(得分:1)

有三种选择:

选项#1:

由于默认情况下所有输入都为空,因此请更改输入名称以包含一组括号:<input type='text' name='revised-bb-value[]' />。这将为您提供一系列值。假设您输入的数量相同,$_POST['revised-bb-value'][5]将与$_POST['display-name'][5]相同。您需要做的就是循环输入:

for($i = 0; $i < count($_POST['display-name']; $i++) {
   if($_POST['revised-bb-value'][$i] == '' && $_POST['revised-max-loan-capacity'][$i]  == '')
      continue;
   }

   /* process row */
}

缺点是提交空记录(尽管仍然没有过多的数据)。

选项#2:

每行创建一个表单。

这样做的缺点是当你需要提交&#34;提交时,它会变得很丑陋且容易出错。每行旁边的按钮。您可以编写将提交按钮onFocus()附加到该行的javascript,但您仍然有很多不必要的表单,而且这并不是正确的&#34;正确的&#34; html语法。

选项#3

使用JavaScript,当单击一行时,您可以动态插入该行的字段。给每个包含数据唯一ID的tr和td以及唯一ID(例如,数据库行唯一ID)。一个例子是<tr id='row[1365]'<td id='row-bb-value[1365]'之类的。

当用户单击该行时,使用html输入和与该值匹配的预定义值替换列的内容。通常,数据标签将用于存储原件,以防用户改变主意:

<td id='row-bb-value[1365]' data-original='30k'>30k</td>

该行的onClick函数会将其更改为:

<td id='row-bb-value[1365]' data-original='30k'><input type='text' name='revised-bb-value' value='30k' /></td>

您可以为行中的每个可编辑项执行此操作。

优点是你可以在一个表单中进行多次编辑(选项#1的好处,选项#2的限制),没有额外的按钮或html(选项#2的限制),并且没有所有空行(选项#1的缺点)。

答案 1 :(得分:0)

通过创建一个大表单,您需要为每个字段使用不同的名称。更好的解决方案是在每行数据上创建表单。这样,您将拥有许多具有相同字段的表单,但只会发送一个。

答案 2 :(得分:-1)

输入必须具有不同的名称。计数器方法很好,但你必须在名称之后附加它(例如:display-name0,not 0display-name)。

然后在提交时,循环遍历所有行,仅为已填充值的那些行调用submit函数。