Данные из базы данных SQL в массив для корзины покупок - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь передать данные, которые я извлек из базы данных SQL, в массив $_SESSION для отображения корзины покупок пользователю. Я не думаю, что информация на самом деле передается, программа заканчивается отображением, но она дает мне пустые поля. Для справки я пытаюсь передать данные через несколько файлов PHP. Кроме того, как только я передаю информацию, я не уверен, как бы я зациклил указанный массив $ _SESSION, чтобы пользователь мог добавить несколько элементов.

Я не уверен, что проблема связана с моей include() с моимindex или, может быть, мой form action в product_list. Но где-то либо данные не передаются, либо они не работают так, как я думаю.

Это код в моем product_list, куда данные первоначально отправляются

foreach ($products as $product)  : ?>
                <tr>

                    <td><?php echo $product['productID']; ?></td>
                    <td><?php echo $product['productName']; ?></td>
                    <td class="right"><?php echo $product['price']; ?></td>
                    <td><form action="../Cart/index.php" method="post">
                        <input type="hidden" name="action"
                               value="add_product">
                        <input type="hidden" name="product_name"
                               value="<?php echo $product['productName'];?>"> 
                        <input type="hidden" name="product_price"
                               value ="<?php echo $product['price'];?>">
                        <input type="submit" value="Add to Cart">
                    <?php endforeach; 

Это код в моем index, куда входит корзина для покупок

if ($action == 'add_product') 
{   

    include('../Cart/index.php');
}

Это мой код в `` `индексе в пути к корзине для покупок

$action = 'add_to_cart';


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

if($action == 'add_to_cart')
{
    $cart_product_name = filter_input(INPUT_GET, 'product_name');
    $cart_product_price = filter_input(INPUT_GET, 'product_price', FILTER_VALIDATE_FLOAT);
    $product = array('price' => $cart_product_price, 'name' => $cart_product_name);
    $_SESSION['cart'][] = $product; 
   include('cart_view.php');
}

И именно здесь должен отображаться массив $_SESSION

<main>
        <h1>Your Cart</h1>
        <link rel='stylesheet' type="text/css" href="main.css">
        <?php
            print_r($_SESSION['cart'][0]);
        ?>  

На самом деле отображается Array ( [price] => [name] => )

1 Ответ

0 голосов
/ 02 октября 2019

Первая проблема, которую я вижу, состоит в том, что ваши входные имена неверны. Каждый ввод имени продукта в настоящее время name = "product_name", аналогично для product_price. Вам необходимо передать их как массив или каждый со своим уникальным ключом. В противном случае вы получите одно единственное значение записи для product_name и product_price - которое будет таким, каким будут последние входные данные с этими именами в форме.

Вы можете передать их как массив, выполнив name = "product_name []" итогда ваше сообщение будет содержать массив всех этих значений в том порядке, в котором они отображаются в форме.

Далее вы говорите, что в настоящее время вы выводите массив ([цена] => [имя] =>). Это указывает на то, что ваша сессия действительно работает, потому что у вас есть ключи в этом массиве. Так что на самом деле настройка сеанса не является проблемой. Итак, вы возвращаетесь туда, где устанавливается сеанс, и видите, что вы используете INPUT_GET в своих параметрах filter_input - но вы получаете значения POST. Ваш параметр не должен быть INPUT_GET, он должен быть INPUT_POST.

Как только вы все очистите, у вас все еще будет проблема, потому что входные данные для product_name и product_price будут массивами с несколькими значениями,Вам нужно пройти через них, чтобы собрать окончательный массив, который устанавливается для сеанса. Я оставлю это вам для изучения, потому что это будет сильно отличаться от того, что вы сейчас делаете в своем действии add_to_cart.

...