Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135

Тестирование на сайте

11.11.2014, 10:42. Показов 1659. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, помогите разобрать создание тестирования на сайте. Нашел статью на эту тему, но она не разобрана почти, может кто поможет допилить? Или хотя бы ответить на ключевые вопросы? Текст статьи:

Алгоритм:

1. Создать таблицу с тестами. Здесь достаточно следующих полей: id (уникальный идентификатор), title (название теста), description (описание теста). Можете также добавить количество прошедших данный тест и средний балл. Здесь всё элементарно, и Вы должны справиться с этим без проблем.

2. Создать таблицу с вопросами. Здесь нужны следующие поля: id (уникальный идентификатор), test_id (id теста, к которому принадлежит данный вопрос), title (текст вопроса), variant_1 (текст варианта 1), variant_2 (текст варианта 2), correct (правильный ответ). Здесь Вы можете указывать любое количество вариантов, в данном случае, я поставил 2 варианта. В поле "correct" должно стоять число с правильным ответом, например, "1".

3. При запуске теста необходимо записать в сессию id тех вопросов, на которые будет отвечать пользователь. Для этого извлеките из базы любое количество вопросов (например, 10 случайных вопросов для выбранного теста) и запишите их id в сессию пользователя. Здесь Вам необходимо записать в сессию массив, где ключами будут id вопросов, а в значении по умолчанию пустая строка. А в будущем будет идти тот ответ, который дал пользователь.

4. Вывести первый вопрос из массива, который не имеет ответа (то есть значение равно пустой строке).

5. Принять от пользователя ответ и записать в массив с ключом в виде id данного вопроса, ответ, который прислал пользователь.

6. Сделать редирект обратно на страницу с вопросами.

7. Вернуться к пункту 4, если ещё остались вопросы без ответа. Если на все вопросы были даны ответы, то проверить массив в сессии на соответствие правильным ответам, и вывести окончательный результат.

Давайте разберём 3-й пункт с кодом:
PHP
1
2
3
4
5
6
7
<?php
  $arr = array(5, 15, 1, 10, 2); // 5 id вопросов, которые извлекаются из базы
  for ($i = 0; $i < count($arr); $i++) {
    $arr_questions[$arr[$i]] = "";
  }
  $_SESSION["questions"] = $arr_questions;
?>

Теперь давайте разберём 5-й пункт, так как он тоже является, возможно, не совсем понятным:

PHP
1
2
3
4
5
<?php
  $question_id = 5; // id вопроса, на который пользователь дал ответ (приходит из формы)
  $answer = 1; // ответ, который дал пользователь (приходит из формы)
  $_SESSION["questions"]["$question_id"] = $answer; // Записываем в сессию ответ на данный вопрос
?>
Первый не понятный для меня вопрос это каким образом в 5 пункте можно получить id вопроса на который ответили. Получить номер ответа это я понимаю, можно просто $_POST передать при отправке value радиокнопки, но в пост ведь не засунешь автоматически ничего больше кроме как значений из value или я, что-то не понимаю. Напишите пример пожалуйста, а если кому не лень и интересно вышеописанный алгоритм разберите, думаю всем будет интересно)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2014, 10:42
Ответы с готовыми решениями:

Тестирование на сайте скриптом PHP
Добрый день! Мой бывший классный руководитель попросил меня написать web тест по истории для школоты, а так как это дл меня абсолютно...

Необходиомо реализовать тестирование студентов на имеющемся сайте на php и mysql
Просьба откликнуться кто может помочь реализовать тестирование студентов на имеющемся сайте на php и mysql не много о сайте Сайт...

Удаленное тестирование приложение/Пересылка на тестирование
Если кто-то написал приложение под андроид и захочет показать другому человеку, то достаточно отослать apk. А как обстоит с этим дело в...

14
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
11.11.2014, 10:58
Ну так и ответ уже дан как это сделать ) Если это радиокнопки, то у них есть value="1..5" - К примеру. Где к примеру:
1 - Да
2 - Нет
3 - Возможно
......
Есть вопрос с ID на который только 1 ответ будет правельный. В итоге что мы получаем:
$_SESSION['Вопрос_id']['Ответ_id'] = $Ответ_id'

