сессионная корзина

0

Первоначально я получил его, чтобы работать нормально, передавая id продукта, через array_push(), переходя из addtocart.php в Shoppingcart.php отображая элементы. Но когда я добавляю больше переменных/в array_push(), другое, что id единственного продукта $_GET['id'] ,... на следующей странице, которая получает этот массив, это дает мне ошибку.

Проблема заключается в следующем: в исходном запросе $sql он получал id который должен отображать информацию о продуктах из array_push() и отображать его на Shoppingcart.php, но когда я добавляю больше переменных /info в push_array() я получить сообщение об ошибке. Поскольку он смущает запрос $sql из-за WHERE id IN... ID все еще там, теперь вместе с другой информацией ($_GET['size'] & $_GET['qty']), я просто не знать, как получить к нему доступ...

Как добавить дополнительную информацию в массив push, но некоторые из них определяют это, чтобы я мог захватить id для моего запроса $sql, чтобы получить информацию о продукте, но также иметь доступ к size & Qty для цикла while while().

addtocart.php

array_push($_SESSION['cart'], $_GET['id']); //working MAIN
header('Location:shoppingCart.php');

How 2: array_push($_SESSION['cart'], $_GET['id'], $_GET['size'],  $_GET['qty']); 
//Not Working

shoppingcart.php

    <?php 
    $whereIn = implode(',', $_SESSION['cart']); //working MAIN
    $sql = " SELECT * FROM inventory WHERE id IN ($whereIn) "; ?>

 <?php while($row = mysql_fetch_array($result)) { ?>

<td  valign="top">
    <div id="sc_itemBox">
        <p class="sc_itemBox_iTEXT"><strong>SIZE:</strong> ""XL?? <em>(Extra Large??)</em></p>
        <div id="sc_itemBox_img"><img src="<?php echo $row['imgThumb'];?>" /></div>
        <p class=<p class="sc_itemBox_iTEXT"><strong>STYLE#</strong><?php echo $row['styleNUM']; ?> </p>
    </div>        
</td>
<?php } ?>
  • 0
    Если вам нужна дополнительная информация, чтобы лучше понять, что здесь происходит, просто дайте мне знать, я постарался сделать все возможное, чтобы быть ясным, чтобы никого не смущать.
  • 1
    Одиночные кавычки написаны с ' вместо ' (то есть $_GET['size'] ) или это просто опечатка?
Показать ещё 10 комментариев
Теги:
while-loop
session
shopping-cart
array-push

1 ответ

1
Лучший ответ

Я думаю, что сделать вашу $_SESSION['cart'] немного более сложной может сделать трюк. Попытайтесь выделить свой id и т.д. В свои собственные массивы. Может быть, что-то вроде.

addtocart.php

if(isset($_SESSION['cart'])) {
        // Store just ids
        // Use array_unique to filter this array
        $_SESSION['cart']['id'] = array_unique($_SESSION['cart']['id']);
        // Save new cart array with that items basics
        $_SESSION['cart'][$_GET['id']]['size'][] = $_GET['size'];
        $_SESSION['cart'][$_GET['id']]['qty'][]  = $_GET['qty'];
        header('Location:shoppingCart.php');
        exit;
    }

shoppingcart.php

// Implode just the id array, no other array in the cart session
// (make sure your addtocart checks for is_numeric so you don't get someone
// injecting sql junk into your db
$whereIn    =    implode(',', $_SESSION['cart']['id']);
$sql        =    "SELECT * FROM inventory WHERE id IN ($whereIn)";

EDIT: вот способ сделать это, чтобы вы могли разбить свои предметы на размеры (если вы добавляете несколько элементов с одинаковым идентификатором, но с разными размерами и размерами:

    function AddToCart()
        {
            // Confirm that an id is being added
            // I am assuming there is an "add" trigger
            if(isset($_GET['add']) && is_numeric($_GET['id'])) {
                    // Create the item in the cart
                    // Record size
                    if(isset($_SESSION['cart'][$_GET['id']]['size'][$_GET['size']]['qty']))
                        // Notice here that if there is already this item in the cart
                        // with the exact same size, it will sum
                        $_SESSION['cart'][$_GET['id']]['size'][$_GET['size']]['qty']    +=  $_GET['qty'];
                    else
                        // If not in cart at this size, it will add qty
                        $_SESSION['cart'][$_GET['id']]['size'][$_GET['size']]['qty']    =   $_GET['qty'];
                }
        }

    // Fetch ids for your query 
    function FetchItems()
        {
            if(isset($_SESSION['cart'])) {
                    foreach($_SESSION['cart'] as $itemcode => $array) {
                            $items[]    =   $itemcode;
                        }

                    return (isset($items))? $items:false;
                }
        }

    // Start the session
    session_start();

    // Add to cart
    AddToCart();
    // This will fetch your ids for your query
    $mysqlIds   =   implode(",",FetchItems());

    echo '<pre>';
    print_r($mysqlIds);
    echo '</pre>'; ?>

    <!-- These are just for testing. Will generate different sizes and qty-->
    <a href="?add=true&id=1&size=<?php echo rand(1,12); ?>&qty=<?php echo rand(0,5); ?>">ID 1</a>
    <a href="?add=true&id=2&size=<?php echo rand(1,12); ?>&qty=<?php echo rand(0,5); ?>">ID 2</a>
    <a href="?add=true&id=3&size=<?php echo rand(1,12); ?>&qty=<?php echo rand(0,5); ?>">ID 3</a>

ДАМ ТЕБЕ:

// Session array after adding items to it.
Array
(
    [cart] => Array
        (
            [2] => Array
                (
                    [size] => Array
                        (
                            [21] => Array
                                (
                                    [qty] => 1
                                )

                            [9] => Array
                                (
                                    [qty] => 2
                                )

                            [8] => Array
                                (
                                    [qty] => 0
                                )

                            [7] => Array
                                (
                                    [qty] => 20
                                )

                            [2] => Array
                                (
                                    [qty] => 5
                                )

                        )

                )

            [3] => Array
                (
                    [size] => Array
                        (
                            [9] => Array
                                (
                                    [qty] => 3
                                )

                            [1] => Array
                                (
                                    [qty] => 0
                                )

                            [7] => Array
                                (
                                    [qty] => 4
                                )

                            [10] => Array
                                (
                                    [qty] => 6
                                )

                            [3] => Array
                                (
                                    [qty] => 20
                                )

                            [2] => Array
                                (
                                    [qty] => 10
                                )

                            [12] => Array
                                (
                                    [qty] => 2
                                )

                            [6] => Array
                                (
                                    [qty] => 10
                                )

                        )

                )

            [1] => Array
                (
                    [size] => Array
                        (
                            [11] => Array
                                (
                                    [qty] => 1
                                )

                            [3] => Array
                                (
                                    [qty] => 3
                                )

                            [2] => Array
                                (
                                    [qty] => 2
                                )

                        )

                )

        )

)

// This is for the ids for your mysql query
2,3,1
  • 1
    Кстати ... он работает с идентификаторами (thx) ... я просто пытаюсь выяснить, почему ists дважды публикует первый элемент в сессии
  • 0
    Итак, когда вы нажимаете кнопку add в первый раз, он добавляет два одинаковых идентификатора в массив id?
Показать ещё 53 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню