-2

私は自分のサイトのショッピングカートに取り組んでいます。カート エリアでは、郵便番号に応じた価格を含む配送の詳細をデータベースから取得します。ユーザーが「カートを更新」をクリックしたとき。送料で合計を更新しようとしています。誰かがこれを理解する正しい方向に私を向けることができれば.

これはカートを表示する私の機能です。

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/

4

2 に答える 2

0

私があなただったら、PHP クラスのショッピング カートを検索します。そのコードは、PHP4 を思い起こさせます (この例は 2005 年のものなので、そうなるはずです)。

例の適切なリンクが見つかりませんでした。以下にアイデアを説明します。

2 つのクラスを作成し、1 つはアイテムを表し、もう 1 つはショッピング カートを表します (最初のクラスは、mysql_fetch_object を使用した DB の結果または Pdo のようなもので、php の stdClass に変換されます)。

class someItem 

{ public $id; パブリック $qty; 公開価格; パブリック $totalprice;

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

    return $this->$var;
}

}

クラスショッピングカート{

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'] = serialize($Shoppingcart);

ユーザーのログイン時に新しいショッピング カートを設定し、ログアウト時にそれを削除します。アイテムの追加と削除はすべての前に行うことができます

// どんな操作でも、HTML フォームに従って処理します foreach ($_POST['cart'] as $itemId ) { $ItemObj = $db->getitemAsObject($itemId); // PDO などを使用 $shoppingcart->addItem($itemObj); }

post $_SESSION['user']['cart'] = serialize($Shoppingcart); の後にショッピング カートをセッションに再保存します。

于 2012-05-11T23:50:01.823 に答える
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>';
于 2012-05-11T23:36:04.910 に答える