从 SQL 数据库到购物车数组的数据
Data from a SQL database to an array for a shopping cart
我正在尝试将从我的 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] => )
我看到的第一个问题是您输入的名称不正确。当前输入的每个产品名称都是 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 操作中进行的内容大不相同。
我正在尝试将从我的 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] => )
我看到的第一个问题是您输入的名称不正确。当前输入的每个产品名称都是 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 操作中进行的内容大不相同。