За последние 24 часа нас посетили 17282 программиста и 1520 роботов. Сейчас ищут 1350 программистов ...

Помогите с обработкой формы

Тема в разделе "PHP для новичков", создана пользователем sergej78frolov, 19 фев 2016.

  1. sergej78frolov

    sergej78frolov Новичок

    С нами с:
    19 фев 2016
    Сообщения:
    5
    Симпатии:
    0
    Есть форма с чекбоксами.

    Код (PHP):
    1. <form action="test.php" method="POST">
    2. <input type="checkbox" name="var[]" value="1">1<br>
    3. <input type="checkbox" name="var[]" value="2">2<br>
    4. <input type="checkbox" name="var[]" value="3">3<br>
    5. <input type="checkbox" name="var[]" value="4">4<br>
    6. <input type="checkbox" name="var[]" value="5">5<br>
    7. <input type="checkbox" name="var[]" value="6">6<br>
    8. <input type="submit" value="Ответить"></td> 
    Первые пять ответов - правильные и должно быть 100%, если все первые пять отмечены.
    Шестой - ложный.

    Вообще не знаю, что кодировать в выводе. А обработка ответа должна привести к выводу на экран сообщения о том, что выбрано, скажем, 3 из 5-х правильных ответов, а в базу данных надо отправить результат в произвольном виде.

    Пожалуйста, помогите.

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    а где твоя php-обработка?
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    косяк: закрывающего </form> нет, зато есть ненужный </td>. такие "мелочи" могут дать неожиданные побочные эффекты.

    Добавлено спустя 9 минут 27 секунд:
    Знаю, что давать готовый ответ плохо, но что-то не верю в твои способности )))
    Решение:
    Код (PHP):
    1. $rightAnswer = ['1', '2', '3', '4', '5'];
    2.  
    3. if (strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') {
    4. //    echo 'POST<br>:<pre>'.htmlspecialchars(var_export($_POST, true)).'</pre>';
    5.  
    6.     if ($_POST['var'] == $rightAnswer) {
    7.         echo '<strong>YOU WIN!</strong>';
    8.     } else {
    9.         $intersect = array_intersect($_POST['var'], $rightAnswer);
    10.         echo 'Your result is '.count($intersect).' of '.count($rightAnswer);
    11.     }
    12. }
    13.  
     
  4. sergej78frolov

    sergej78frolov Новичок

    С нами с:
    19 фев 2016
    Сообщения:
    5
    Симпатии:
    0
    Спасибо, artoodetoo.
    Это, я так понимаю, внутрь дескриптор php вставлять в файл test.php?
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    не знаю что за "дескриптор", но да, вставляется в test.php
     
  6. sergej78frolov

    sergej78frolov Новичок

    С нами с:
    19 фев 2016
    Сообщения:
    5
    Симпатии:
    0
    Дескриптор - это
    <?php
    ?>
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    вон чо! не знал.

    Добавлено спустя 1 минуту 26 секунд:
    phpclub.ru/talk/threads/термины-php-что-такое-дескриптор.21160/

    Добавлено спустя 41 минуту 8 секунд:
    Двигаемся дальше: база данных. Я набросал пример как тесты и ответы могут выглядеть в базе. Естественно реализовать можно по разному. Я выбрал нормализованный вариант, где каждый пункт вопроса и отмеченные ответы хранятся отдельными записями. внешние ключи не описывал, хотя они очевидны.

    [​IMG]
    http://sqlfiddle.com/#!9/f6ad22

    `questions` - шапка вопроса

    `question_items` - варианты ответов, у правильного is_answer=1.
    pos это номер варианта в данном вопросе, соответствует твоему <input value=… >.

    `user_answers` - это ответы пользователей, связанные с question_items (question_id, pos)

    талицу пользователей не заводил, т.к. для нас неинтересна.

    пользователь ответил на вопрос правильно, если всем записям с is_answer=1 есть пара в answers. а для is_answer=0 пары нет

    Запросы для конкретного пользователя с user_id=10:
    - простое перечисление пунктов всех вопросов и ответов на них.
    Код (PHP):
    1. SELECT 
    2.   q.*,
    3.   (a.pos IS NOT NULL) AS checked,
    4.   (q.is_answer AND (a.pos IS NOT NULL)) AS checked_ok
    5. FROM
    6.   (SELECT question_id, pos, title, is_answer FROM question_items) AS q
    7.   LEFT JOIN
    8.   (SELECT question_id, pos FROM user_answers WHERE user_id=10) AS a 
    9.   USING (question_id, pos)
    10.  
    http://sqlfiddle.com/#!9/f6ad22/1

    - предыдущий запрос здесь используется как под-запрос.
    в результате видно общего число правильных вариантов, сколько отметил пользователь и сколько из отмеченного верно.
    Код (PHP):
    1. SELECT question_id, SUM(is_answer) AS num_answers, SUM(checked) AS num_checked, SUM(checked_ok) AS num_ok
    2. FROM
    3.   (
    4.     SELECT 
    5.       q.question_id, q.is_answer,
    6.       (a.pos IS NOT NULL) AS checked,
    7.       (q.is_answer AND (a.pos IS NOT NULL)) AS checked_ok
    8.     FROM
    9.       (SELECT question_id, pos, title, is_answer FROM question_items) AS q
    10.       LEFT JOIN
    11.       (SELECT question_id, pos FROM user_answers WHERE user_id=10) AS a 
    12.       USING (question_id, pos)
    13.   ) AS x
    14. GROUP BY question_id
    http://sqlfiddle.com/#!9/f6ad22/2