После этого сверяем что бы у ID вопроса, совподал его ID ответ с ответом пользователя.

Цитата Сообщение от Maksimus1991 Посмотреть сообщение
не засунешь автоматически ничего больше кроме как значений из value
HTML5
1
2
3
<input type="radio" name="questions" value="1">Да<br>
<input type="radio" name="questions" value="2">Нет<br>
<input type="radio" name="questions" value="3">Возможно<br>
Value тут будет 1..3
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
11.11.2014, 11:18  [ТС]
"После этого сверяем что бы ID вопроса, совподал с ID ответом." можно поподробнее? Я не понял, есть допустим массив где хранятся id всех вопросов. Этот массив мы составляем при выборке из бд, потом мы на основе этого массива создаем многомерный массив, где ключ это id вопроса, а значение пусто (""), потом вторым шагом, так сказать, мы делаем какую-то абракадабру)

Вот есть массив c id всех вопросов и с пустыми значениями:

PHP
1
2
3
4
5
6
7
8
session_start();
 
$arr = array(5, 15, 1, 10, 2); // 5 id вопросов, которые извлекаются из базы
for ($i = 0; $i < count($arr); $i++) {
    $arr_questions[$arr[$i]] = "";
}
 
$_SESSION['id_question'] = $arr_questions;
Нам я так полагаю нужно на место пустого значения записать ответ, чтобы получилась связка id_вопроса - номер ответа? Но как нам передать конкретно нужному id_вопроса ответ, соответствующий именно ему. У нас же из формы приходит большой массив $_POST в котором в куче валяются все данные. Не понимаю я что там дальше делать, распишите если вам понятно)

Добавлено через 9 минут
Хотя я начал понимать. Этот вариант подходит только для того случая если вопросы выводятся по одному, а не всем скопом? То есть если на странице вывелся один вопрос, то при ответе на него в массив улетит, как раз его значение, и запишется в сессию в первый элемент массива. Потом второй вопрос, запишется во вторую ячейку массива сессии и так далее, а что делать если на странице сразу 10 вопросов и из формы в $_POST отправляется сразу много значений? Как тогда все пришедшие значения записать в сессию чтобы они записались в нужном порядке?
0
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
11.11.2014, 11:19
У вас к примеру 10 вопросов, будут на 1 странице или будет далее, далее?
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
11.11.2014, 11:21  [ТС]
10 вопросов на одной странице, без кнопки далее.
0
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
11.11.2014, 11:34
HTML5
1
2
3
<input type="radio" name="Вопрос_ID" value="1">Да<br>
<input type="radio" name="Вопрос_ID" value="2">Нет<br>
<input type="radio" name="Вопрос_ID" value="3">Возможно<br>
PHP
1
$_POST['Вопрос_ID'] => value
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
11.11.2014, 11:35  [ТС]
Я не понимаю, у него написано id вопроса, на который пользователь дал ответ (приходит из формы) :

PHP
1
2
3
4
5
<?php
  $question_id = 5; // id вопроса, на который пользователь дал ответ (приходит из формы)
  $answer = 1; // ответ, который дал пользователь (приходит из формы)
  $_SESSION["questions"]["$question_id"] = $answer; // Записываем в сессию ответ на данный вопрос
?>
Но как нам из формы приходит id вопроса? Ну понятно что приходит value но валуе не соответствует id вопроса оно соответствует номеру ответа. А больше через пост нам ничего не передать. Не впиливаю я. Люди помогайте, кто может)
0
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
11.11.2014, 11:37
Лучший ответ Сообщение было отмечено Maksimus1991 как решение

Решение

Вот пример:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
    <form name="form1" method="post" action="form.php">
<input type="radio" name="1" value="1">Да<br>
<input type="radio" name="1" value="2">Нет<br>
<input type="radio" name="1" value="3">Возможно<br>
 
<input type="radio" name="2" value="1">da<br>
<input type="radio" name="2" value="2">net<br>
<input type="radio" name="2" value="3">vozmozno<br>
 
    <input type="submit" value="Отослать форму">
