2015-04-14 2 views
0

Я пытаюсь обрешетке очень простой shopping cart Я использую session и array, чтобы добавить элементы в array и сохранить array в session и отображения элементов в этом session должным образом как пункта 1 имя - цена item 2 name - цена , а затем взять итог по моему способу оплаты.создания простой корзины покупок с помощью PHP

вот код, который я использую.

print_r($_SESSION['cart']); 


if (isset($_POST['buy'])) { 
    //header("Location:?pid=18&pl=" . $pl); 
    $getData = $db->prepare('SELECT * FROM plans WHERE id=?'); 
    $getData->bind_param('i', $pl); 
    if ($getData->execute()) { 
     $res = $getData->get_result(); 
     if ($pn = $res->fetch_object()) { 

      $item['name'] = $pn->plan_name; 
      $item['price'] = $pn->price_dollar; 
      if (isset($_SESSION['cart'])) { 
       $_SESSION['cart'] = $item; 
      } 
     } 
    } 
} 

Вопросы (!) Notice: Undefined index: cart

EDIT

это то, что я закончу с

if (isset($_SESSION['cart'])) { 
    foreach ($_SESSION['cart'] as $c) { 
     echo $c['name'] . '<br />'; 
     echo $c['price'] . '<br />'; 
     echo '<a href="?pid=17&rc=' . $c['code'] . '">Remove item</a><br />'; 
    } 
} 


if (isset($_POST['buy'])) { 
    //header("Location:?pid=18&pl=" . $pl); 
    if (isset($_POST['buy'])) { 
     $getData = $db->prepare('SELECT * FROM plans WHERE id=?'); 
     $getData->bind_param('i', $pl); 
     if ($getData->execute()) { 
      $res = $getData->get_result(); 
      if (($pn = $res->fetch_object()) !== null) { 
       $proCode = range(1, 100); 
       shuffle($proCode); 

       $item['name'] = $pn->plan_name; 
       $item['price'] = $pn->price_dollar; 
       $item['code'] = $proCode; 
       $_SESSION['cart'][] = $item; 
      } 
     } 
    } 
} 

if (isset($_GET['rc']) && isset($_SESSION['cart'])) { 
    $rem = $_GET['rc']; 
    if (($key = array_search($rem, $_SESSION['cart'])) !== false) { 
     unset($_SESSION['cart'][$key]); 
    } 
} 

но все-таки удалить не работает

+0

Есть session_start(); где-то в вашем коде? – Netra

+0

Да, есть один в заголовке, я имею в виду, что есть 'header.php', который содержит заголовки сайта, и есть' session_start() 'there –

+0

Что такое вывод print_r ($ _ SESSION ['cart'])? – ply

ответ

0

Как я вижу, вы пытаетесь напечатать переменную, которая не установлена. Плюс, с этим кодом:

if (isset($_SESSION['cart'])) { 
    $_SESSION['cart'] = $item; 
} 

Вы никогда не сможете добавить товар в корзину. Мой способ сделать это состоит в следующем:

if (isset($_POST['buy'])) { 
    $getData = $db->prepare('SELECT * FROM plans WHERE id=?'); 
    $getData->bind_param('i', $pl); 
    if ($getData->execute()) { 
     $res = $getData->get_result(); 
     if ($pn = $res->fetch_object()) { 

      $item['name'] = $pn->plan_name; 
      $item['price'] = $pn->price_dollar; 

      $_SESSION['cart'][] = $item; 
     } 
    } 
} 

Таким образом, даже если ключ cart не установлен, он будет установлен в любом случае. В то же время он позволит вам иметь несколько предметов в вашей корзине.

EDIT: Следующее, что нужно сделать, если вы хотите, чтобы показать ваши детали следующий:

foreach ($_SESSION['cart'] as $k => $item) { 
    echo "item $item->id $item->plan_name -- $item->price_dollar"; 
} 
+0

позвольте мне поблагодарить вас за этот хороший ответ, еще одна вещь, которую мне нужно понять, как я могу отображать элементы в сеансе с отформатированным способом, например, имя элемента 1 - цена –

+0

не могу получить эти значения из сеанса без зависимости в моей базе данных '$ item-> plan_name' и' $ item-> price_dollar' –

+0

Да, вы могли бы, заменив $ _SESSION ['cart'] [] = $ item на $ _SESSION ['cart'] [] [ 'my_custom_field'] = $ item->, но это кажется немного сложным. –

Смежные вопросы