web-dev-qa-db-ja.com

Foreach値from POST from form

フォームから別のページにデータを投稿します。これはショッピングカートであり、カートにあるアイテムの数に応じて、送信されるフォームがページ上で生成されます。たとえば、アイテムが1つしかない場合、「Sticker」などの値を格納するフィールド名「item_name_1」と、そのアイテムの価格を格納する「item_price_1」のみがあります。しかし、誰かが5つのアイテムを持っている場合、各アイテムの値を5番目まで取得するには、「item_name_2」、「item_name_3」などが必要になります。

これらの項目をループして値を取得する最良の方法は何でしょうか?

ここに私が持っているものがありますが、明らかに機能していません。

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++;

}

私はこの種の使用法にまだ比較的慣れていないので、それに対処する最善の方法ではありません。

ありがとう。

16
Andelas

配列のようなフィールドを使用します。

<input name="name_for_the_items[]"/>

フィールドをループできます:

foreach($_POST['name_for_the_items'] as $item)
{
  //do something with $item
}
22
Dr.Molle

まず、extract()を使用しないでください。POST parameters

さらに、変数変数名(奇妙に聞こえます)を使用する必要はありません、代わりに:

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
}
46
Alp

投稿キーを解析する必要があり、キーがデータのシーケンスである場合、これを試すことができます:

投稿データの例:Storeitem | 14 = data14

foreach($_POST as $key => $value){
    $key=Filterdata($key); $value=Filterdata($value);
    echo($key."=".$value."<br>");
}

次に、strposを使用して、キーから数字を分離するキーの終わりを分離できます。

1
Wynn

私はこのようにしません

フォーム要素で名前配列を使用します

だから私はレイアウトを取得するだろう

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

その後、必要な量を取得するために配列スライスを行うことができます

0
Jase