문제

나는 얼마 전에 본 튜토리얼에서 쇼핑 카트 스크립트를 사용하고 있으며, 주 (Pennsylvania)의 판매 세를 계산하기 위해 수정해야합니다. 나는 국가를 추출하고, 누군가가 주 속도를 쓰고,이 상태에 대한 판매 세에 의해 하위 운동 (배송이 추가되기 전)을 곱한 후 펜실베이니아 또는 PA와 비교하고 싶다. . 어떻게해야합니까? Grand Total에 대한 계산을 수행하는 스크립트는 다음과 같습니다.

<?php
require_once 'config.php';

/*********************************************************
*                 CHECKOUT FUNCTIONS 
*********************************************************/
function saveOrder()
{
    $orderId       = 0;
    $shippingCost  = 5;
    $requiredField = array('hidShippingFirstName', 'hidShippingLastName', 'hidShippingAddress1', 'hidShippingCity', 'hidShippingPostalCode',
                           'hidPaymentFirstName', 'hidPaymentLastName', 'hidPaymentAddress1', 'hidPaymentCity', 'hidPaymentPostalCode');

    if (checkRequiredPost($requiredField)) {
        extract($_POST);

        // make sure the first character in the 
        // customer and city name are properly upper cased
        $hidShippingFirstName = ucwords($hidShippingFirstName);
        $hidShippingLastName  = ucwords($hidShippingLastName);
        $hidPaymentFirstName  = ucwords($hidPaymentFirstName);
        $hidPaymentLastName   = ucwords($hidPaymentLastName);
        $hidShippingCity      = ucwords($hidShippingCity);
        $hidPaymentCity       = ucwords($hidPaymentCity);

        $cartContent = getCartContent();
        $numItem     = count($cartContent);

        // save order & get order id
        $sql = "INSERT INTO tbl_order(od_date, od_last_update, od_shipping_first_name, od_shipping_last_name, od_shipping_address1, 
                                      od_shipping_address2, od_shipping_phone, od_shipping_state, od_shipping_city, od_shipping_postal_code, od_shipping_cost,
                                      od_payment_first_name, od_payment_last_name, od_payment_address1, od_payment_address2, 
                                      od_payment_phone, od_payment_state, od_payment_city, od_payment_postal_code)
                VALUES (NOW(), NOW(), '$hidShippingFirstName', '$hidShippingLastName', '$hidShippingAddress1', 
                        '$hidShippingAddress2', '$hidShippingPhone', '$hidShippingState', '$hidShippingCity', '$hidShippingPostalCode', '$shippingCost',
                        '$hidPaymentFirstName', '$hidPaymentLastName', '$hidPaymentAddress1', 
                        '$hidPaymentAddress2', '$hidPaymentPhone', '$hidPaymentState', '$hidPaymentCity', '$hidPaymentPostalCode')";
        $result = dbQuery($sql);

        // get the order id
        $orderId = dbInsertId();

        if ($orderId) {
            // save order items
            for ($i = 0; $i < $numItem; $i++) {
                $sql = "INSERT INTO tbl_order_item(od_id, pd_id, od_qty)
                        VALUES ($orderId, {$cartContent[$i]['pd_id']}, {$cartContent[$i]['ct_qty']})";
                $result = dbQuery($sql);                    
            }


            // update product stock
            for ($i = 0; $i < $numItem; $i++) {
                $sql = "UPDATE tbl_product 
                        SET pd_qty = pd_qty - {$cartContent[$i]['ct_qty']}
                        WHERE pd_id = {$cartContent[$i]['pd_id']}";
                $result = dbQuery($sql);                    
            }


            // then remove the ordered items from cart
            for ($i = 0; $i < $numItem; $i++) {
                $sql = "DELETE FROM tbl_cart
                        WHERE ct_id = {$cartContent[$i]['ct_id']}";
                $result = dbQuery($sql);                    
            }                           
        }                   
    }

    return $orderId;
}

/*
    Get order total amount ( total purchase + shipping cost )
*/
function getOrderAmount($orderId)
{
    $orderAmount = 0;

    $sql = "SELECT SUM(pd_price * od_qty)
            FROM tbl_order_item oi, tbl_product p 
            WHERE oi.pd_id = p.pd_id and oi.od_id = $orderId

            UNION

            SELECT od_shipping_cost 
            FROM tbl_order
            WHERE od_id = $orderId";
    $result = dbQuery($sql);

    if (dbNumRows($result) == 2) {
        $row = dbFetchRow($result);
        $totalPurchase = $row[0];

        $row = dbFetchRow($result);
        $shippingCost = $row[0];

        $orderAmount = $totalPurchase + $shippingCost;
    }   

    return $orderAmount;    
}

?>
도움이 되었습니까?

해결책

지방 자치 단체 당 다른 세율을 처리 할 필요가 없습니까? 일반적으로 이것은 우편 번호로 세금 테이블에서, 그리고 거리 주소 + 우편 번호 (일부 주)의 경우에도 찾아 볼 수 있습니다.

다음과 같습니다.

// is it a Pennsylvania zip code?
if ($zipcode < 15000 || $zipcode > 19699)  // needs verification of the actual range
   $taxrate = 0;
else
{
    $rs = mysql_query ("select rate from taxtable where zipcode = '$zipcode'", $db);
    if (!$rs)
    {
        // error looking up rate, maybe apply a default?
    }
    else
    {
        $row = mysql_fetch_assoc($rs);
        $taxrate = $row['rate'];
    }
}

$amount = $amount * (1 + $taxrate / 100.0);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top