2016-02-27 3 views
2

Это мое первое время, когда-либо отправляли что-то в stackoverflow. Я относительно новый программист в подобных Php, и у меня есть это задание, где я должен сделать корзину.My foreach returns Предупреждение: Недопустимое смещение строки 'productname'

Прошу прощения, если это грязно или не может быть оформлено. Я искал на этих форумах в течение 2 дней, и теперь я не могу реально найти себе SOLUTIO

Теперь моя проблема заключается в следующем

Я получаю мои данные продукта из базы данных -> затем я нажимаю на продукте -> он переходит на страницу, где он добавляет productid, productname и цену на сеанс с помощью массива array_push, а затем возвращается на ту же страницу, где находится тележка (тележка находится на той же странице, что и в товарной строке).

Теперь я получил сеанс просто отлично и с var dumps я вижу, что массив полностью заполнен даже в foreach.

Все, что я хочу сделать, это показать productid/productname/price seperatly.

массива (6) {[ "ProductID"] => строка (1) "6" [ "PRODUCTNAME"] => строка (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/>'; 
} 

Путь я посылаю свою продукцию на этой странице, отправив PRODUCTID, PRODUCTNAME и цену в URL, когда кто-то нажимает на заказ, чтобы add_to_cart.php, который затем делает этот

<?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 (значение $) в свой цикл (где у вас есть var_dump) и опубликуйте вывод в вопрос, пожалуйста :) - это может даже ответить на ваш вопрос, когда вы увидите результат. – IaMaCuP

+0

Большое спасибо за помощь Я добавил print_r (значение $), и теперь он ставит весь сеанс таким образом. Извините, я все еще не понимаю, в чем проблема! –

+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 собирается в цикл Еогеасп - вы можете видеть, сколько элементов будет перебирать глядя на count($n) - в вашем случае, count($_SESSION['cart']) было 6, но вы ожидали 2 - так что вы сразу узнали бы, что что-то не так с входными данными.

Прошу прощения, я не могу дать вам решение, которое исправит вашу проблему, поскольку проблема связана с входом, однако этот вход очень близок к правильному. У вас есть все в переменной сеанса, его просто нужно отформатировать с помощью правильной структуры.Надеюсь, я помог вам разобраться в данных &, как foreach работает с примерами :)

+0

Большое вам спасибо за эту реакцию. Я посмотрю ваши примеры и попытаюсь отредактировать ее для ее работы. Это была огромная помощь спасибо (: –

+0

Я хотел бы задать вам еще один вопрос. Я пошлю свои данные тоже на этой странице через массив_push, который $ _GETS содержит данные о продукте, продукте и цене. я могу отправить его? –

+0

Я думаю, вам нужно будет задать отдельный вопрос с полными подробностями, чтобы действительно понять, что вы делаете. Я предполагаю, что ваш подход не идеален, учитывая ценность вашей переменной сеанса. – IaMaCuP