我遇到了数组的问题,我在PHP中并不是那么新,但我有一点操作复杂数组的经验,就像我现在需要的那样。
我正在构建购物车,我对购物车的想法是每个用户都会拥有的数据库行,购物流程应该是这样的
当用户购买产品时,如果购物车脚本中不存在产品,则应将产品添加到购物车,例如1=1
或数组$cart = [ [1]=>'1' ]
表示产品ID1数量1,现在如果产品已存在于购物车脚本中,则只需更新数量,例如1=2
等等,以获得更高的数量。
这是我完成上述
的不良尝试PHP
<?php session_start();
require_once('config.php');
$member_id = '1'; // Test data
$pr_id = filter_input(INPUT_POST, 'pr_id', FILTER_SANITIZE_STRING); // Sending ID with jQuery/AJAX which works fine of course
$pr_qty = '1'; // Start quantity
$up_qty = '5'; // Test data
try {
$getCart = $conn->prepare("SELECT cart FROM members WHERE member_id = :member_id ");
$getCart->bindParam(':member_id', $member_id);
$getCart->execute();
$cart = $getCart->fetch(PDO::FETCH_ASSOC);
if(array_key_exists($pr_id, $cart)) {
$cart[$pr_id] = $up_qty . ',';
}
else {
$cart[$pr_id] = $pr_qty . ',';
}
$updateCart = $conn->prepare("UPDATE members SET cart = :cart WHERE member_id = :member_id ");
$updateCart->bindParam(':member_id', $member_id);
$updateCart->bindParam(':cart', implode($cart));
if($updateCart->execute()) {
echo '1';
}
}
catch(PDOException $error) {
echo 'Error: ' . $error->getMessage();
}
$conn = null;
?>
稍后,我应该能够从数据库中检索产品ID和数量,但是到时候......
我在这工作了大约三天,我无望,我到处搜索,找到了很多关于多维数组的教程,但我认为我的问题有点独特或者我只是愚蠢足够,无法解决它。
提前感谢大家,我希望我们能够一起解决它,更多的大脑=更多的知识=解决方案;)
答案 0 :(得分:1)
如果我正确理解您的问题,实现此问题的一种方法是每个购物车拥有多个数据库行,而不是将所有数据编码为一个。我建议有一个像这样的数据库结构:
这完全区分了所有内容,因此编辑和扩展更加简单。例如,这种方式可以让用户很容易拥有多个购物车,就像亚马逊一样!
这简化了很多代码!
我不会为你写出代码,因为我没有时间,但我会解释它是如何工作的,所以你可以自己去吧! / p>
您可以通过以下方式获取属于用户的任何购物车:
我希望这有帮助!
答案 1 :(得分:0)
您使用的implode功能对您的购物车不起作用,因为数组索引会丢失,因此您会丢失产品ID。但您可以serialize或json_encode购物车阵列。
$_SESSION['cart'] = array(
1 => 1,
6581 => 4
);
$json = json_encode($_SESSION['cart']);
然后,您可以将$json
字符串存储到您的成员表中。如果您想稍后从数据库中获取它,则必须json_decode并将函数结果再次放入$_SESSION['cart']
。
$_SESSION['cart'] = json_decode($json, true);
如您所见,我已将$cart
变量放入$_SESSION
。因此,当用户在您的站点上导航时,您无需再次从数据库中检索它。这将减少数据库的负载并加快脚本速度。对于购物网站而言,网站尽可能快地加载非常重要,这样客户就可以享受购物和留在网站上。
要添加新产品或增加现有位置的数量,只需执行以下操作:
function addProduct($id)
{
if (isset($_SESSION['cart'][$id]))
$_SESSION['cart'][$id]++;
else
$_SESSION['cart'][$id] = 1;
}
调用addProduct之后,您应该json_encode并更新数据库以使购物车保持不变。