2017-02-12 4 views
-1

Прежде всего, я видел несколько потоков и вопросов. но все же я застрял на нем. так что я делаюОбновление массива сеансов в php на странице submit in php

Во-первых, я заполняю свою сессионный массив через это на добавить в корзину страница

 $_SESSION['food_id']=$get_id; 
     $_SESSION['food_name']=$get_name; 
     $_SESSION['food_price']=$get_price; 
     $_SESSION['food_image']=$get_image; 
     $_SESSION['food_quantity']=1; 
     $_SESSION['food_discount']=$get_discount; 

     $cart = array (
     'food_id' => $_SESSION['food_id'], 
     'food_name' => $_SESSION['food_name'], 
     'food_price'=> $_SESSION['food_price'], 
     'food_image'=> $_SESSION['food_image'], 
     'food_quantity' => $_SESSION['food_quantity'], 
     'food_discount' => $_SESSION['food_discount'] 
     ); 

     $_SESSION['cart'][] = $cart; 

Тогда я извлечения и отображения телегу массив на странице cart.php через это

   $total=""; 
       $item_total=""; 
       $item_discount=""; 
       $item_total_quantity=""; 
       $order_total=""; 
       $total_discount=""; 
       if(isset($_SESSION['cart'])){ 
       foreach ($_SESSION['cart'] as $key => $item) { 

        //Get Cart Subtotal Before calculating discount 
         $total += $item['food_price']; 

         $item_total_quantity=$item['food_price']*$item['food_quantity']; 

         //Get Item discount 
         $item_discount = ($item['food_discount']/100)*$item_total_quantity; 
         //Get Item total 
        $item_total=$item_total_quantity-$item_discount; 
        //Get total quantity 
         $food_quantity=$item['food_total_quantity']; 

         $order_total += $item_total; 
         $total_discount += $item_discount; 
       ?> 
       <tr> 
        <td><a href="menu_single.php?q=<?php echo $item['food_id']; ?>"><img src="<?php echo 'img/menu/'.$item['food_image']; ?>" alt=""><?php echo $item['food_name']; echo $key; ?></a> </td> 
        <td><?php echo $item['food_price']; ?> $</td> 
        <td> 
        <span class="total"> <?php echo $item['food_quantity']; ?></span> 
         <!-- End input group minus & plus --></td> 
        <td><?php echo $item['food_discount']; ?> %</td> 
        <td><span class="total"> <?php echo $item_total; ?> $ </span> <a class="pull-right" href="#"><i class="fa fa-times"></i></a></td> 
       </tr> 
       <?php }} ?> 

Теперь я застрял, когда количество товара изменился и кнопка нажата после заднего мне нужно количества обновлений на основе этого значения. То, что я делаю в настоящее время.

