php - 在购物车中添加我的订单时重复的项目
问题描述
我的餐厅网站的购物车功能出现问题。
例如,如果我将一个项目添加到购物车,然后我添加另一个项目,然后如果我删除我最后添加的一个并再次添加它,它会在会话中添加一倍。在这里,我有添加和删除购物车中商品的功能:
function AddProd($id_prod, $quant) {
if(isset($_SESSION['cart'])){
$_SESSION['cart'].=$id_prod.'>'.$quant.",";
} else {
$_SESSION['cart']=$id_prod.'>'.$quant.",";
}
}
function RemoveFromCart($id_prod) {
if(isset($_SESSION['cart'])) {
$n = $_SESSION['cart'];
$prod_id = substr($n, 0, -1);
$ids = explode(',', $prod_id);
$prods = '';
foreach ($ids as $id) {
$i = explode('>', $id);
if($i[0] != $id_prod) $prods = $prods.''.$id.',';
}
$_SESSION['cart'] = $prods;
}
}
这里我有设置项目数量的功能:
function SetCartNumber($conn) {
if(isset($_SESSION['cart'])) {
$n = $_SESSION['cart'];
$prod_id = substr($n, 0, -1);
$ids = array_map('trim', explode(',', $prod_id));
foreach ($ids as $id) {
$i = explode('>', $id);
$total = $total + $i[1];
}
return $total;
}
return 0;
}
在这里它插入数据库:
function LastId($conn, $tbl){
$s = 'SELECT `id` FROM `'.$tbl.'` ORDER BY `id` DESC LIMIT 1';
if ($r = mysqli_query($conn, $s)) {
$rowd = mysqli_fetch_array($r, MYSQLI_NUM);
return $rowd[0];
}
return -1;
}
$t_price = (empty(GetPromotion($connect))) ? $total_price : '<span style="color: white; font-weight: bold;">'.SetPromotion($connect).'</span> <span style="text-decoration: line-through; color: red;">'.$total_price.'</span>';
if(isset($_POST['delete_prod'])) {
RemoveFromCart($_POST['delete_prod']);
echo '<script type="text/JavaScript"> setTimeout("location.href = \'cart\';",100); </script>';
}
if(isset($_POST['decrease_prod'])) {
ProdsDecrease($_POST['decrease_prod']);
echo '<script type="text/JavaScript"> setTimeout("location.href = \'cart\';",100); </script>';
}
if(isset($_POST['increase_prod'])) {
ProdsIncrease($_POST['increase_prod']);
echo '<script type="text/JavaScript"> setTimeout("location.href = \'cart\';",100); </script>';
}
if (!empty($_POST['trimite']))
{
$str_name = ($str_name[strlen($str_name)-2] == ',') ? substr($str_name, 0, -2) : $str_name;
$str_name2 = ($str_name2[strlen($str_name2)-2] == ',') ? substr($str_name2, 0, -2) : $str_name2;
$price = (empty(SetPromotion($connect))) ? SetCartPrice($connect) : SetPromotion($connect);
$price = (!empty(GetPromotion($connect))) ? $price.' lei(Promotie activa: '.GetPromotion($connect).'%)' : $price;
$prods = MailProds($connect);
$quantity = SetCartNumber($connect);
$price1 = (empty(SetPromotion($connect))) ? SetCartPrice($connect) : SetPromotion($connect);
$price1 = floatval($price1);
$quantity = floatval($quantity);
$email = filter_input(INPUT_POST, 'email');
$telefon = filter_input(INPUT_POST, 'telefon');
$mentiuni = filter_input(INPUT_POST, 'mentiuni');
$tacamuri = filter_input(INPUT_POST, 'tacamuri');
if(!empty(get())) { $email = getEmail($connect); }
$sql = "INSERT INTO `comenzi`(`name`, `pret`, `cantitate`, `adresa_mail`, `nr_telefon`, `mentiuni`, `tacamuri`) VALUES ('$prods', '$price1', '$quantity', '$email', '$telefon', '$mentiuni', '$tacamuri')";
我该如何解决这个问题?
解决方案
问题出在 addProd 函数中。您的会话必须包含唯一的 prodId 值。但是当您再次添加相同的产品时。您没有删除第一个,那么您将面临问题。
所以你应该在添加之前检查产品是否已经在会话中。或者你应该更新它。
推荐阅读
- android - 如何正确输出 ByteArray?
- arrays - 查找2个连续数字的算法
- javascript - 如何使用 FilterExpression 和两个未索引字段查询 DynamoDB 表
- javascript - 控制台日志点击控制
- date - 电子表格中的日期和应用脚本中的今天日期
- recursion - 如何使用递归找到Scheme中GP的第n项?
- vba - 运行宏时 VBA 结束函数出现语法错误
- python - 尝试根据最高频率进行子集化
- python - find_elements_by_class_name 不适用于某些类
- web - 如何在 yandex 上进行多站点搜索?