从 SQL 数据库到购物车数组的数据

Data from a SQL database to an array for a shopping cart

我正在尝试将从我的 SQL 数据库检索到的数据传递到 $_SESSION 数组,以便向用户显示购物车。我不认为这些信息实际上被传递了,程序最终显示但它给了我空白字段。作为参考,我正在尝试通过多个 PHP 文件传递​​数据。此外,一旦我传递信息,我不确定我将如何循环所述 $_SESSION 数组用户添加多个项目。

我不确定问题是出在我的 include()index 上,还是出在 form actionproduct_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] => )

我看到的第一个问题是您输入的名称不正确。当前输入的每个产品名称都是 name="product_name",product_price 也是如此。您需要将它们作为数组传递,或者每个都有自己唯一的键。否则你会得到 product_name 和 product_price 的单个 post 值——这将是带有这些名称的最后一个输入在表单中的任何内容。

您可以通过执行 name="product_name[]" 将它们作为数组传递,然后您的 post 将包含所有这些值的数组,按照它们在表单中出现的顺序排列。

接下来,你说你的输出当前是 Array ( [price] => [name] => )。这向我表明您的会话实际上正在运行,因为您在该数组中有键。所以实际上设置会话不是问题。然后你回到设置会话的地方,看到你在你的 filter_input 参数中使用 INPUT_GET - 但你收到 POST 值。你的参数不应该是INPUT_GET,应该是INPUT_POST.

一旦你弄清楚了所有这些,你仍然会遇到问题,因为 product_name 和 product_price 的输入将是具有多个值的数组。您需要遍历它们以 assemble 设置为会话的最终数组。我将把它留给您去探索,因为这看起来与您目前在 add_to_cart 操作中进行的内容大不相同。