if(isset($_POST['apply']{ 
     foreach ($_SESSION['cart'] as $key => $item) { 
      //Updating Quantity 
       $item['food_quantity']=$_POST['quantity']; 
} 

Но я не получаю нужный мне результат Всегда отображать предыдущее количество, которое установлено равным 1. Я собираюсь ударить головой о стену прямо сейчас. Любые предложения будут полезны.

Редактировать # 1 После прочтения ответа Ренди Эко Прастиё. Теперь я могу обновить массив сеанса, но он обновляет только 1 пункт здесь мой код

     if(isset($_POST['apply'])){ 
         //$cart[] = $_SESSION['cart']; 
        foreach ($_SESSION['cart'] as $key => $item) { 
        echo $_POST['key']; 
        $_SESSION['cart'][$_POST['key']]['food_quantity'] = $_POST['quantity']; 
        //Get Cart Subtotal Before calculating discount 
         $total += $item['food_price']; 

         $item_total_quantity=$item['food_price']*$item['food_quantity']; 

         //Get Item discount 
         $item_discount = ($item['food_discount']/100)*$item_total_quantity; 
         //Get Item total 
        $item_total=$item_total_quantity-$item_discount; 
        //Get total quantity 
         $food_quantity=$item['food_total_quantity']; 

         $order_total += $item_total; 
         $total_discount += $item_discount; 

         echo "<pre>"; 
         print_r($_SESSION['cart']); 
         echo "</pre>"; 
        } 
        } 

Вот print_r результат

Array 
(
    [0] => Array 
     (
      [food_id] => 5 
      [food_name] => New Item 
      [food_price] => 14 
      [food_image] => dishes2.jpg 
      [food_quantity] => 9 
      [food_discount] => 10 
      [food_total_quantity] => 21 
     ) 

    [1] => Array 
     (
      [food_id] => 5 
      [food_name] => New Item 
      [food_price] => 14 
      [food_image] => dishes2.jpg 
      [food_quantity] => 1 
      [food_discount] => 10 
      [food_total_quantity] => 21 
     ) 

    [2] => Array 
     (
      [food_id] => 5 
      [food_name] => New Item 
      [food_price] => 14 
      [food_image] => dishes2.jpg 
      [food_quantity] => 1 
      [food_discount] => 10 
      [food_total_quantity] => 21 
     ) 

) 

Array 
(
    [0] => Array 
     (
      [food_id] => 5 
      [food_name] => New Item 
      [food_price] => 14 
      [food_image] => dishes2.jpg 
      [food_quantity] => 9 
      [food_discount] => 10 
      [food_total_quantity] => 21 
     ) 

    [1] => Array 
     (
      [food_id] => 5 
      [food_name] => New Item 
      [food_price] => 14 
      [food_image] => dishes2.jpg 
      [food_quantity] => 1 
      [food_discount] => 10 
      [food_total_quantity] => 21 
     ) 

    [2] => Array 
     (
      [food_id] => 5 
      [food_name] => New Item 
      [food_price] => 14 
      [food_image] => dishes2.jpg 
      [food_quantity] => 1 
      [food_discount] => 10 
      [food_total_quantity] => 21 
     ) 

)  

Array 
    (
     [0] => Array 
      (
       [food_id] => 5 
       [food_name] => New Item 
       [food_price] => 14 
       [food_image] => dishes2.jpg 
       [food_quantity] => 9 
       [food_discount] => 10 
       [food_total_quantity] => 21 
      ) 

     [1] => Array 
      (
       [food_id] => 5 
       [food_name] => New Item 
       [food_price] => 14 
       [food_image] => dishes2.jpg 
       [food_quantity] => 1 
       [food_discount] => 10 
       [food_total_quantity] => 21 
      ) 

     [2] => Array 
      (
       [food_id] => 5 
       [food_name] => New Item 
       [food_price] => 14 
       [food_image] => dishes2.jpg 
       [food_quantity] => 1 
       [food_discount] => 10 
       [food_total_quantity] => 21 
      ) 

    ) 
+0

* "Любые предложения, было бы полезно" * - Сообщения об ошибках, var_dump, эхо, источник HTML, и т. д. –

+0

Я не вижу 'session_start()' в любом месте, поэтому я должен спросить, есть ли у вас один скрипт – RiggsFolly

+0

@RiggsFolly 99 раз из 100, они говорят, что они начали его; Удивлены? Редактировать: Я не. –

ответ

1

Массивы не передаются по ссылке в foreach ($_SESSION['cart'] as $key => $item), поэтому, когда вы установили $item['food_quantity'] = $_POST['quantity'] внутри цикла, $_SESSION['cart'][$key]['food_quantity'] не изменяется. Есть 2 решения, непосредственно установите $_SESSION['cart'][$key]['food_quantity'] или передайте $item в $_SESSION['cart'] по ссылке.

Установите $_SESSION['cart'][$key]['food_quantity'] непосредственно:

if (isset($_POST['apply'] { 
    foreach ($_SESSION['cart'] as $key => $item) { 
     // Updating quantity. 
     $_SESSION['cart'][$key]['food_quantity'] = $_POST['quantity']; 
    } 
} 

Пропустите $item в $_SESSION['cart'] по ссылке:

if (isset($_POST['apply'] { 
    foreach ($_SESSION['cart'] as $key => &$item) { 
     // Updating quantity. 
     $item['food_quantity'] = $_POST['quantity']; 
    } 
} 
+0

Если вы используете pass by reference, обратите внимание на разницу между 'foreach ($ _SESSION ['cart'] как $ key => $ item)' и 'foreach ($ _SESSION ['cart'] как $ key => & $ item) '(добавить' & 'перед' $ item', что означает '$ item' передается по ссылке' $ _SESSION ['cart'] [$ key] '). –

+0

Да, я пробовал это, и он работает. но когда я обновляю страницу, она работает. любая идея или я бы опубликовал весь мой код телеги? –

+0

Что вы имеете в виду, но когда я обновляю страницу, она работает? –

 Смежные вопросы

  • Нет связанных вопросов^_^