Получение отдельного элемента из массива сессии php для размещения через оператор MySQL SELECT - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь получить отдельный элемент моего массива (идентификатор продукта), а затем с помощью оператора MYSQLi SELECT получить дополнительную информацию о продукте.Я использовал print_r для тестирования, и все правильно хранится в массиве.Я просто не могу понять, как выбрать отдельный элемент из вложенного массива в переменной Session, а затем использовать его, чтобы поместить его в оператор SQL, а затем выполнить цикл для отображения элементов, как это делается для корзины покупок.

Также я попытался использовать mysqli_fetch_array и mysqli_fetch_assoc, и оба способа приводили к ошибке. Вот мой код:

if (isset($_GET['add'])) {
            echo "true";
            $pid = $_GET['add'];
            $wasFound = false;
            $i = 0;
            // If the cart session variable is not set or cart array is empty
            if (!isset($_SESSION['cart_array']) || count($_SESSION['cart_array']) < 1) {
                // RUN IF THE CART IS EMPTY OR NOT SET
                $_SESSION['cart_array'] = array(0 => array('item_id' => $pid, 'quantity' => 1));
            } else {
                // RUN IF THE CART HAS AT LEAST ONE ITEM IN IT
                foreach ($_SESSION['cart_array'] as $each_item) {
                    $i++;
                    while (list($key, $value) = each($each_item)) {
                        if ($key == 'item_id' && $value == $pid) {
                        // That item is in cart already so let’s adjust its quantity using array_splice()
                            array_splice($_SESSION['cart_array'], $i-1, 1, array(array('item_id' => $pid, 'quantity' => $each_item['quantity'] + 1)));
                            $wasFound = true;
                        } // close if condition
                    } // close while loop
                } // close foreach loop
                if ($wasFound == false) {
                    array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1));
                }
                //print_r ($_SESSION["cart_array"]);
                $sql = "SELECT * FROM  `products` WHERE  `productID` = '$pid'";
    $result = mysqli_query(Database::dbConnect(),$sql);
    while($row = mysqli_fetch_array($result)) {
    $str = <<<EOD
    <tbody>
        <tr>
            <td>{$row['productName']}</td>
            <td>{$row['productID']}</td>
            <td>'quantity'</td>
            <td>{$row['price']}</td>

        </tr>
    </tbody>
EOD;
            echo $str;
    }
                }


            }

1 Ответ

0 голосов
/ 02 января 2019

Попробуйте заменить $was_found на

$cart_product = null;

И замените ваш for цикл и if на (та же первая строка):

foreach ($_SESSION['cart_array'] as $each_item) {
    if ($each_item['item_id'] != $pid) {
        continue;
    }

    $cart_product = $each_item;
}

if (isset($cart_product)) {
    $cart_product['quantity']++;
} else {
    $cart_product = array('item_id' => $pid, 'quantity' => 1);
    array_push($_SESSION['cart_array'], $cart_product);
}

Вам не нужно перебирать содержимое $each_item. Идентификатор элемента должен быть доступен напрямую, если ваш формат соответствует формату, указанному в первой части внешнего if.

Кстати, это было бы намного проще, если бы вы определили класс продукта вместо массивов. У вас может быть объект корзины, который вы можете запросить для cart_product объектов.

Затем замените

            <td>'quantity'</td>

с

            <td>{$cart_product['quantity']}</td>

Мне не совсем понятно, как ваш SQL-запрос относится к этому.

Не имеет отношения к вашему вопросу, но

        $pid = $_GET['add'];

с последующим

            $sql = "SELECT * FROM  `products` WHERE  `productID` = '$pid'";

ужасно небезопасно. См. Как я могу предотвратить внедрение SQL в PHP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...