Я отправляю некоторые данные на другую страницу из формы. Это корзина для покупок, и форма, которая отправляется, создается на странице раньше, в зависимости от количества элементов в корзине. Например, если есть только 1 элемент, тогда у нас есть только имя поля «item_name_1», в котором должно храниться значение типа «Наклейка» и «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++; }
Я по-прежнему относительно новичок в таком использовании, поэтому я не совсем так, как наилучшим образом справиться с этим.
Благодарю.
Использовать массивные поля:
<input name="name_for_the_items[]"/>
Вы можете прокручивать поля:
foreach($_POST['name_for_the_items'] as $item) { //do something with $item }
Во-первых, пожалуйста, не используйте 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 }
я бы так не сделал
Я бы использовал массивы имен в элементах формы
так что я бы получил макет
$_POST['field'][0]['name'] = 'value'; $_POST['field'][0]['price'] = 'value'; $_POST['field'][1]['name'] = 'value'; $_POST['field'][1]['price'] = 'value';
то вы можете сделать срез массива, чтобы получить нужную сумму