2013-03-23 1 views
1

Я создаю корзину покупок, в которой есть четыре кнопки, чтобы продолжить покупки, очистить корзину, обновить корзину и заказать заказ. У меня возникла проблема с сеансами, например, когда я нажимаю обновление кнопка корзина впадением моя корзина Räter то обновление его любой помощи, показав мне, что когда я делаю это Rong здесь мой кодсоздание корзины покупок и обновление значений в ней с помощью php

<?php 
    include("includes/db.php"); 
    include("includes/functions.php"); 

    if(isset($_REQUEST['command'])=='delete' && $_REQUEST['pid']>0){ 
     remove_product($_REQUEST['pid']); 
    } 
    elseif(isset($_REQUEST['command'])=='clear'){ 
     $_SESSION["cart"] = array(); 
    } 
    elseif($_REQUEST['command']=='update'){ 
     $max=count($_SESSION['cart']); 
     for($i=0;$i<$max;$i++){ 
      $pid=$_SESSION['cart'][$i]['productid']; 
      $q=intval($_REQUEST['product'.$pid]); 
      if($q>0 && $q<=999){ 
       $_SESSION['cart'][$i]['qty']=$q; 

      } 
      else{ 
       $msg='Some proudcts not updated!, quantity must be a number between 1 and 999'; 
      } 
     } 
    } 

?> 

здесь мой JavaScript

function update_cart(){ 
    document.form1.command.value='update'; 
    document.form1.submit(); 
} 

вот мой код

<?php 
      if(is_array($_SESSION['cart'])){ 
       echo '<tr bgcolor="#FFFFFF" style="font-weight:bold"><td>Serial</td><td>Name</td><td>Price</td><td>Qty</td><td>Amount</td><td>Options</td></tr>'; 
       $max=count($_SESSION['cart']); 
       for($i=0;$i<$max;$i++){ 
        $pid=$_SESSION['cart'][$i]['productid']; 
        $q=$_SESSION['cart'][$i]['qty']; 
        $pname=get_product_name($pid); 
        if($q==0) continue; 
      ?> 
        <tr bgcolor="#FFFFFF"><td><?php echo $i+1?></td><td><?php echo $pname?></td> 
        <td>$ <?php echo get_price($pid)?></td> 
        <td><input type="text" name="product<?php echo $pid?>" value="<?php echo $q?>" maxlength="3" size="2" /></td>      
        <td>$ <?php echo get_price($pid)*$q?></td> 
        <td><a href="javascript:del(<?php echo $pid?>)">Remove</a></td></tr> 
      <?php     
       } 
      ?> 
       <tr><td><b>Order Total: $<?php echo get_order_total()?></b></td><td colspan="5" align="right"><input type="button" value="Clear Cart" onclick="clear_cart()"><input type="button" value="Update Cart" onclick="update_cart()"><input type="button" value="Place Order" onclick="window.location='billing.php'"></td></tr> 
      <?php 
      } 
      else{ 
       echo "<tr bgColor='#FFFFFF'><td>There are no items in your shopping cart!</td>"; 
      } 
     ?> 
+0

Вопрос: 2-й раз? –

+0

Да, теперь кнопка обновления не работает. Sir – suhail

+0

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

ответ

1

isset($_REQUEST['command']) либо true, либо false. Сравнивая это значение с 'delete', получаем то же значение, что и isset($_REQUEST['command']), потому что 'delete' отлита для boolean true для сравнения с другим булевым.

В частности, в результате

isset($_REQUEST['command'])=='clear' 

является всегда такой же, как

isset($_REQUEST['command'])=='update' 

поэтому, если условие второго elseif имеет место, так что делает состояние первого elseif. Поэтому тело второго elseif никогда не выполняется (вместо этого выполняется тело первого elseif).

+0

Очень верно, и в случае, опубликованном, ничего, кроме опции delete, никогда не будет вызвана. Недавно ОП опубликовал другой вопрос ... см. Http://stackoverflow.com/questions/15584300/how-to-create-an-online-shopping-cart-in-php/15584517?noredirect=1#comment22096012_15584517 ... и я сделал ошибочное предположение, что я имел дело с тем же кодом, который он опубликовал 10 минут назад в этом. Спасибо за головы. – Radiotrib

+0

Опция удаления пропускается, если '$ _REQUEST ['pid'] <= 0'. – Oswald

0

Несколько пунктов. Во-первых, я не вижу нигде в коде, где вы обычно добавляете какие-либо продукты в свой массив сеансов. Это означает, что вы никогда не будете иметь какие-либо продукты, чтобы update.Also для цикла

$max=count($_SESSION['cart']); 
    for($i=0;$i<$max;$i++){ 

никогда не начнется, потому что в исходном состоянии $ макс устанавливается в 0 и условие ограничивающего контура составляет $ макс < 0 т.е. 0 < 0 ..

Ваша первоначальная предпосылка в корне неверна, если вы пытаетесь обновить только количества, поскольку в сеансовой тележке никогда не будет каких-либо продуктов для обновления, и из решения к первому вопросу, который вы подняли, установка $ _SESSION ['cart'] в массив() всегда гарантирует пустую корзину _SESSION.

Эти строки:

elseif(isset($_REQUEST['command'])=='clear'){ 
    unset($_SESSION['cart']); 
} 

проваливается с неопределенной ошибки на отключенном() линии, если корзинка изначально не определено. См. Ответ на свой первый вопрос для его разработки.

В вашем коде страницы дисплея в верхней части у вас есть

 if(is_array($_SESSION['cart'])){ 

Если вы реализовали решение «ясный» вопрос, это всегда будет возвращать верно, так как вы инициализацию телегу в пустой массив. (BTW - пожалуйста, обновите приведенный выше код, чтобы отразить «четкое» решение с этого вопроса)

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

Если, с другой стороны, это омной один из набора сценариев, и если он ожидает, что тележка будет заполнена другой, прежде чем она что-нибудь сделает, вам нужно будет объяснить, Конечно, $ max не равен нулю и ничего не делает, если это так.

$max=count($_SESSION['cart']); 
    if ($max > 0) { 
     for($i=0;$i<$max;$i++){ 
     $pid=$_SESSION['cart'][$i]['productid']; 
     $q=intval($_REQUEST['product'.$pid]); 
     if($q>0 && $q<=999){ 
      $_SESSION['cart'][$i]['qty']=$q; 
     } else { 
      $msg='Some proudcts not updated!, quantity must be a number between 1 and 999'; 
     } 
     } 
    } else { 
     // handle the error your way 
    } 
+0

См. [Свободное сравнение с ==] (http://www.php.net/manual/en/types.comparisons.php#types.comparisions-loose) для того, что происходит, когда вы сравниваете логическое значение и строку в PHP. – Oswald

+0

Извините, Освальд. Я пропустил это: ... ... тот факт, что isset() использовался вообще, был ошибкой. но, конечно, если isset() возвращает TRUE, и я сравниваю его с 'string', используя ==, он вернет TRUE значение для условия, но не если я использую === ... мой плохой. – Radiotrib

+0

вряд ли стоит понизить голос, хотя – Radiotrib

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