2016-02-27 182 views
2

这是我第一次发布一些关于stackoverflow的东西。我是一个比较新的程序员,喜欢Php,我有这个任务,我必须做一个购物车我的foreach返回警告:非法字符串偏移量'productname'

我很抱歉,如果这是混乱或无法做出。我一直在寻找这些论坛上约2天,我真的不能发现自己一个搜索解决方案

现在我的问题是如下

我从数据库中获取自己的产品数据 - >然后我点击一个产品 - >它进入一个页面,它将productid,productname和price添加到array_push的会话中,然后它返回到与购物车所在的页面相同的页面(购物车与产品线在同一页上)

现在我收到了会议很好,并与var转储我可以看到,数组完全填充即使在foreach。

我想要做的就是分别显示productid/productname/price。

阵列(6){[ “的productid”] =>串(1) “6”[ “产品名”] =>串(11) “solexfiets6”[ “价格”] =>串( 5) “12.99”[0] =>串(1) “5”[1] =>串(11) “solexfiets5”[2] =>串(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/>'; 
} 

我我的产品发送到这个页面的方式是通过发送的产品ID,产品名称和价格当有人点击为了add_to_cart.php然后URL做到这一点

<?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

我想我知道问题是什么,但首先,你可以请print_r($ value)在你的循环(你有var_dump )并将输出发布到问题中:) - 当你看到输出时,这甚至可以回答你的问题。 – IaMaCuP

+0

非常感谢您的协助 我已经添加了print_r($ value),现在它将整个会话都这样。对不起,我仍然不明白问题是什么! –

+0

$ value不是一个数组...它会像'$ _SESSION ['cart'] [“productname”]一样工作' – devpro

回答

0

OK对不起,这里是你的问题 -

您正在遍历购物车,因为它包含多个项目,而实际上它只包含一个项目。

我会给你整个例子来告诉你:

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是(因为这些改变每个迭代)

A foreach循环将始终迭代count($n)次数其中:

foreach ($n as $something) 
{ 

} 

换句话说 - 如果你有$n进入foreach循环 - 你可以看到它有多少项目通过看count($n)迭代 - count($_SESSION['cart'])在你的情况下,为6,但你期待2 - 所以你会立即知道输入数据有问题。

对不起,我不能给你解决方案,将解决您的问题,因为问题是与输入,但输入是非常接近正确的。您拥有会话变量中的所有内容,只需使用正确的结构格式化即可。我希望我已经帮助你了解数据& foreach循环如何与示例:)

+0

非常感谢你的反应,我会看你的例子,并尝试编辑它的工作。 这是一个巨大的帮助谢谢( –

+0

)我想问你一个问题,如果可能的话,我也发送我的数据太多通过array_push $ _GETS productid,产品名称和价格数据。我可以发送它吗? –

+0

我想你需要提出一个单独的问题和全部细节,以便真正理解你在做什么 - 我猜你的方法并不完美,因为你的会话变量的价值。 – IaMaCuP

相关问题