Не получается передать значение из select в корзину

arhat78

Новичок
Всем привет! Бьюсь над этим кодом:
PHP:
<form action="index.php" method="get">
<input type="hidden" name="view" value="add_to_cart">
<input type="hidden" name="id" value="<?=$product['id']?>">
<?
$sql="SELECT * FROM sizes WHERE `sizes`.`id_boot`='$id' ";;
$a=mysqli_query($link, $sql);
while ($b = mysqli_fetch_array($a ))
{
      echo "<option  value='$b[0]' >  $b[2] </option>";
} 
?>
</select>
<input type="submit" name="go" value="Добавить в корзину">
</form>
Если в option стоит value, то в корзину попадает id_boot, а если value урать и оставить только $b[0], то в корзину попадает выбранный размер.
Это корзина:
PHP:
<tr>    
            <th>N п/п</th>
            <th>Товар</th>
            <th>Размер</th>
            <th>Цена</th>
            <th>Кол-во</th>
            <th>Всего</th>
            <th>Удалить</th>
</tr>
      
      <?php 
      $i = 1;   
      foreach ($_SESSION['cart'] as $id => $quantity):
         $product = get_product($id);
         
         $b =  $_SESSION['cart_size'];
                  
            if (isset($_GET['size'])) {$b=  $_GET['size'];} else {echo "NOT?????!!!!";}   
       ?>
      <tr>
          <td align="center"><?=$i;?></td>
          <td align="center"><?=$product['title']; ?></td>
          <td align="center">   <?=$b; ?> </td>
          <td align="center">   <?=number_format($product['price'],2); ?> руб</td>
          <td align="center"><input type="text" size="2" name="<?=$id; ?>" maxlength="2" value="<?=$quantity; ?>" /></td>
          <td align="center">  <?=number_format($product['price'] * $quantity ,2); ?> руб</td>
      </tr>

Эта проверка показывает, что в $b $_GET не попадает:
PHP:
if (isset($_GET['size'])) {$b=  $_GET['size'];} else {echo "NOT?????!!!!";}
И если по очереди выбрать у одного ботинка два разных размера, то корзина записывает только последний в одной строчке, а вот две строчки с одинаковым ботинком и двумя разными размерами никак не получается вывести.

Можете помочь?
 

Фанат

oncle terrible
Команда форума
Первое правило программирования, без дураков:
ВСЕГДА знать, что ты хочешь получить
результатом работы твоего РНР скрипта является что? Правильно - HTML
вот и нарисуй этот HTML. Убедись что работает
и только потом учись получать этот же самый HTML с помощью РНР.
проверить себя можно просмотреть исходный код полученной страницы в браузере
 

arhat78

Новичок
Первое правило программирования, без дураков:

результатом работы твоего РНР скрипта является что? Правильно - HTML
вот и нарисуй этот HTML. Убедись что работает
и только потом учись получать этот же самый HTML с помощью РНР.
проверить себя можно просмотреть исходный код полученной страницы в браузере
Если честно, посыла не понял. Передал со страницы товара размер 20, в корзину прилетел 20й размер. Возвращаюсь на страницу этого же товара, выбираю размер 22, в корзине теперь только 22й размер - 20й исчез, перезаписался 22м. А что нужно поменять в коде, чтобы в корзине выводился и 20й, и 22й размеры одного товара?
 

Фанат

oncle terrible
Команда форума
Я думаю мы оба не совсем поняли друг друга
РНР программисты решают проблемы линейно.
Я вижу проблему в самом первом куске кода, который не несёт смысла и никакие размеры никуда не передаёт.
И точно так же как РНР, я останавливаюсь на этой проблеме и не работаю дальше.

Чтобы я мог решить остальные твои проблемы, ты должен разобраться с этим кодом, который выводит размеры.
Если он такой же как у тебя в коде, то проблема в нем
Если он не такой как здесь - значит проблема в тебе.
Напиши здесь тот код который у тебя в программе и будем двигаться дальше.
 

arhat78

Новичок
Напиши здесь тот код который у тебя в программе и будем двигаться дальше.
PHP:
<select name="size">
<?php
$sql="SELECT * FROM sizes WHERE `sizes`.`id_boot`='$id' ";;

