Значение Foreach из POST из формы - PullRequest
16 голосов
/ 30 марта 2011

Я публикую некоторые данные на другой странице формы. Это корзина для покупок, и отправляемая форма создается на странице раньше, в зависимости от количества товаров в корзине. Например, если есть только 1 элемент, то у нас есть только имя поля «item_name_1», в котором должно храниться значение типа «Sticker» и «item_price_1», в котором хранится цена этого элемента. Но если у кого-то есть 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++;

}

Я все еще относительно новичок в такого рода использовании, поэтому я не совсем понимаю, как лучше всего с этим справляться.

Спасибо.

Ответы [ 4 ]

46 голосов
/ 30 марта 2011

Во-первых, пожалуйста, не используйте 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
}
22 голосов
/ 30 марта 2011

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

<input name="name_for_the_items[]"/>

Вы можете перебирать поля:

foreach($_POST['name_for_the_items'] as $item)
{
  //do something with $item
}
1 голос
/ 17 октября 2018

Если ваши почтовые ключи должны быть проанализированы, а ключи представляют собой последовательности с данными, вы можете попробовать это:

Пример почтовых данных: Storeitem | 14 = data14

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

, тогда выможно использовать strpos для изоляции конца ключа, отделяющего число от ключа.

0 голосов
/ 30 марта 2011

я бы так не поступил

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

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

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

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

...