要通过form method="post"
从网站存储6个invoce项目,我使用了几个像这样的输入元素
<input name="item[]" value="6 hour service"/>
<input name="item[]" value="1 days travel"/>
....
Serverside我将$ _POST ['Item']复制到这样的数组
item[]= $_POST['Item'];
然后我可以访问item [],它看起来像这样
[item] => Array
(
[0] => 6 hour service
[1] => 1 days travel
[2] => ....
)
然后这个SQL语句遵循
try {
$obj = $this->dbcon->prepare('INSERT INTO invoice_item
( ID, item)
VALUES(:ID,:item)');
for ($i=0;$i<6;$i++) {
if (!empty($item[0][$i])) {
$obj->bindValue(':ID', $this->dbcon->lastInsertId(), PDO::PARAM_INT);
$obj->bindValue(':item', $item[0][$i], PDO::PARAM_STR);
$succ = $obj->execute();
}
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
这适用于固定数量的物品 但是,当项目数量未知时,访问$ _POST,绑定它并存储它的正确方法是什么?
编辑:
如何直接迭代$ _POST [“Item”]?
答案 0 :(得分:0)
检查$i
是否小于项目数而不是小于固定值。
for ($i=0;$i<count($item[0]);$i++) {
if (!empty($item[0][$i])) {
或者您可以使用foreach
:
foreach ($item[0] as $value) {
if (!empty($value)) {
答案 1 :(得分:0)
首先,您不需要绑定ID,因为它来自数据库本身。然后,您可以使用唯一的查询。
获取ID:
$id = $this->dbcon->lastInsertId();
过滤$_POST['Item']
以丢弃空值:
$items = array_values( array_filter( $_POST['Item'] ) );
使用您的查询创建一个字符串:
$query = substr( "INSERT INTO invoice_item (ID, item) VALUES " . str_repeat( "($id, ?),", count($items) ), 0, -1);
假设$_POST['Items']
有三个非空值且id
= 3,则现在$query
为:
INSERT INTO invoice_item (ID, item) VALUES (3, ?),(3, ?),(3, ?)
现在您可以准备查询并执行它一次绑定所有参数(使用数组作为->execute
参数,参数绑定为字符串):
$obj = $this->dbcon->prepare( $query );
$obj->execute( $items );