Как передать значение value из поля input в controller.php

533
02 февраля 2017, 03:35

Здравствуйте!

Принимаю 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.

Answer 1

А с чего в 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

Answer 2

Первое что очень заметно - вы вставили 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);

я попробовал описать общую логику - остальное вы экспериментируйте

READ ALSO
Github Gist в NetBeans - прямо как в Anroid Studio

Github Gist в NetBeans - прямо как в Anroid Studio

ЗдравствуйтеЯ часто использую функцию создания гистов в Android Studio и хочу иметь такую же возможность и в NetBeans

344
Замена перевода строки на хтмл тег p в wysibb editor

Замена перевода строки на хтмл тег p в wysibb editor

ЗдравствуйтеЗаменяю перевод строки на < /p>< p> как показано в этом решении, но возникает проблема, если в тексте появляются теги < h2>< /h2>, например

389
Не получается создать CRUD (LARAVEL + SLEEPING OWL)

Не получается создать CRUD (LARAVEL + SLEEPING OWL)

Пытаюсь создать простейший CRUD на Laravel 54 + Sleeping owl 4

588