フォームから別のページにデータを投稿します。これはショッピングカートであり、カートにあるアイテムの数に応じて、送信されるフォームがページ上で生成されます。たとえば、アイテムが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++;
}
私はこの種の使用法にまだ比較的慣れていないので、それに対処する最善の方法ではありません。
ありがとう。
配列のようなフィールドを使用します。
<input name="name_for_the_items[]"/>
フィールドをループできます:
foreach($_POST['name_for_the_items'] as $item)
{
//do something with $item
}
まず、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
}
投稿キーを解析する必要があり、キーがデータのシーケンスである場合、これを試すことができます:
投稿データの例:Storeitem | 14 = data14
foreach($_POST as $key => $value){
$key=Filterdata($key); $value=Filterdata($value);
echo($key."=".$value."<br>");
}
次に、strposを使用して、キーから数字を分離するキーの終わりを分離できます。
私はこのようにしません
フォーム要素で名前配列を使用します
だから私はレイアウトを取得するだろう
$_POST['field'][0]['name'] = 'value';
$_POST['field'][0]['price'] = 'value';
$_POST['field'][1]['name'] = 'value';
$_POST['field'][1]['price'] = 'value';
その後、必要な量を取得するために配列スライスを行うことができます