Корзина на php, как уникализировать товары в сессиях?
Как сделать так, чтобы в корзину попадали позиции по-отдельности? Сейчас при добавлении первого товара всё в порядке, а при добавлении другого позиция не добавляется, а перезаписывается. В корзине постоянно один товар с меняющимся названием. Данные корзины храню в сессиях.
Обработчик:
$item_id = $_POST['id'];
$qty = $_SESSION['$item_id'][1] + $_POST['qty'];
$sql = "SELECT * FROM products WHERE id='$item_id'";
if($result = $conn->query($sql)){ foreach($result as $row){ $product_name = $row["name"]; } } else { echo "Ошибка: " . $conn->error;}
$_SESSION['$item_id'] = [$product_name, $qty];
Вывод:
$product_name = $_SESSION['$item_id'][0];
$qty = $_SESSION['$item_id'][1];
<? foreach($_SESSION['$item_id'] AS $value) {?>
<td class="uk-text-nowrap"><?echo $value?></td>
<?}?>
Ответы (1 шт):
Автор решения: Владимир Клыков
→ Ссылка
Пример как это хранить в сессии, код скопирован из вопроса и исправлен только в части работы с сессией, с базой работать как в этом примере - нельзя!.
Обработчик:
$item_id = $_POST['id'];
$qty = $_SESSION['cart'][$item_id]['qty'] + $_POST['qty'];
$sql = "SELECT * FROM products WHERE id='$item_id'";
if($result = $conn->query($sql)){ //а это точно работает как вы ожидаете?
foreach($result as $row){ //и эта строка под сомнением
$product_name = $row["name"];
}
} else {
echo "Ошибка: " . $conn->error;
}
$_SESSION['cart'][$item_id] = ['name' => $product_name, 'qty' => $qty];
Вывод:
$product_name = $_SESSION['cart'][$item_id]['name'];
$qty = $_SESSION['cart'][$item_id]['qty'];
foreach($_SESSION['cart'] AS $item) {
//возможно здесь нужно добавить echo "<tr>";
foreach($item as $value){
echo "<td class='uk-text-nowrap'>$value</td>";
};
//возможно здесь нужно добавить echo "</tr>";
};