0

わかりました、これは私を困惑させました。

私は現在、ショッピングカートがクーポンテーブルをチェックして、買い物客が入力したクーポンコードが製品に対して有効であるかどうかを確認するシステムを持っています。

これは問題なく動作しますが、システムを拡張して、単一のコードを多数の製品の1つに使用できるようにすることを検討しています。

現状の動作コードは次のとおりです。

$coupon = mysql_real_escape_string(htmlentities(strtoupper($_POST['coupon'])));
$coup_qry = mysql_query("select tblcoupon.*, sell_product.product_code,sell_product.id from tblcoupon,sell_product WHERE tblcoupon.code='$coupon' AND sell_product.product_code = tblcoupon.products");
if($numrows = mysql_num_rows($coup_qry) > 0) // check if typed coupon exists in tblcoupon table 
{
    while($coup_w = mysql_fetch_array($coup_qry))           
    {
        $start_date = $coup_w['start_date'];
        $end_date = $coup_w['end_date'];
        $start = strtotime($start_date);
        $todays_date = date("Y-m-d");
        $today = strtotime($todays_date);
        $expiration_date = strtotime($end_date);
        if($today >= $start && $today <= $expiration_date) // if todays date is > start date 
                                                            and < end date then execute the below script                
        {   
            $coupon_productcode = $coup_w['products'];    //product code in the tblcoupon table
            $sell_product_productcode = $coup_w['product_code'];
            //check if any of the products in the shopping cart match any of the products 
            foreach ($_SESSION['cart'] as $name => $value) 
            {
                $id = substr($name, 5, (strlen($name)-5));
                if($id==$coup_w['id'])
                {
                    $_SESSION['coupon'] = "C$coupon-$id";
                    if(isset($_SESSION['offer'])) { 
                        unset($_SESSION['offer']); 
                    }
                    if(isset($_SESSION['error'])) { 
                        unset($_SESSION['error']); 
                    }       
                    $errCoupon = "Coupon code accepted-green";
                } 
                else {
                    $errCoupon = "Coupon Code is Invalid for this product.";
                }
            }
        } 
        else if ($today < $start){
            $errCoupon = "Coupon Code is not yet active!-red";
        } 
        else if ($today > $expiration_date){
            $errCoupon = "Coupon Code has expired!-red";
        }
    }
}

私がする必要があるのは、tbl_coupon呼び出された場所に新しい列を追加しproducts2(これは別の製品コードになります)、SQLクエリで次の行を検索するようにすることです。sell_product.product_code = tblcoupon.products OR sell_product.product_code = tblcoupon.products2

次に、$_SESSION['cart'] $id製品が有効なオプション(productsまたはproducts2)であるかどうかを確認する必要がありますが、両方ではありません。クーポンは、2つのオプションのうちの1つでのみ機能します。

どんな助けでも素晴らしいでしょう。

さらに詳しい情報が必要な場合は、お問い合わせください。

4

1 に答える 1

0
$coupon = mysql_real_escape_string(htmlentities(strtoupper($_POST['coupon'])));
$coup_qry = mysql_query("select tblcoupon.*, sell_product.product_code,sell_product.id from tblcoupon,sell_product WHERE tblcoupon.code='$coupon' AND sell_product.product_code = tblcoupon.products");
if($numrows = mysql_num_rows($coup_qry) > 0) // check if typed coupon exists in tblcoupon table 
    {
        while($coup_w = mysql_fetch_array($coup_qry))           
                    {
                        $coup_w['used'] = 0; //Coupon has not been used yet
                        $start_date = $coup_w['start_date'];
                        $end_date = $coup_w['end_date'];
                        $start = strtotime($start_date);
                        $todays_date = date("Y-m-d");
                        $today = strtotime($todays_date);
                        $expiration_date = strtotime($end_date);
                        if($today >= $start && $today <= $expiration_date) // if todays date is > start date and < end date then execute the below script               
                            {   
                                $coupon_productcode = $coup_w['products'];  //product code in the tblcoupon table
                                $sell_product_productcode = $coup_w['product_code'];
                                //check if any of the products in the shopping cart match any of the products 
                                foreach ($_SESSION['cart'] as $name => $value) 
                                    {
                                        $id = substr($name, 5, (strlen($name)-5));
                                        //test if the coupon matches AND has not been used
                                        if($id == $coup_w['id'] && $coup_w['used'] == 0)                                                
                                            {                                                                                                       
                                                $_SESSION['coupon'] = "C$coupon-$id";
                                                if(isset($_SESSION['offer'])) { unset($_SESSION['offer']); }                                                    
                                                if(isset($_SESSION['error'])) { unset($_SESSION['error']); }                                                    
                                                $errCoupon = "Coupon code accepted-green";
                                                $coup_w['used'] = 1; //Coupon has now been used.
                                            } 
                                        else {$errCoupon = "Coupon Code is Invalid for this product.";}                                         
                                    }
                            } 
                        else if ($today < $start){$errCoupon = "Coupon Code is not yet active!-red";} 
                        else if ($today > $expiration_date){$errCoupon = "Coupon Code has expired!-red";}
                    }

}

「クーポンを1回だけ使用する」部分の簡単な解決策は、クーポンが使用されたかどうかを示す'used'キーを$coup_w配列に含めることです(falseの場合は0、trueの場合は1)。次に、クーポンIDが一致し、クーポンが使用されていないかどうかをテストする必要があります。条件が満たされている場合、クーポンは有効であり、「使用済み」は1に設定する必要があります。

'product1 / product2'に関しては、列の数で制限する必要はないと思います。私はそれを行うための最良の方法は次のようなことをすることだと思います:

//YOU'LL HAVE TO MAKE SURE THIS IS VALID, I'M NOT SURE, BUT THE LOGIC IS THE IDEA
"SELECT ... AND tblcoupon.products LIKE CONCAT('%', sell_product.product_code, '%')"

ここで、tblcoupon.productsは、クーポンが有効になる製品コードのコンマ区切りリストです。

また、mysql_関数を使用することはお勧めできません。mysqli_またはPDOを調べる必要があります

于 2012-09-06T16:17:29.057 に答える