Позволь мне объяснить.
Обычно, когда скрытые поля передаются из формы на страницу, указанную в действии формы, эти скрытые поля могут быть доступны на странице обработки следующим образом:
Форма:
<form action="process.php" method="POST"> <input type="text" name="username" /> <input type="password" name="password" /> <input type="hidden" name="loginTime" value="1:23PM" /> <input type="hidden" name="userIp" value="173.23.22.5" /> <input type="submit" name="submit" value="Submit" /> </form>
Страница обработки (process.php):
<?php if isset($_POST['submit']) { echo $_POST['username']; echo $_POST['loginTime']; echo $_POST['userIp']; } ?>
Вы видите, как мне пришлось называть два скрытых поля по имени и индивидуально. Можно ли каким-либо образом вызывать все скрытые поля, которые передаются на страницу из формы, все время, несмотря на то, что имена полей этих или сколько их есть?
Другими словами, как заставить PHP сделать это:
// эхо-содержимое всех скрытых полей здесь (если они есть)
Дополнительная информация:
Форма сконструирована таким образом (а не тем выше), что имена полей будут иметь следующий вид:
product_name_1 product_quantity_1 product_price_1 product_name_2 product_quantity_2 product_price_2
и поэтому увеличиваются так далее …
В зависимости от действия пользователя могут быть 3 скрытых поля или тысячи, нет ограничений.
Создайте массив допустимых скрытых имен полей, затем $_POST
итерацию через $_POST
и если имя поля $ _POST находится в массиве допустимых имен полей, повторите их.
$valid = array('first_name', 'last_name'); foreach ( $_POST as $key => $value ) { if ( in_array( $key, $valid ) ) { echo $_POST[$key]; } }
PHP не волнует, было ли это поле скрыто или нет, HTTP не сообщает PHP, как он появился на веб-сайте.
Самое близкое, что я придумал, это сохранение всех имен скрытых полей внутри массива и повторение их всех в цикле.
Вы можете попробовать следующее:
<form action="process.php" method="POST"> <input type="text" name="username" /> <input type="password" name="password" /> <input type="hidden" name="group_hidden[loginTime]" value="1:23PM" /> <input type="hidden" name="group_hidden[userIp]" value="173.23.22.5" /> <input type="submit" name="submit" value="Submit" /> </form>
И затем распечатайте его:
echo htmlspecialchars(print_r($_POST, true));
Это может дать вам понять, как это решить.
нет способа рассказать тип встроенного входа, поэтому вместо этого вам нужно будет найти способ идентифицировать те, которые вы хотите сами. Это можно сделать либо с помощью специальной схемы именования, либо путем хранения списка имен скрытых полей в другом поле. Я бы рекомендовал прежний вариант, так как у вас нет риска потерять целостность данных. Посмотрите на использование array_filter
для синтаксического анализа массива, чтобы получить array_filter
поля.
Возможно, если предположить, что ваши скрытые поля будут последовательно (т.е. 1,2,3, а не 1,2,4), следуя всем действиям конечных пользователей (добавив и убрав поля), вы можете попробовать что-то в соответствии с
$i = 1; while(isset($_POST["product_name_$i"])) { echo $_POST["product_name_$i"]; echo $_POST["product_price_$i"]; $i++; }
в$i = 1; while(isset($_POST["product_name_$i"])) { echo $_POST["product_name_$i"]; echo $_POST["product_price_$i"]; $i++; }
Или что-то вдоль этих линий?