我有一个发票模块。在那里,我有购买物品的字段。当用户想要添加时,我正在使用 ajax/jQuery 添加新行。现在我的问题是如何使用PHP在数据库中添加所有记录,我知道如何输入一条记录,但是当我们不知道要插入多少记录时,我不知道如何添加多条记录。这是代码,
<html>
<head>
<title>Document</title>
<script src="js/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
$("#insert-more").click(function () {
$("#JTable").each(function () {
var tds = '<tr>';
jQuery.each($('tr:last td', this), function () {
tds += '<td>' + $(this).html() + '</td>';
});
tds += '</tr>';
if ($('tbody', this).length > 0) {
$('tbody', this).append(tds);
} else {
$(this).append(tds);
}
});
});
</script>
</head>
<body>
<form name="items" method="post">
<table id="JTable" style="margin-left:50px;">
<thead>
<th class="tblfldname">Product</th>
<th class="tblfldname">Quantity</th>
<th class="tblfldname">Price</th>
</thead>
<tbody>
<tr>
<td>
<select name="pname[]" class="pname" style="padding:4px; width:150px;">
<option></option>
</select>
</td>
<td>
<input type="text" name="qty[]" style="width:150px; padding:4px;" />
</td>
<td>
<input type="text" name="price[]" class="price" style="width:150px; padding:4px;" />
</td>
</tr>
</tbody>
<input type="submit" name="submit" />
</table>
</form>
<a href="#" id="insert-more"> Add New Row </a>
</body>
</html>
附言所有新生成的行的字段都具有相同的名称。
您可以遍历pname
并为每个元素执行一个查询:
$pname = $_POST['pname'];
$qty = $_POST['qty'];
$price = $_POST['price'];
for ($i = 0; $i < count($pname); $i++) {
$name = mysqli_escape_string ($conn, $pname[$i]);
$quantity = intval($qty[$i]);
$prc = doubleval($price[$i]);
$sql = "insert into bla(name, qty, price) values('{$name}', {$quantity}, {$prc})";
$conn->query($sql);
}
当然,您必须检查这些值是否有意义...请记住,[]
不符合XHTML,这是一个PHP的东西。
INSERT INTO `table`(`field0`, `field1`, `field2`)
VALUES
('value0forfield0', 'value0forfield1', 'value0forfield2'),
('value1forfield0', 'value1forfield1', 'value1forfield2'),
('value2forfield0', 'value2forfield1', 'value2forfield2'),
('value3forfield0', 'value3forfield1', 'value3forfield2');
当您不知道会有多少条记录时,您可以执行以下操作:
$query = "INSERT INTO `table`(`field0`, `field1`, `field2`) ";
$query .= "VALUES ";
foreach($record as $row)
{
$query .= "('".$row['field0']."', '".$row['field1']."', '".$row['field2']."'),";
}
$query = preg_replace("/',$/", ";", $query);
通过按现有方式命名输入字段,如果其中一个字段未得到回答,则可能会出现数据验证问题。IMO 最好将您的字段命名为:
<select name="dataset[0]['pname']>...</select>
<input type="text" name="dataset[0]['qty'] ..... >
<input type="text" name="dataset[0]['price'] ..... >
<select name="dataset[1]['pname']>...</select>
<input type="text" name="dataset[1]['qty'] ..... >
<input type="text" name="dataset[1]['price'] ..... >
依此类推,然后在"发布到"页面上,循环访问您的 _POST 美元,例如:
foreach($_POST["dataset"] as $rcd){
$name = $rcd["pname"];
$qty = $rcd["qty"];
$price = $rcd["price";
..... do whatever db stuff needs to be done ....
}