Здравствуйте!
Принимаю goods_id товара по клику на ссылку:
<a href="<?=PATH?>addtocart/<?=$goods['goods_id']?>">В корзину</a>
и передаю goods_id в controller.php. Затем из controller.php значение goods_id летит в model.php и там реализуется функция показа сколько товара в корзине.
Открываю сессию в controller.php:
session_start();
затем в controller.php прописываю:
case('addtocart'):
$goods_id = abs((int)$_GET['goods_id']);
addtocart($goods_id);
break;
затем в model.php прописываю:
function addtocart($goods_id, $qty = 1){
if(isset($_SESSION['cart'][$goods_id])){
// если в массиве cart уже есть добавляемый товар
$_SESSION['cart'][$goods_id]['qty'] += $qty;
return $_SESSION['cart'];
}else{
// если товар кладется в корзину впервые
$_SESSION['cart'][$goods_id]['qty'] = $qty;
return $_SESSION['cart'];
}
}
Распечатываю массив:
<?php print_arr($_SESSION) ?>
И выводится:
Array
(
[cart] => Array
(
[6] => Array
(
[qty] => 1
)
)
)
6 - это goods_id товара, а qty - это количество товара (т.е. кликнул один раз на ссылку = 1, кликну два раза на ссылку - будет 2 товара в корзине).
Все работает отлично. Но как мне сделать так, чтобы пользователь смог добавлять произвольное кол-во товара. Сейчас по клику на ссылку добавится столько товара, сколько пользователь кликнул на ссылку.
Понял одно, что необходимо добавить поле input. Пробовал его передавать GET параметром в controller.php - не получается. Например:
<input type="text" value="1" name="kol" />
<a href="<?=PATH?>addtocart/<?=$goods['goods_id']?>">В корзину</a>
в controller.php:
case('addtocart'):
$goods_id = abs((int)$_GET['goods_id']);
$kolvo = $_GET['kol'];
addtocart($goods_id, $kolvo);
break;
в model.php прописываю:
function addtocart($goods_id, $kolvo = 1){
if(isset($_SESSION['cart'][$goods_id])){
// если в массиве cart уже есть добавляемый товар
$_SESSION['cart'][$goods_id]['qty'] += $kolvo;
return $_SESSION['cart'];
}else{
// если товар кладется в корзину впервые
$_SESSION['cart'][$goods_id]['qty'] = $kolvo;
return $_SESSION['cart'];
}
}
Но ничего не работает. Вот, что выводит сессионный массив по клику на ссылку один раз:
Array
(
[cart] => Array
(
[6] => Array
(
[qty] =>
)
)
)
по клику больше одного раза и более:
Array
(
[cart] => Array
(
[6] => Array
(
[qty] => 0
)
)
)
Помогите, пожалуйста, разобраться. Возможно что-то не правильно с GET.
А с чего в GET что-то будет? Нужно input и ссылку обернуть в form, используя метод POST. id товара упакуйте в input hidden. Кнопку c типом submit. Примерно вот так
<form action="<?=PATH?>addtocart" method="POST">
<input type="text" value="1" name="kol" />
<input type="hidden" name="goods_id" value="<?=$goods['goods_id']?>" />
<button type="submit">В корзину</button>
</form>
В controller.php вместо $_GET следует использовать $_POST
Первое что очень заметно - вы вставили input + link ?! и как это будет работать?
<input type="text" value="1" name="kol" />
<a href="<?=PATH?>addtocart/<?=$goods['goods_id']?>">В корзину</a>
"Понял одно, что необходимо добавить поле input. Пробовал его передавать GET параметром в controller.php - не получается." -- да верно необходимо отправлять данные из input. однако я не вижу в вашем примере форму для отправки... попробуйте так:
<form action="" method="post">
<input type="submit" value="Добавить в корзину">
<input type="text" value="1" name="kol" />
<input type="hidden" value="<?=$goods['goods_id']?>" name="goods_id" />
<input type="hidden" name="task" value="{ваш класс}.addtocart{ваша функция в контроллере}" />
</form>
в controller.php
$goods_id = abs((int)$_POST['goods_id']);
$kolvo = $_POST['kol'];
addtocart($goods_id, $kolvo);
я попробовал описать общую логику - остальное вы экспериментируйте
Виртуальный выделенный сервер (VDS) становится отличным выбором
ЗдравствуйтеЯ часто использую функцию создания гистов в Android Studio и хочу иметь такую же возможность и в NetBeans
ЗдравствуйтеЗаменяю перевод строки на < /p>< p> как показано в этом решении, но возникает проблема, если в тексте появляются теги < h2>< /h2>, например
Пытаюсь создать простейший CRUD на Laravel 54 + Sleeping owl 4