Как я могу сгруппировать элементы формы
Я получил эту форму:
<form method="post" action="" accept-charset="utf-8">
<p>
<label>first_field</label><br />
<input type="text" id="first_field" name="points[]" /><br />
<input type="radio" value="inside" name="group_1" checked /><br />
<input type="radio" value="outside" name="group_1"><br />
</p>
<p>
<label>second_field</label><br />
<input type="text" id="second_field" name="points[]" /><br />
<input type="radio" value="inside" name="group_2" checked /><br />
<input type="radio" value="outside" name="group_2"><br />
</p>
</form>
Чего я хочу добиться, так это проверить, проверено ли внутри или снаружи, если снаружи я проверил точки умножения для данного ввода текста на 1,5. Кстати, это должно быть рассчитано на PHP.
Как я могу это сделать?
ОБНОВЛЕНИЕ
Array
(
[bonus] => Array
(
[points] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 0
[9] => 0
[10] => 0
[11] => 0
[12] => 0
[13] => 0
[14] => 0
)
[group] => Array
(
[0] => inside
[1] => outside
[2] => outside
[3] => inside
[4] => inside
[5] => inside
[6] => inside
[7] => inside
[8] => outside
[9] => inside
[10] => inside
[11] => inside
[12] => outside
[13] => inside
[14] => inside
)
)
)
Выше приведен результат print_r($_POST)
Теперь, как мне сравнить/разделить массив точек с массивом групп таким образом:
Точки[0] "подключаются" к группе[0] и т.д.?
3 answers
Как оказалось, вы можете группировать поля с помощью HTML-форм. Ознакомьтесь с этим кодом здесь: (особо обратите внимание на атрибуты name
)
<form method="post" action="" accept-charset="utf-8">
<p>
<label>first_field</label><br />
<input type="text" id="first_field" name="field[1][points]" /><br />
<input type="radio" value="inside" name="field[1][group]" checked /><br />
<input type="radio" value="outside" name="field[1][group]"><br />
</p>
<p>
<label>second_field</label><br />
<input type="text" id="second_field" name="field[2][points]" /><br />
<input type="radio" value="inside" name="field[2][group]" checked /><br />
<input type="radio" value="outside" name="field[2][group]"><br />
</p>
</form>
Без заполнения чего-либо, это приведет к массиву СООБЩЕНИЙ, подобному этому:
Array
(
[field] => Array
(
[1] => Array
(
[points] =>
[group] => inside
)
[2] => Array
(
[points] =>
[group] => inside
)
)
)
Надеюсь, это ответ на ваш вопрос, это изящный маленький трюк, который я действительно не видел, чтобы многие другие обсуждали. Следует отметить, что вам нужно будет вручную указать идентификационный номер в любом наборе скобок. Вы можете использовать только []
в качестве последнего набора скобки.
Я расширяю этот ответ , потому что мне потребовалось некоторое время, чтобы отследить PHP-код, который будет анализировать данные из формы.
Использование этого метода в HTML приведет к созданию массива пар ключ-значение.
<input type="text" id="first_field" name="field[1][points]" /><br />
<input type="radio" value="inside" name="field[1][group]" checked /><br />
<input type="radio" value="outside" name="field[1][group]"><br />
Вот как я использовал PHP для анализа массива.
foreach ($_POST as $record => $detail) {
// The submit button from my HTML form was POSTing data
// so I used an if statement to remove it from the result set
if(empty($firstRow))
{
$firstRow = 1;
}
else
{
// since $detail is still an array, you have to loop through it again
foreach ($detail as $key => $value) {
echo $key."<br/>";
// $key would contain the key value (1 or 2)
echo $value['points']."<br/>";
echo $value['group']."<br/><br/>";
}
}
}
Надеюсь, этот ответ поможет!
Вам просто нужно поймать то, что возвращается в переменной $_POST
, и обработать это. Если вы сделаете var_dump($_POST)
после заполнения формы, у вас должно быть лучшее представление о том, что делать.