2012-02-25 64 views
-1

我目前能夠添加一個產品的數量或在我的購物車中減少一個但我試圖添加一個方法,我可以提交一個數量,我輸入到一個文本域。php多個購物車方法

要增加一個,這是代碼的主要部分。它位於索引頁面。

 echo '<a href="cart.php?increase1='.$uniquenum.'"> Plus 1</a>'; 

這是購物車頁面上的代碼來獲取uniquenum和行動:

 if (isset($_GET['increase1'])) { 
     $result = 'cart_' . $_GET['increase1']; 
     $_SESSION[$result] = isset($_SESSION[$result]) ? $_SESSION[$result] + 1 : 0; 
     } 

我怎麼會從索引頁到購物車頁面使用表格和後拿到$ uniquenum變量或獲取請求。如果我能做到這一點,我可以更新數量。提前謝謝了。

+0

,而不是讓你應該使用POST方法。 否則先搜索爬蟲找到你的店鋪將是第一個購買你所有的股票。 – 2012-02-25 13:48:44

回答

0

我建議你把屬於車邏輯的所有代碼到一個類它自己的。然後,您可以使用它作爲代碼中的門面:

// initialize session for Cart 
$_SESSION['cart'] || $_SESSION['cart'] = new Cart(); 

// fetch cart from session 
$cart = $_SESSION['cart']; 

然後通過提供車,提供你正在尋找的功能,無論是在一個簡單的形式方法:

$cart->increadeByOne($item); 

或者給予更加分化的水平的封裝完全訪問:

$cart->getItem($item)->getQuantity()->increaseBy($number); 

最後的這個例子似乎是臃腫,但一般它的好,有一個基類Cart這樣你就可以貝特處理並測試您的操作。

然後,您可以綁定與您的GET請求:

if (isset($_GET['increase1'])) 
{ 
    $cart->getItem($_GET['increase1'])->getQuantity->increaseByOne(); 
} 

有些粗糙車和數量佈局:

Class CartItemQuantity 
{ 
    private $item; 
    private $quantity = 0; 

    public function __construct(CartItem $item) 
    { 
     $this->item = $item; 
    } 

    public function increaseByOne() 
    { 
     $this->increaseBy(1); 
    } 
    public function decreaseByOne() 
    { 
     $this->quantity = max(0, $this->quantity - 1); 
    } 
    public function increaseBy($number) 
    { 
     $this->quantity = max(0, $this->quantity + $number); 
    } 
    public function getQuantity() 
    { 
     return $this->quantity; 
    } 
    public function setQuantity($quantity) 
    { 
     if (is_string($quantity) && ctype_digit($quantity)) 
     { 
      $quantity = (int) $quantity; 
     } 

     if (!is_int($quantity)) 
     { 
      throw new InvalidArgumentException('Not a valid quantity (%s).', $quantity); 
     } 

     $this->quantity = max(0, $quantity); 
    } 
} 

Class CartItem 
{ 
    private $quantity; 

    ... 

    public function __construct() 
    { 
     $this->quantity = new CartItemQuantity($this); 
     ... 
    } 

    public function getQuantity() 
    { 
     return $this->quantity; 
    } 
} 

Class CartItems 
{ 
    ... 

    /** 
     * @return CartItem 
     */ 
    public function getItem($item) 
    { 
     ... 

     return $item; 
    } 
} 

Class Cart 
{ 
    /** 
     * @var CartItems 
     */ 
    private $items; 
    ... 
    public function increaseByOne($item) 
    { 
     $this->items->getItem($item)->getQuantity()->increaseByOne(); 
    } 

    /** 
     * @return CartItem 
     */ 
    public function getItem($item) 
    { 
     return $this->items->getItem($item); 
    } 
} 
-1
<form name="add_to_cart" method="get" action="cart.php"> 
    <label for="uniquenum">Quantity: </label> 
    <input type="text" name="uniquenum" /> 
    <input type="submit" value="Add to cart" /> 
</form> 

在服務器端:

if (isset($_GET['uniquenum'])) { 
    $uniquenum = $_GET['uniquenum']; 
    /* Important! Check if it is an integer */ 
    if(is_int($uniquenum)) { 
    $_SESSION[$result] = isset($_SESSION[$result]) ? $_SESSION[$result] + $uniquenum : 0; 
    } else { 
     echo "Invalid input!"; 
    } 
} 
+0

小心解釋downvote? – check123 2012-02-25 13:44:46

-1
<form action='cart.php' method='GET'> 
Input quantity:<br/> 
<input type='text' name='increase1'><br/> 
<input type='submit' value='Increase'/> 
</form> 
+0

如何評論downvote? – heximal 2012-02-25 15:44:57

0
// next line breaks for formatting only, take them out 
echo '<form action="cart.php" method="get"> 
    <input type="hidden" name="increasewhat" value="'.$uniquenum.'"> 
    <label for="increaseby">Increase by</label> 
    <input type="text" name="increaseby" value="1"> 
    <input type="submit" name="increaseyes" value="Yes!"> 
    </form>'; 

//real linebreaks from here, parameters assumed to be validated 
$result = 'cart_' . $_GET['increasewhat']; 
$_SESSION[$result] = (isset($_SESSION[$result]) ? $_SESSION[$result]:0)+$_GET['increaseby']; 
+0

嗯,當我嘗試我得到一個SQL錯誤 – user1060187 2012-02-25 14:20:10

+0

迴應你的SQL語句併發布它 – 2012-02-25 14:23:52

+0

我寧可不要在這裏發佈太多的代碼。你有MSN嗎?或者我可以給你發電子郵件? – user1060187 2012-02-25 14:30:52