读取动态添加的输入值到数组PHP

时间:2017-06-13 09:27:53

标签: javascript php html arrays

每件事都在工作,期望在添加动态字段时,添加的输入不会被捕获到数组中。只读取唯一创建的输入中的值。 HTML PART

<table class="table table-bordered table-hover order-list" >
<thead>
    <tr><td>Product</td><td>Price (Ksh.) </td><td>Qty</td><td> (Ksh.)</td></tr>
</thead>

<tbody>
    <tr>
        <td><input type="text" class="form-control" name="product[]" required="" /></td>
        <td><input type="text" class="form-control" name="price[]" required/></td>
        <td><input type="text" class="form-control" name="quantity[]" /></td>
        <td><input type="text" name="linetotal[]" readonly="readonly" /></td>
        <td><a class="deleteRow"> x </a></td>
    </tr>
</tbody>

<tfoot>
    <tr>
        <td colspan="5" style="text-align: center;">
            <input type="button" id="addrow" value="Add Product" />
        </td>
    </tr>

    <tr>
        <td colspan="5">
            Grand Total: Ksh.<input type="text" name="grandtotal" readonly="readonly" /><span id="grandtotal"></span>
        </td>
    </tr>
    </tfoot>
    </table>

总结得到子总数和总计的javascript如下:

$(document).ready(function () {
var counter = 1;

$("#addrow").on("click", function () {
    counter++;

    var newRow = $("<tr>");
    var cols = "";
    cols += '<td><input type="text" name="product' + counter + '"/></td>';
    cols += '<td><input type="text" name="price' + counter + '"/></td>';
    cols += '<td><input type="text" name="quantity' + counter + '"/></td>';
    cols += '<td><input type="text" name="linetotal' + counter + '" readonly="readonly"/></td>';
    cols += '<td><a class="deleteRow"> x </a></td>';
    newRow.append(cols);

    $("table.order-list").append(newRow);
});

$("table.order-list").on("change", 'input[name^="price"], input[name^="quantity"]', function (event) {
    calculateRow($(this).closest("tr"));
    calculateGrandTotal();
});

$("table.order-list").on("click", "a.deleteRow", function (event) {
    $(this).closest("tr").remove();
    calculateGrandTotal();
});
});
function calculateRow(row) {
var price = +row.find('input[name^="price"]').val();
var qty = +row.find('input[name^="quantity"]').val();


var linetotal = +row.find('input[name^="linetotal"]').val((price * qty).toFixed(2));
}
function calculateGrandTotal() {
 var grandTotal = 0;
 $("table.order-list").find('input[name^="linetotal"]').each(function () {
    grandTotal += +$(this).val();
});



$("#grandtotal").text(grandTotal.toFixed(2));
}

读取数组的php部分是

if(isset($_POST['cinvoice']) && $_SERVER["REQUEST_METHOD"] == "POST" &&is_array($_POST["product"]) && is_array($_POST["quantity"]) && is_array($_POST["price"]) && is_array($_POST["linetotal"]))

{

$recordid="";
$firstname="";
$product="";
$quantity="";
$price="";


$linetotal="";


foreach ($_POST["product"] as $key => $prod) {


 $product .= $prod.",";
}

foreach ($_POST["quantity"] as $key => $qty){ 



 $quantity.=$qty. ",";

}

   foreach ($_POST["price"] as $key => $prc) {



$price.=$prc. ",";

}

foreach ($_POST["linetotal"] as $key => $linetotal) {

  $linetotal.=$linetotal. ",";
}

1 个答案:

答案 0 :(得分:0)

您应该将文本框名称作为数组传递:

cols += '<td><input type="text" name="product[]"/></td>';
cols += '<td><input type="text" name="price[]"/></td>';
cols += '<td><input type="text" name="quantity[]"/></td>';
cols += '<td><input type="text" name="linetotal[]" readonly="readonly"/>

你也可以在php中使用implode函数

foreach ($_POST["product"] as $key => $prod) {
 $product .= $prod.",";
}

$product = implode(',', $_POST["product"])