这是我第一次在stackoverflow上发布内容。我是一个相对较新的程序员,喜欢Php,我有这个任务,我必须制作一个购物车
如果这很麻烦或无法解决,我道歉。我一直在这些论坛上搜索大约2天,我真的找不到自己的解决方案
现在我的问题如下
我从数据库中获取产品数据 - >然后我点击产品 - >它转到一个页面,它将productid,productname和price添加到带有array_push的会话中,然后它返回到购物车所在的同一页面上(购物车与产品线位于同一页面上)
现在我收到会话就好了,使用var转储我可以看到即使在foreach中数组也完全填满了。
我想要做的就是单独显示productid / productname / price。
array(6){[“productid”] => string(1)“6”[“productname”] => string(11)“solexfiets6”[“price”] => string(5)“12.99”[0] => string(1)“5”[1] => string(11)“solexfiets5”[2] => string(5)“16.99”}
向前是我正在使用的代码。也许有人在这里可以解释我发生了什么
session_start();
if(isset($_SESSION["cart"]) && count($_SESSION["cart"])> 0)
{
echo '<div id="cd-cart">';
echo '<h2>Cart</h2>';
echo '<ul class="cd-cart-items">';
echo '<li>';
foreach($_SESSION['cart'] as $id => $value) {
//var_dump($_SESSION["cart"]); // this var_dump
//echo $id; //
$products = $id;
echo $value["productname"] . '<br/>';
}
echo '</li>';
echo '</ul>';
echo '<div class="cd-cart-total">';
echo '<p>Total <span>$39.96</span></p>';
echo '</div>';
echo '<a href="#0" class="checkout-btn">Checkout</a>';
echo '<p class="cd-go-to-cart"><a href="#0">Go to cart page</a></p>';
echo '</div>';
}
谢谢你的帮助
foreach($_SESSION['cart'] as $id => $value) {
print_r($value); //outputs 6solexfiets612.995solexfiets516.99
(it puts everything in the session in a string)
//var_dump($_SESSION["cart"]);
//echo $id; //
//$products = $id;
//echo $value["productname"] . '<br/>';
}
我将产品发送到此页面的方式是,当有人点击订单add_to_cart.php然后执行此操作时,在网址中发送productid,productname和price
<?php
session_start();
if(empty($_SESSION['cart'])){
$_SESSION['cart'] = array();
}
array_push($_SESSION['cart'], $_GET['productid'], $_GET['productname'], $_GET['price']);
?>
<p>Het product is toegevoegd aan uw winkelwagen</p> <a href="../cart.php">Naar winkelwagen</a>
通过我收到的所有帮助,我发现我以错误的方式发送数据。有没有更好的方法将产品发送到购物车然后循环它?
我在这里提出了关于这个问题的后续问题,并提供了有关我的代码的所有信息
Sessions/foreach issue with my shopping cart
我很抱歉给您带来不便
答案 0 :(得分:0)
好的,这是你的问题 -
您正在迭代购物车,因为它包含多个商品,实际上它只包含一个商品。
我会给你一个完整的例子来告诉你:
foreach($_SESSION['cart'] as $id => $value){
ITERATION 1:
$id = “productid”
$value = “6”
ITERATION 2:
$id = “productname”
$value = “solexfiets6”
ITERATION 3:
$id = “price”
$value = “12.99”
ITERATION 4:
$id = 0
$value = “5”
ITERATION 5:
$id = 1
$value = “solexfiets5”
ITERATION 6:
$id = 2
$value = “16.99”
At no point in this iteration is there a valid variable called `$value[“productname"]` which is why your code fails.
}
您正在将$_SESSION[‘cart']
视为一个数组数组,但它不是,因此,您的循环失败是因为它在每次迭代中都找不到$value[“productname"]
- 或者任何迭代(在这种情况下)
它的一个例子:
运行此代码(这里我们设置一个数组,里面有两个数组):
$_SESSION['cart'] = array(
0 => array( "productid" => 6, "productname" => "solexfiets6", "price" => 12.99 ),
1 => array( "productid" => 5, "productname" => "solexfiets5", "price" => 16.99 )
);
print_r($_SESSION[‘cart']);
你会得到这个输出:
Array
(
[0] => Array
(
[productid] => 6
[productname] => solexfiets6
[price] => 12.99
)
[1] => Array
(
[productid] => 7
[productname] => solexfiets5
[price] => 16.99
)
)
运行此代码:
$_SESSION['cart'] = array(
0 => array( "productid" => 6, "productname" => "solexfiets6", "price" => 12.99 ),
1 => array( "productid" => 7, "productname" => "solexfiets5", "price" => 16.99 )
);
//this loop iterates twice because $_SESSION[‘cart’] has two ‘members’ - so we know we are seeing one product for every loop iteration
foreach($_SESSION['cart'] as $id => $value)
{
echo 'Product Name ' . $value["productname"] . '<br/>';
echo 'Product ID ' . $value["productid"] . '<br/>';
echo 'Product Price ' . $value["price"] . '<br/>';
echo '<br/>';
}
您将获得此输出:
Product Name solexfiets6
Product ID 6
Product Price 12.99
Product Name solexfiets5
Product ID 7
Product Price 16.99
它的示例不起作用(您当前的输入用作示例)
//this is what your cart is currently set to
$_SESSION['cart'] = array(
"productid" => "6",
"productname" => "solexfiets6",
"price" => "12.99",
0 => "5",
1 => "solexfiets5",
2 => "16.99"
);
//this loop (which is like your loop) iterates 6 times because there are 6 items in the $_SESSION[‘cart’] array, i.e. it is not executing per-product as you expect.
foreach($_SESSION['cart'] as $id => $value)
{
echo 'the value is: ' . $value . '<br/>';
}
将输出
the value is: 6
the value is: solexfiets6
the value is: 12.99
the value is: 5
the value is: solexfiets5
the value is: 16.99
总之,输入数组的结构是不正确的,它需要是一个产品数组的数组,而不仅仅是一维的数组值,如果它应该以你想要的方式工作。
调试此类内容的一些常规技巧
1。print_r
非常酷(如果你查看页面来源,你就会明白为什么 - 它会打印结构良好的东西)
2.循环中的$value
和$id
是你关心的,而不是会话 - 你不应该在循环中var_dumping你的会话,因为它是循环的常量 - 你想看看是什么$value
和$id
是(因为这些会改变每次迭代)
foreach
循环将始终迭代count($n)
次:
foreach ($n as $something)
{
}
换句话说 - 如果你有$n
进入foreach循环 - 你可以通过查看count($n)
来查看它会迭代多少项 - 在你的情况下,count($_SESSION['cart'])
是6,但你期待2 - 所以你会立刻知道输入数据有问题。
对不起,我不能给你解决方案来解决你的问题,因为问题在于输入,但输入非常接近正确。你拥有会话变量中的所有内容,只需要使用正确的结构进行格式化。我希望我已帮助您了解数据和foreach
循环如何使用示例:)