2009-11-27 18 views
1

我使用paypal處理我的網站上的付款。貝寶返回後陣列喜歡這裏使用PayPal的post數組

[item_number1] =12 
[item_name1] = My product name 
[quantity1] =3 
[item_number2] =14 
[item_name2] = My product name2 
[quantity2] =5 
[num_cart_items] 2 

插入一步,現在我只是兜兜越來越行不通

然後運行for循環

for($i = 1;$i <= $num_cart_items ;$i++){ 
     $x = 'item_number' . $i; 
     $y = 'item_name' . $i; 
     $z = 'quantity' . $i; 


     $new_amount = $row['stock_quantity'] - $$z; 
     $db->update1_by_match('cart_products','stock_quantity',$new_amount,'id',$$x); 

    } 

與這些可變的變量有麻煩林。有一個更好的方法嗎?

感謝 安德魯

+0

變量是全局變量嗎?爲什麼不直接從$ _POST引用它們? –

回答

7

我會改變你的修改後的代碼使用$ _POST直接,例如

for($i = 1;$i <= $_POST['num_cart_items'] ;$i++){ 

    $item_number= intval($_POST['item_number' . $i]); 
    $item_quantity= intval($_POST['quantity' . $i]); 

    printf("DEBUG: item %d item:%d quantity:%d<br>", $i, $item_number, $item_quantity); 

    $new_amount = $row['stock_quantity'] - $item_quantity; 
    $db->update1_by_match('cart_products','stock_quantity',$new_amount,'id', $item_number); 

} 

診斷輸出應該可以幫助您完善事情的進展。

早期問題 - 下面的註釋是指在完成修改之前提出的問題。

你真正需要的是一個數組,而不是試圖用變量變量

$item_numbers=array(24, 16); 

foreach ($item_numbers as $item_number) { 
    $result = $db->get_cols_by_match('cart_products','stock_quantity','id', $item_number); 
} 

要做到這一點,你在做它的方式,這樣的事情可能會澄清

$item_number1='24'; 
$item_number2='16'; 
$num_cart_items = 2 

for($i = 1;$i <= $num_cart_items ;$i++){     
    $varname='item_number' . $i; 
    printf("DEBUG: %s = %s<br>", $varname, $$varname); 

    $result = $db->get_cols_by_match('cart_products','stock_quantity','id', $$varname); 
} 

的$$ varname的是variable variable的例子,但在你的情況下,數組聲明你的意圖在一個更加清晰的方式。

+0

不應該是'$ varname =「item_number」。 $ I;'? –

+0

是的,就發現那 - 修正 –

+0

我已經簡化了問題。 item_number1和item_number2來自貝寶,所以我無法控制。你提出的第二個方式是我所需要的,這是顯而易見的,我應該去睡覺 – andrew