这是我的第一篇文章,希望有人可以帮我解决我遇到的这个问题。
我试图从购物车表中取出商品,然后将每一行插入订单表。提交订单后,应执行操作。这是我的代码。
if(isset($_GET['submitOrder'])) {
$timedate = $currentTime." at ".$currentDate;
$order_number = rand(10,100);
$cartOrder=$mysqli->query("SELECT * FROM cart WHERE members_id='".$members_id."'");
$cartOrder_total = $cartOrder->num_rows;
while($row=mysqli_fetch_assoc($cartOrder)) {
$stmt = $mysqli->prepare("INSERT INTO orders(order_number, members_id, product_id, quantity, date_submitted) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param('siiis', $order_number, $members_id, $row['product_id'], $row['quantity'], $timedate);
$stmt->execute();
$stmt->close();
}
header('Location: cart.php#orderplaced');
}
我的问题是它只在插入表中插入一个条目。即使购物车中有4件商品,它仍然只能进入购物车。
如果有人能指出我正确的方向,我会很感激!它现在只进入一行,我不知道为什么。
以下是我的表格:
CREATE TABLE IF NOT EXISTS
车(
cart_id int(11) NOT NULL AUTO_INCREMENT,
PRODUCT_ID int(11) NOT NULL,
members_id int(11) NOT NULL,
量int(11) NOT NULL,
DATE_ADDED varchar(255) NOT NULL,
date_submitted varchar(250) NOT NULL,
PRIMARY KEY (
cart_id ),
KEY
{cart_id {1}} cart_id`)
)ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 153;
CREATE TABLE IF NOT NOT EXISTS (
(
orders
int(11)NOT NULL AUTO_INCREMENT,
order_id
int(11)NOT NULL,
order_number
int(11)NOT NULL,
members_id
int(11)NOT NULL,
product_id
int(11)NOT NULL,
quantity
varchar(256)NOT NULL,
PRIMARY KEY(date_submitted
),
独特的钥匙order_id
(order_number
)
)ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 422;`
答案 0 :(得分:0)
在没有看到数据库模式的情况下我无法确定,但我怀疑这与您在for
循环中使用while
循环有关。这将尝试使用完全相同的INSERT
次完全相同的$cartOrder_total
。
只需删除for
循环,即可:
while($row=mysqli_fetch_assoc($cartOrder)) {
$stmt = $mysqli->prepare("INSERT INTO orders(order_number, members_id, product_id, quantity, date_submitted) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param('siiis', $order_number, $members_id, $row['product_id'], $row['quantity'], $timedate);
$stmt->execute();
$stmt->close();
}
答案 1 :(得分:-1)
您通过INSERT
看到的哪一行是您的迭代问题的线索。或者,您只需添加一个ECHO
,然后查看您要移动的数据。
如果您只看到提交的第一行数据,那就是一条线索,您不会遍历外部循环的数据。
如果你只看到提交的最后一行数据,那么你就可以跳到外部数据的最后一行,而不是遍历每一行。