$a=mysqli_query($link, $sql);
while ($b = mysqli_fetch_array($a ))
{
      echo "<option  value='$b[0]' >  $b[2] </option>";
}
?>
</select>
Это таблица sizes
Код:
SELECT `id`, `id_boot`, `size` FROM `sizes` WHERE 1
 

Фанат

oncle terrible
Команда форума
вот, теперь я вижу, почему-то,
Код:
<select name="size">
Теперь, как я понимаю, проблема в том, как данные добавляются в сессию.
Как ты думаешь я могу тебе сказать что не так в коде, который добавляет сапоги в корзину?
 

arhat78

Новичок
вот, теперь я вижу, почему-то,
Код:
<select name="size">
Теперь, как я понимаю, проблема в том, как данные добавляются в сессию.
Как ты думаешь я могу тебе сказать что не так в коде, который добавляет сапоги в корзину?
Здесь же указываю, какой параметр передаю метедом get : name="size", разве не так??

Уверен, что для вас этот код разбирается, чинится и собирается на "раз-два"! А пока как в вязком "болоте" передвигаюсь....

PHP:
function add_to_cart($id)
{
if(isset($_SESSION['cart'][$id]))
{
$_SESSION['cart'][$id]++;
return true;
}
else
{
$_SESSION['cart'][$id] = 1;
return true;
}
return false;
}


 function get_sizes($id)
  {
    global $link;
    $query = ("SELECT size FROM `sizes` WHERE `sizes`.`id_boot`='$id'   ");
    $result = mysqli_query($link, $query);
    $a = mysqli_fetch_array($result);
    return $a;
    }

session_start();
   if(!isset($_SESSION['cart']))
   {
    
    $_SESSION['cart'] = array();
    $_SESSION['total_items'] = 0;
    $_SESSION['total_price'] = '0.00';
    $_SESSION['cart_size'] = '';
   }
 

Фанат

oncle terrible
Команда форума
я не вижу в функции add_to_cart() кода, который добавлял бы размеры.
 

Фанат

oncle terrible
Команда форума
Слушай, а ты этому коду кто?
Он тебе в наследство от кого-то достался что ли?
 

arhat78

Новичок
Слушай, а ты этому коду кто?
Он тебе в наследство от кого-то достался что ли?
Интересный вопрос 😳. Смотрел, читал уроки и писАл по тихоньку.

Так что нужно поменять в коде, добавить, чтобы в корзине ещё и размер учитывался?
 

Фанат

oncle terrible
Команда форума
например можно добавить еще одну размерность к корзине, то есть
$_SESSION['cart'][$id][$size]
но не знаю, осилишь ли все изменения в коде под эту структуру
 

arhat78

Новичок
например можно добавить еще одну размерность к корзине, то есть
$_SESSION['cart'][$id][$size]
но не знаю, осилишь ли все изменения в коде под эту структуру
Попробовал так, но ругается при нажатии на "добавить в корзину"
PHP:
function add_to_cart($id, $size) {
    
    if (!isset($_SESSION['cart'][$id])) {
        $_SESSION['cart'][$id] = [];
    }
    if (!isset($_SESSION['cart'][$id][$size])) {
        $_SESSION['cart'][$id][$size] = 1;
    } else {
        $_SESSION['cart'][$id][$size]++;
    }
    return true;
}
Здесь ругается
PHP:
$_SESSION['cart'][$id][$size]++;    =>  Fatal error: Uncaught Error: Cannot increment/decrement string offsets
Да и в других кодах куча ошибок вылезло. Если в корзину добавляю такой форич, то обработчик не видит ни size , ни $quantity:
PHP:
foreach ($_SESSION['cart'] as $id => $sizes)    {
    $product = get_product($id);
    foreach ($sizes as $size  => $quantity){}   }
 

Фанат

oncle terrible
Команда форума
Ну так разумеется менять весь код а не только один кусочек.
то есть везде где код ожидает старую структуру корзины, он во-первых сам ругается, а во-вторых портит новую стркутуру корзины

Я потому и писал
не знаю, осилишь ли все изменения в коде под эту структуру
То есть надо везде исправлять, а не в одном только месте.
 
Сверху