Intereting Posts
Предупреждение «Доступ к ресурсу еще не разрешено» при использовании подготовленного оператора Как проверить, существует ли элемент с SimpleXML? facebook api post to wall Предупреждение: невозможно изменить информацию заголовка – заголовки, уже отправленные с помощью ERROR Получить срок действия доменного имени через PHP Пароль не совпадает после шифрования с использованием функций crypt () и password_hash () PEAR в Windows: как изменить местоположение pear.ini Stripe – ошибка PHP – Stripe больше не поддерживает запросы API, сделанные с помощью TLS 1.0 Используйте класс поставщика от композитора в Laravel Доступ к свойствам XML, которые имеют двоеточие в имени с помощью PHP проблема со специальными символами Преждевременный конец заголовков скриптов: php-cgi – при запуске скрипта CURL Обучение SELECT FROM WHERE подготовленные заявления Хранимая процедура MySQL или сложный запрос Как выдать запрос HTTP POST?

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

Я отправляю некоторые данные на другую страницу из формы. Это корзина для покупок, и форма, которая отправляется, создается на странице раньше, в зависимости от количества элементов в корзине. Например, если есть только 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'; 

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