2016-02-27 44 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

相關問題