Значение Foreach из POST из формы

Я отправляю некоторые данные на другую страницу из формы. Это корзина для покупок, и форма, которая отправляется, создается на странице раньше, в зависимости от количества предметов в корзине. Например, если есть только 1 элемент, тогда у нас есть только имя поля "item_name_1", в котором должно храниться значение типа "Наклейка" и "item_price_1", в котором хранится цена этого элемента. Но если у кого-то есть 5 элементов, нам нужны "item_name_2", "item_name_3" и т.д., Чтобы получить значения для каждого элемента до пятого.

Каким будет наилучший способ прокрутки этих элементов для получения значений?

Вот что у меня есть, что явно не работает.

extract($_POST);

$x = 1; // Assuming there 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++;

}

Я по-прежнему относительно новичок в таком использовании, поэтому я не совсем так, как наилучшим образом справиться с этим.

Спасибо.

Ответы

Ответ 1

Использовать массивные поля:

<input name="name_for_the_items[]"/>

Вы можете прокручивать поля:

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

Ответ 2

Во-первых, пожалуйста, не используйте extract(), это может быть проблема безопасности, потому что легко манипулировать параметрами 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
}

Ответ 3

Я бы так не сделал

Я бы использовал массивы имен в элементах формы

поэтому я бы получил макет

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

тогда вы можете сделать срез массива, чтобы получить нужную сумму