我在做某件事时遇到问题。
我有这样的代码段产品添加到购物车:自动增加SESSION密钥ID
$product_id = isset($_GET['product_id']) ? $_GET['product_id'] : "";
$product_name = isset($_GET['product_name']) ? $_GET['product_name'] : "";
$sql = "SELECT * FROM products WHERE product_id LIKE '{$product_id}' AND product_name LIKE '{$product_name}' LIMIT 1";
$stmt = $connection->prepare($sql);
$stmt->execute();
$num = $stmt->rowCount();
if($num == 1)
{
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
extract($row);
if(!isset($_SESSION['cart']))
{
$product_id_session = 1;
}
else
{
$count = count($_SESSION['cart']);
$product_id_session = $count++;
}
$columns = array
(
'product_id_session' => $product_id_session,
'product_id' => $product_id,
'product_name' => $product_name,
'product_price' => $product_price
);
$_SESSION['cart'][$product_id_session] = $columns;
redirect_to('products.php?&message=added&product_name='. $_SESSION['cart'][$product_id_session]['product_name']);
}
}
正如你可以看到,如果创建会话cart
,我给你变$product_id_session
与SESSION阵列加一的计数。否则,变量$product_id_session
设置为1
。在购物车页面我有一个链接删除所选产品:
foreach($_SESSION['cart'] as $product)
{
echo "<button onClick=\"location.href='remove.php?product_id_session={$product['product_id_session']}'\">
Remove from cart
</button>";
}
然后,在remove.php文件,我有这样的处理来自查询字符串的数据,并从车中移除产品:
$product_id_session = isset($_GET['product_id_session']) ? $_GET['product_id_session'] : "";
unset($_SESSION['cart'][$product_id_session]);
我面临的问题是:例如,我在购物车中添加了两个产品。然后,我删除了第一个产品,并将另一个产品添加到购物车。新产品,而不是被添加,只是将取代以前在购物车中添加的产品,并且$product_id_session
将始终具有相同的价值。我做错了什么?如何为SESSION指定一个ID?
没有多大意义准备你的语句,如果你要直接在查询中注入用户提供的值,就像是一样:你有一个sql注入问题。 – jeroen
@jeroen我只在数据库中匹配时才插入值。 – Dyan