динамический список песочницы php paypal - PullRequest
1 голос
/ 29 февраля 2012

Я пытаюсь сделать кнопку PayPal, используя песочницу с несколькими продуктами. Когда я добавляю товар в корзину и нажимаю кнопку PayPal, он работает нормально. Однако, если я сделаю два или три продукта в корзине и нажму кнопку, появляется сообщение «Ваша корзина пуста». Я думаю, что проблема была в динамическом списке. Не могли бы вы помочь мне? динамический список использует оператор foreach. Честно говоря, другие коды работают нормально, что в этом выражении foreach. Пожалуйста, помогите мне. спасибо.

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
                    <input type="hidden" name="cmd" value="_cart"/>
                    <input type="hidden" name="upload" value="1"/>
                    <input type="hidden" name="business" value="wholee1@googlemail.com"/> 
                    <input type="hidden" name="notify_url" value="XXX">
                    <input type="hidden" name="return" value="http://localhost/eshopProject/home.php">
                    <input type="hidden" name="rm" value="2">
                    <input type="hidden" name="cbt" value="Return to The Store">
                    <input type="hidden" name="cancel_return" value="http://localhost/eshopProject/android.php">
                    <input type="hidden" name="lc" value="UK">
                    <input type="hidden" name="currency_code" value="GBP">
                    <input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal — The safer, easier way to pay online.">
                    <img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1">
                    <?php  echo $pp_checkout_btn; ?>
                </form>


//added more php sources here
<?php
//if user attempts to add something to the cart from the product page
if(isset($_POST['pid'])){
$pid = $_POST['pid'];
$wasFound = false;
$i = 0;
if(!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1){
    //if cart is empty or not set, run it
    $_SESSION["cart_array"] = array(0 => array("item_id" => $pid, "quantity" => 1));
}
else{
    //if cart has at least one item in it
    foreach($_SESSION["cart_array"] as $each_item){
        $i++;
        while(list($key, $value) = each($each_item)){
            if($key =="item_id" && $value == $pid){
                //this item is in cart already, then it can be adjusted the quantity using array_splice()
                array_splice($_SESSION["cart_array"], $i-1, 1, 
                array(array("item_id" => $pid, "quantity" => $each_item['quantity'] + 1)));
                $wasFound = true;
            }
        }
    }
    if($wasFound == false){
        array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1));
    }
}
header("location: cart.php");
exit();
}
?>


//php code
    $pp_checkout_btn = '';
    $i = 0;
    foreach($_SESSION["cart_array"] as $each_item){   
    $item_id = $each_item['item_id'];
    $sql = mysql_query("SELECT * FROM product WHERE productId='$item_id' LIMIT 1");
        while($row = mysql_fetch_array($sql)){
            $category = $row["product_category"];
            $product_name = $row["product_name"];
            $brand = $row["product_brand"];
            $price = $row["product_price"];
        }    
    $priceTotal = $price * $each_item['quantity'];
    $cartTotal = $priceTotal + $cartTotal;
    $x = $i + 1;
    //dynamic Checkout Button
    $pp_checkout_btn = '<input type="hidden" name="item_name_'.$x.'" value="'.$product_name.'">
        <input type="hidden" name="amount_'.$x.'" value="'.$price.'">
        <input type="hidden" name="quantity_'.$x.'" value="'.$each_item['quantity'].'">';
     }

1 Ответ

0 голосов
/ 29 февраля 2012

Похоже, вы забыли увеличить $i в пределах foreach. Поэтому вы все время генерируете только один элемент (при $x, равном 1, все элементы, кроме первого, будут игнорироваться).

Я бы предложил заменить $x = $i + 1; на $x = ++$i;. Или просто введите $i++ и используйте $i вместо $x в коде формирования входных данных.

...