Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Каким образом лучше суммировать баллы за ответы в тесте?
Форумы портала PHP.SU » » Вопросы новичков » Каким образом лучше суммировать баллы за ответы в тесте?

Страниц (1): [1]
 

1. mxup - 08 Сентября, 2014 - 13:53:02 - перейти к сообщению
Есть тест, за каждый вариант ответа аётся определённок количество баллов
Например,
- если человек на первый вопрос дал ответ:"зелёный", то за этот ответ даётся 3 балла
- если человек на первый вопрос дал ответ: "красный", то за этот ответ даётся 1 балл

То есть в конце надо проссуммировать общее количество баллов.
Каким образом это лучше сделать?

Выделить переменную и с помощью оператора IF (например: if (otvet==зелёный) { ball=3}; if (otvet==красный) { ball=1};
и так для каждого варианта вопроса суммировать баллы за ответы...но это мне кажется слишком громоздко

Или как вообще это лучше сделать????
2. difight - 08 Сентября, 2014 - 14:27:42 - перейти к сообщению
Смотря как это у вас все реализовано, а так я бы делал так, сделал селект с 2умя ответами например так
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <select name="rating">
  3.     <option disabled>Выберите баллы</option>
  4.     <option value="1">Красный</option>
  5.     <option value="3">Зеленый</option>    
  6.    </select>
  7.  

В результате при отправке формы у вас в переменную со значение rating попадет значение value, и его уже записывайте в базу, а потом суммируйте как хотите, если уже эти результате в базе со значениями зеленый красный, то да через if только, по другому не знаю как Улыбка
3. RickMan - 08 Сентября, 2014 - 14:31:29 - перейти к сообщению
А что мешает на странице заменить value на 100500 и получить 100500 баллов из 100 ?)
4. difight - 08 Сентября, 2014 - 14:34:39 - перейти к сообщению
RickMan пишет:
А что мешает на странице заменить value на 100500 и получить 100500 баллов из 100 ?)

Ниче не мешает, можно сделать проверки при обработки результатов, или в идеале хранить все виды райтингов в базе и по айдишнику получать значение выбранного поля Улыбка Тут уж хозяин барин =)
5. mxup - 08 Сентября, 2014 - 14:36:04 - перейти к сообщению
да дело в том что систему самого голосования я изменить не могу, только принимаю ответы в виде "красный", "зелёный", "не знаю" , "квадратный" и т.п. через POST
6. Tyoma5891 - 08 Сентября, 2014 - 14:37:11 - перейти к сообщению
mxup пишет:
систему самого голосования

что это значит?
7. difight - 08 Сентября, 2014 - 14:37:57 - перейти к сообщению
mxup пишет:
да дело в том что систему самого голосования я изменить не могу, только принимаю ответы в виде "красный", "зелёный", "не знаю" , "квадратный" и т.п. через POST

Ну тогда через if фигаш, другого выхода не вижу =) Опять же не понятно откуда ты принимаешь эти ответы ?Улыбка С базы ?Улыбка
8. Мелкий - 08 Сентября, 2014 - 15:19:51 - перейти к сообщению
Замените группу условий словарём.
PHP:
скопировать код в буфер обмена
  1. $rgAnswers = array(
  2. 'зелёный' => 3,
  3. 'красный' => 1,
  4. /**/
  5. );
  6. $iBalls = 0;
  7. if (! isset( $rgAnswers[ $sSelectedAnswer ] )) {
  8. // такого ответа нет, реакция на ошибку ввода
  9. } else {
  10. $iBalls = $rgAnswers[ $sSelectedAnswer ];
  11. }
9. mxup - 09 Сентября, 2014 - 10:50:24 - перейти к сообщению
Ответы теста приходят в таком виде через POST
PHP:
скопировать код в буфер обмена
  1. (
  2.     [1] => Array
  3.         (
  4.             [0] => хорошо
  5.         )
  6.  
  7.     [2] => Array
  8.         (
  9.             [0] => 76678
  10.         )
  11.  
  12.     [3] => Array
  13.         (
  14.             [0] => Синие
  15.             [1] => Зелёные
  16.         )
  17.  
  18. )

(Добавление)
Мелкий пишет:
Замените группу условий словарём.
PHP:
скопировать код в буфер обмена
  1. $rgAnswers = array(
  2. 'зелёный' => 3,
  3. 'красный' => 1,
  4. /**/
  5. );
  6. $iBalls = 0;
  7. if (! isset( $rgAnswers[ $sSelectedAnswer ] )) {
  8. // такого ответа нет, реакция на ошибку ввода
  9. } else {
  10. $iBalls = $rgAnswers[ $sSelectedAnswer ];
  11. }


Да дело в том, что есть вопросы с иллюстрациями (картинками) и там например 5 вариантов ответа: "Вариант 1" , "Вариант 2" ,"Вариант 3".....
И в разных вопросах за один и тот же вариант ответа может даваться разное количество баллов.
10. Мелкий - 09 Сентября, 2014 - 11:42:31 - перейти к сообщению
Но вы-то знаете:
0) за какой ответ какого вопроса даётся сколько баллов
1) на какой вопрос какой пришёл ответ

Простейшая матрица: [вопрос][ответ] => количество баллов
Просто, читаемо. Если в массиве такой элемент - добавили в итог столько-то баллов.
11. mxup - 10 Сентября, 2014 - 10:40:43 - перейти к сообщению
Мелкий пишет:
Но вы-то знаете:
0) за какой ответ какого вопроса даётся сколько баллов
1) на какой вопрос какой пришёл ответ

Простейшая матрица: [вопрос][ответ] => количество баллов
Просто, читаемо. Если в массиве такой элемент - добавили в итог столько-то баллов.


А можете пожалуйста этот код немного изменить под мой тип массива с овтетами

PHP:
скопировать код в буфер обмена
  1. $rgAnswers = array(
  2. 'зелёный' => 3,
  3. 'красный' => 1,
  4. /**/
  5. );
  6. $iBalls = 0;
  7. if (! isset( $rgAnswers[ $sSelectedAnswer ] )) {
  8. // такого ответа нет, реакция на ошибку ввода
  9. } else {
  10. $iBalls = $rgAnswers[ $sSelectedAnswer ];
  11. }


массив с ответами который мне приходит
PHP:
скопировать код в буфер обмена
  1. (
  2.     [1] => Array
  3.         (
  4.             [0] => хорошо
  5.         )
  6.  
  7.     [2] => Array
  8.         (
  9.             [0] => 76678
  10.         )
  11.  
  12.     [3] => Array
  13.         (
  14.             [0] => Синие
  15.             [1] => Зелёные
  16.         )
  17.  
  18. )
12. mxup - 12 Сентября, 2014 - 15:25:18 - перейти к сообщению
Ребзя, подскажите кто-нибудь плиз а ,а то у меня вечная путаница с этими массивами(((

 

Powered by ExBB FM 1.0 RC1