2011-03-29 48 views
14

我將一些數據從表單發佈到另一個頁面。這是一個購物車,並且正在提交的表單正在頁面上生成,具體取決於購物車中有多少物品。例如,如果只有1個項目,那麼我們只有字段名稱「item_name_1」,它應該存儲像「貼紙」和「item_price_1」這樣的值,該值存儲該項目的價格。但是如果有人有5件商品,我們需要'item_name_2','item_name_3'等來獲得每件商品的價值,直到第五件商品。從表單中的POST的Foreach值

什麼是最好的方式來循環通過這些項目來獲取值?

這是我的,顯然不工作。

extract($_POST); 

$x = 1; // Assuming there's always one item we're on this page, we set the variable to get into the loop 

while(${'item_name_' .$x} != '') { 

echo ${'item_name' .$x}; 

$x++; 

} 

我還是比較新的這種用法,所以我完全不認爲最好的方式來對付它。

謝謝。

+3

這與問題無關,但您不應該在$ _POST上使用提取,如PHP手冊中突出顯示的那樣:http://php.net/manual/en/function.extract.php – Flipper 2011-03-29 23:12:27

回答

19

使用類似數組的字段:

<input name="name_for_the_items[]"/> 

您可以在田野中循環:

foreach($_POST['name_for_the_items'] as $item) 
{ 
    //do something with $item 
} 
+0

這適用於我。謝謝。有了這個$ item變量,我怎樣才能得到item_price的值,以及在同一個循環內?我希望能夠爲每個項目打印item_name,item_price和item_quantity。 – Andelas 2011-03-29 23:24:01

+3

@scatterbomb:使用像'item [1] [name]','item [1] [price]','item [2] [name]','item [2] [price]'這樣的名字。 'var_dump($ _ POST);'查看結果。 – Wrikken 2011-03-29 23:26:44

+0

@ Dr.Molle:如果我有多個表單但想要提交不同形式的值,那麼帖子只返回最後一個表單的值 – logan 2014-02-27 19:06:41

0

我不會做這種方式

我會使用名稱陣列中表單元素

所以我會得到佈局

$_POST['field'][0]['name'] = 'value'; 
$_POST['field'][0]['price'] = 'value'; 
$_POST['field'][1]['name'] = 'value'; 
$_POST['field'][1]['price'] = 'value'; 

那麼你可以做一個數組片斷得到你需要

39

首先,請不要使用提取物(),它可以是一個安全問題,因爲它很容易操縱POST參數

量此外,您不必使用可變的變量名(聽起來有點奇怪),而不是:

foreach($_POST as $key => $value) { 
    echo "POST parameter '$key' has '$value'"; 
} 

要確保你只有開頭的參數「ITEM_NAME」你可以檢查它像這樣:

$param_name = 'item_name'; 
if(substr($key, 0, strlen($param_name)) == $param_name) { 
    // do something 
} 
+0

謝謝。我傾向於Dr.Molle的例子,但我很欣賞關於extract()的提示。我已將其從我的代碼中刪除。 – Andelas 2011-03-29 23:24:39

+0

我也更喜歡POST數組。 – Alp 2011-03-29 23:26:33

+0

@Alp:如果我有多個表單並希望提交不同形式的值,那麼帖子只返回最後一個表單的值 – logan 2014-02-27 19:07:13