Обработка HTML формы, PHP

DI
На сайте с 22.01.2010
Offline
135
1482

Подскажите пожалуйста как проще обработать данные формы (тест на похудение). Там два формата вопроса


<p><b>12. Если выбирать между хорошим другом и плохим братом…я выберу брата, т.к. это моя родная кровь</b><Br>
<input type="radio" name="q12" value="purple"> согласен <Br>
<input type="radio" name="q12" value=""> не согласен <Br>
</p>

и такой формат:


<p><b>13. Что Вы выберите: </b><Br>
<input type="checkbox" name="q13" value="beige"> автоматическое существование <Br>
<input type="checkbox" name="q13" value="purple"> направление от традиции и ритуалов <Br>
<input type="checkbox" name="q13" value="red"> утверждение собственного доминирования <Br>
<input type="checkbox" name="q13" value="blue"> покорность высшим авторитетам, чувство вины <Br>
<input type="checkbox" name="q13" value="orange"> достижение целей и результатов, маневрирование <Br>
<input type="checkbox" name="q13" value="green"> реагирование на человеческие нужды, выбор по ситуации <Br>
<input type="checkbox" name="q13" value="yellow"> мышление-гибкое, вопрошающее, принимающее <Br>
<input type="checkbox" name="q13" value="turquoise"> коллективное сознание, сотрудничество и взаимосвязанность <Br>
<input type="checkbox" name="q13" value="coral"> направление ещё неизвестными возможностями мозга <Br>
</p>

Цель посчитать по всей форме количество $orange, $yellow, $beige и т.д. и найти максимальное.

С первым типом вопросов считаю как:


if ($_REQUEST['q1'] == green){$green++;}
if ($_REQUEST['q2'] == orange){$orange++;}

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

Ragnarok
На сайте с 25.06.2010
Offline
239
#1

DaImeR, у чекбоксов должны быть разные имена, но можно сделать через массив. я бы сделал как-то так, назвал все name="q[]"

<p><b>13. Что Вы выберите: </b><Br> 
<input type="checkbox" name="q[]" value="beige"> автоматическое существование <Br>
<input type="checkbox" name="q[]" value="purple"> направление от традиции и ритуалов <Br>
<input type="checkbox" name="q[]" value="red"> утверждение собственного доминирования <Br>
<input type="checkbox" name="q[]" value="blue"> покорность высшим авторитетам, чувство вины <Br>
<input type="checkbox" name="q[]" value="orange"> достижение целей и результатов, маневрирование <Br>
<input type="checkbox" name="q[]" value="green"> реагирование на человеческие нужды, выбор по ситуации <Br>
<input type="checkbox" name="q[]" value="yellow"> мышление-гибкое, вопрошающее, принимающее <Br>
<input type="checkbox" name="q[]" value="turquoise"> коллективное сознание, сотрудничество и взаимосвязанность <Br>
<input type="checkbox" name="q[]" value="coral"> направление ещё неизвестными возможностями мозга <Br>
</p>

можно ещё проверить как-то так

$green = 0;
$orange = 0;
//...
foreach($_POST["q"] as $post) {
switch($post):
case("green"): $green++; break;
case("orange"): $orange++; break;
//...
default: break;
}
//TODO: перестать откладывать на потом
S
На сайте с 30.09.2016
Offline
469
#2

.....................

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
DI
На сайте с 22.01.2010
Offline
135
#3
Ragnarok:
DaImeR, у чекбоксов должны быть разные имена, но можно сделать через массив. я бы сделал как-то так, назвал все name="q[]"
<p><b>13. Что Вы выберите: </b><Br> 

<input type="checkbox" name="q[]" value="beige"> автоматическое существование <Br>
<input type="checkbox" name="q[]" value="purple"> направление от традиции и ритуалов <Br>
<input type="checkbox" name="q[]" value="red"> утверждение собственного доминирования <Br>
<input type="checkbox" name="q[]" value="blue"> покорность высшим авторитетам, чувство вины <Br>
<input type="checkbox" name="q[]" value="orange"> достижение целей и результатов, маневрирование <Br>
<input type="checkbox" name="q[]" value="green"> реагирование на человеческие нужды, выбор по ситуации <Br>
<input type="checkbox" name="q[]" value="yellow"> мышление-гибкое, вопрошающее, принимающее <Br>
<input type="checkbox" name="q[]" value="turquoise"> коллективное сознание, сотрудничество и взаимосвязанность <Br>
<input type="checkbox" name="q[]" value="coral"> направление ещё неизвестными возможностями мозга <Br>
</p>


можно ещё проверить как-то так
$green = 0;

$orange = 0;
//...
foreach($_POST["q"] as $post) {
switch($post):
case("green"): $green++; break;
case("orange"): $orange++; break;
//...
default: break;
}

Вот таких форм там 25 штук. Для каждого такой цикл с проверкой писать?

DI
На сайте с 22.01.2010
Offline
135
#4

Подскажите как только обработать несколько форм с множественным выбором, остальное сам допишу)

S
На сайте с 30.09.2016
Offline
469
#5

Ну так Ragnarok всё правильно написал. Что Вас смущает? Количество? Ну тут как бы никуда не денешься: сколько придумали полей, столько и обрабатывать придётся.

Ragnarok
На сайте с 25.06.2010
Offline
239
#6

DaImeR, если я правильно понял задачу, Вам нужно только подсчитать общую сумму "цветов": green, purple и т.п

И мой вариант: все вопросы называть не q1, q2, q3, а просто q[] и потом одним циклом перебирать

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий