Есть форма с чекбоксами. Код (PHP): <form action="test.php" method="POST"> <input type="checkbox" name="var[]" value="1">1<br> <input type="checkbox" name="var[]" value="2">2<br> <input type="checkbox" name="var[]" value="3">3<br> <input type="checkbox" name="var[]" value="4">4<br> <input type="checkbox" name="var[]" value="5">5<br> <input type="checkbox" name="var[]" value="6">6<br> <input type="submit" value="Ответить"></td> Первые пять ответов - правильные и должно быть 100%, если все первые пять отмечены. Шестой - ложный. Вообще не знаю, что кодировать в выводе. А обработка ответа должна привести к выводу на экран сообщения о том, что выбрано, скажем, 3 из 5-х правильных ответов, а в базу данных надо отправить результат в произвольном виде. Пожалуйста, помогите. Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
косяк: закрывающего </form> нет, зато есть ненужный </td>. такие "мелочи" могут дать неожиданные побочные эффекты. Добавлено спустя 9 минут 27 секунд: Знаю, что давать готовый ответ плохо, но что-то не верю в твои способности ))) Решение: Код (PHP): $rightAnswer = ['1', '2', '3', '4', '5']; if (strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') { // echo 'POST<br>:<pre>'.htmlspecialchars(var_export($_POST, true)).'</pre>'; if ($_POST['var'] == $rightAnswer) { echo '<strong>YOU WIN!</strong>'; } else { $intersect = array_intersect($_POST['var'], $rightAnswer); echo 'Your result is '.count($intersect).' of '.count($rightAnswer); } }
вон чо! не знал. Добавлено спустя 1 минуту 26 секунд: phpclub.ru/talk/threads/термины-php-что-такое-дескриптор.21160/ Добавлено спустя 41 минуту 8 секунд: Двигаемся дальше: база данных. Я набросал пример как тесты и ответы могут выглядеть в базе. Естественно реализовать можно по разному. Я выбрал нормализованный вариант, где каждый пункт вопроса и отмеченные ответы хранятся отдельными записями. внешние ключи не описывал, хотя они очевидны. 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): SELECT q.*, (a.pos IS NOT NULL) AS checked, (q.is_answer AND (a.pos IS NOT NULL)) AS checked_ok FROM (SELECT question_id, pos, title, is_answer FROM question_items) AS q LEFT JOIN (SELECT question_id, pos FROM user_answers WHERE user_id=10) AS a USING (question_id, pos) http://sqlfiddle.com/#!9/f6ad22/1 - предыдущий запрос здесь используется как под-запрос. в результате видно общего число правильных вариантов, сколько отметил пользователь и сколько из отмеченного верно. Код (PHP): SELECT question_id, SUM(is_answer) AS num_answers, SUM(checked) AS num_checked, SUM(checked_ok) AS num_ok FROM ( SELECT q.question_id, q.is_answer, (a.pos IS NOT NULL) AS checked, (q.is_answer AND (a.pos IS NOT NULL)) AS checked_ok FROM (SELECT question_id, pos, title, is_answer FROM question_items) AS q LEFT JOIN (SELECT question_id, pos FROM user_answers WHERE user_id=10) AS a USING (question_id, pos) ) AS x GROUP BY question_id http://sqlfiddle.com/#!9/f6ad22/2