在PHP

时间:2017-09-06 10:13:52

标签: javascript php jquery ajax serialization

我遇到序列化表单的问题。我需要传递多行来创建发票,但它只传递第一行。

这是一种形式:

<form action="" id="generate_invoice" method="POST">
  <td><input type="number" class="form-control n_invoice" name="n_invoice[]"></td>
  <td><input type="date" class="form-control data" name="data[]"></td>
  <td><input type="text" class="form-control description" name="description[]"></td>
  <td><input type="number" class="form-control price" name="price[]" step=any></td>
  <td><input type="number" class="form-control vat" name="vat[]">
</form>

这是一个添加新行的功能:

function addrow_invoice() {
  var i = $('#invoiceTable tr').length;
  var tr = '<tr>'+
    '<td><input type="checkbox" class="case"/></td>'+
    '<td></td>'+
    '<td></td>'+
    '<td><input type="text" class="form-control description" name="description[]"></td>'+
    '<td><input type="number" class="form-control price" name="price[]"></td>'+
    '<td><input type="number" class="form-control vat" name="vat[]"></td>'+
    '</tr>';
  $('table#invoiceTable').append(tr);
  i++;
};

这是一个测试:

for($i = 0; $i<count($_POST['description']); $i++) 
{
  echo "{$_POST['description'][$i]}";
  echo "<br>";
}

1 个答案:

答案 0 :(得分:0)

问题是因为您的HTML无效。 form需要包装table元素,而不是在其中。由于HTML无效,因此移动了form的位置,以便它不会包裹您的input元素,因此不会将任何内容序列化。

您的HTML需要更改为:

&#13;
&#13;
<form action="" id="generate_invoice" method="POST">
  <table id="invoiceTable">  
    <tr>
      <td><input type="number" class="form-control n_invoice" name="n_invoice[]"></td>
      <td><input type="date" class="form-control data" name="data[]"></td>
      <td><input type="text" class="form-control description" name="description[]"></td>
      <td><input type="number" class="form-control price" name="price[]" step=any></td>
      <td><input type="number" class="form-control vat" name="vat[]">
    </tr>
    <!-- additional rows appended here... -->
  </table>
</form>
&#13;
&#13;
&#13;