</form>
</body>
</html>
В первом выберем 2 а во втором 3
А вот что будет после Submit:
PHP
1
2
print_r($_POST);
//Array ( [1] => 2 [2] => 3 )
Вот что он из себя представляет:
Array ( [name="1"] =>value="2" [name="2"] => value="3" )
или ещё проще
Array ( [вопрос_id] =>ответ_id [вопрос_id] => ответ_id )
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
11.11.2014, 11:53  [ТС]
Спасибо тебе, помог мозг на место поставить, я блин совсем тупонул и даже не подумал, что пост это многомерный массив в котором собственно и передается id вопроса. То есть я так полагаю можно сделать что-то вроде:

PHP
1
2
3
4
5
foreach ($_POST as $id_question => $val_question) {
   if ($id_question == $_SESSION['id_question']) {
      $_SESSION['id_question']['id_otveta'] = $val_question;
   } 
}
0
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
11.11.2014, 11:57
Цитата Сообщение от Maksimus1991 Посмотреть сообщение
foreach ($_POST as $id_question => $val_question) {
if ($id_question == $_SESSION['id_question']) {
$_SESSION['id_question']['id_otveta'] = $val_question;
}
}
Да)
1
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
11.11.2014, 14:55  [ТС]
Можешь подсказать, как потом массив сессии разобрать? Я что-то не понял, там вложенность идет массив, состоящий из трех массивов, каждый из которых состоит из массива?
0
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
11.11.2014, 15:16
Вот так тогда:
PHP
1
2
3
4
5
6
7
8
9
<?php
 
$_SESSION['massiv'] = $_POST;
// Гуляем.......
foreach ($_SESSION['massiv'] as $id_question => $val_question) {
        echo $id_question . ' = > ' . $val_question . '<br>';
}
 
?>
Добавлено через 3 минуты
Вот этого не надо
PHP
1
2
3
4
5
foreach ($_POST as $id_question => $val_question) {
if ($id_question == $_SESSION['id_question']) {
$_SESSION['id_question']['id_otveta'] = $val_question;
} 
}
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
11.11.2014, 15:19  [ТС]
Работает, но я не понял в чем прикол) Почему-то тот вариант, что предложил я не работал, как надо) Может подскажешь, чем моя логика не подходила?
0
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
11.11.2014, 15:32
$_SESSION[1] и $_SESSION[2]
Скажим так два разных массива. Переберать прешлосьбы весь $_SESSION, так как мы не знаем, быть может id_question = 1...1000 . и делать проверки, попали туда ли мы)
Таким образом, мы создали$_SESSION['massiv'] , в котором лежит то что нам надо и нам не надо переберать весь $_SESSION.
0
12 / 6 / 1
Регистрация: 17.01.2014
Сообщений: 135
11.11.2014, 16:02  [ТС]
Спасибо, благодаря людям не ленящимся разъяснять начинающим, что и, как правильно делать, жить становится лучше)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2014, 16:02
Помогаю со студенческими работами здесь

Unit -тестирование или автоматизированное тестирование
Доброго времени суток. Я программирую «для себя» второй год, на выходе получаются разного рода приложения от постоянно подающих с...

Тестирование (или Юнит тестирование)
Доброго времени суток, возник такой вопрос, раньше встречался на фронтенде с js тестированием, сейчас задался вопросом по поводу...

Тести́рование програ́ммного обеспе́чения(Модульное тестирование, или юнит-тестирование)
Извиняюсь перед администрацией что разместил тему в несоответствующем разделе, не мог найти про тестирование ПО. На днях встал вопрос о...

При логине на одном сайте автоматически выполнять логин на другом сайте
Здравствуйте! Есть два сайта, оба на MVC5. Реально ли сделать так чтобы при логине на одном сайте, автоматически выполнялся логин...

Как в сайте создать счетчик, на котором видно, сколько посетителей было на сайте?
Как в сайте, написанном на HTML создать счетчик, на котором видно, сколько посетителей было на сайте?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru