挑选价格后更新运费(PHP)

时间:2012-05-11 23:16:05

标签: php shopping-cart

我正在为我的网站购买购物车。在购物车区域,我从数据库中提取运输详细信息,包括价格取决于邮政编码。当用户点击“更新购物车”时。 我想用运费来更新总额。如果有人能指出我正确的方向来解决这个问题。

这是我显示购物车的功能。

function showCart() {
$cart = $_SESSION['cart'];
$zip = $_SESSION['zipcode'];
if ($cart) {

    $items = explode(',',$cart);
    $contents = array();
    foreach ($items as $item) {
        $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
    }
    $output[] = '<form action="cart.php?action=update" method="post" id="cart">';
    $output[] = '<table>';
    foreach ($contents as $id=>$qty) {
        $sql = 'SELECT * FROM products WHERE id = '.$id;
        $result = mysql_query($sql) or die(mysql_error());
        $row = mysql_fetch_array($result, MYSQL_ASSOC);
        extract($row);
        $output[] = '<tr>';
        $output[] = '<td><a href="cart.php?action=delete&id='.$id.'" class="r">Remove</a></td>';
        $output[] = '<td>'.$title.' by '.$author.'</td>';
        $output[] = '<td>$'.$price.'</td>';
        $output[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
        $output[] = '<td>$'.($price * $qty).'</td>';
        $total += $price * $qty;
        $output[] = '</tr>';
    }
    $output[] = '</table>';

    $sql  = 'SELECT * FROM zipcodes WHERE zipcode = '.$zip;
        $result = mysql_query($sql) or die(mysql_error());
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)){

        $output[] = '<label>Price: </label><select name="delivery" id="delivery" class="long-field">';
        $output[] = '<option value="">Please Select</option>';
        $output[] = '<option value='.$row['free_dev'].'>$'.$row['free_dev'].'</option>';
        $output[] = '<option value='.$row['next_day_dev'].'>$'.$row['next_day_dev'].'</option>';
        $output[] = '</select>';
        }

    $output[] = '<p>Delivery Charge: <strong>$'.$delivery.'</strong></p>';          
    $output[] = '<p>Grand total: <strong>$'.$total.'</strong></p>';
    $output[] = '<div><button type="submit">Update cart</button></div>';
    $output[] = '</form>';
} else {
    $output[] = '<p>You shopping cart is empty.</p>';
}
return join('',$output);

}

这是更新部分通过cart.php

case 'update':
if ($cart) {
    $newcart = '';
    foreach ($_POST as $key=>$value) {
        if (stristr($key,'qty')) {
            $id = str_replace('qty','',$key);
            $items = ($newcart != '') ? explode(',',$newcart) : explode(',',$cart);
            $newcart = '';
            foreach ($items as $item) {
                if ($id != $item) {
                    if ($newcart != '') {
                        $newcart .= ','.$item;
                    } else {
                        $newcart = $item;
                    }
                }
            }
            for ($i=1;$i<=$value;$i++) {
                if ($newcart != '') {
                    $newcart .= ','.$id;
                } else {
                    $newcart = $id;
                }
            }
        }
    }
}
$cart = $newcart;
break;

谢谢。任何帮助是极大的赞赏! PS我正在使用这里的购物车教程http://v3.thewatchmakerproject.com/journal/276/

2 个答案:

答案 0 :(得分:0)

鉴于您提供的代码对此问题是完全不可知的,因此不清楚您在哪里遇到问题。但是为了让你开始:

case 'update':
if ($cart) {
    $newcart = '';
    foreach ($_POST as $key=>$value) {
        ... //same thing as before
    }
    $newcart .= $shipping_price; //or however you're encoding this. It's unclear.
}
$cart = $newcart;
break;

并取代:

$output[] = '<p>Grand total: <strong>$'.$total.'</strong></p>';

使用:

$output[] = '<p>Grand total: <strong>$'.$total+ $shipping_price.'</strong></p>';

答案 1 :(得分:0)

如果我是你,我会搜索一个PHP类购物车,该代码让我想起了一些PHP4(它应该是自2005年的例子以来)。

我没有找到一个很好的链接示例,我将尝试描述下面的想法。

你创建了两个类,一个代表项目,另一个代表购物车(第一个可以只是来自带有mysql_fetch_object的数据库的结果,或类似Pdo的东西,它将把它变成一个来自php的stdClass

class someItem 

{     public $ id;     public $ qty;     公共价格;     public $ totalprice;

public function __get($var)
{
    if ($var == 'totalPrice') {
        return $this->price*$this->qty;
    }

    return $this->$var;
}

}

类ShoppingCart {

private $items;

public function addItem($someItem)
{
    if (array_key_exists($someItem->id, $this->items)) {
        $this->items[$someItem->id]->qty = $this->items[$someItem->id]->qty + $someItem->qty;
    } else {
        $this->items[$someItem->id] = $someItem;
    }
}

public function removeItem($someItem)
{
    unset($this->items[$someItem->id]);
}

public function getTotal()
{
    $total = 0;
    foreach($this->items as $item){
        $total += $item->totalPrice;
    }
    return $total;
}

}

将信息序列化到会话中 $ _SESSION ['user'] ['cart'] =序列化($ Shoppingcart);

在用户登录时设置新的购物车,在他退出时清理它。 在所有内容之前添加和删除项目

//根据您的HTML表单进行操作和处理的任何操作 foreach($ _POST ['cart'] as $ itemId){   $ ItemObj = $ db-&gt; getitemAsObject($ itemId); //使用PDO或其他东西   $ shoppingcart-&GT;的addItem($ itemObj); }

发布后将购物车重新保存到会话中 $ _SESSION ['user'] ['cart'] =序列化($ Shoppingcart);