Вопрос $tmp
"; echo "$Text"; echo "
"; echo "

"; //Отображаем флажки с именами aN, где N от 1 до 6 echo "1 2"; echo "3 4"; echo "5 6"; echo "
"; echo "
"; } //============================================================== //Функция подключения к серверу function connect() { mysql_connect("localhost","root","21111326") or die(mysql_error()); mysql_select_db("TestSys"); } //============================================================== //Функция выводит список тестов в виде таблицы function GetTestList() { global $SCRIPT_NAME; echo "
Список доступных тестов :

"; echo ""; echo ""; echo ""; echo ""; echo ""; $res=mysql_query("SELECT no, nazv, author FROM reg"); while ($Row=mysql_fetch_row($res)) { echo ""; for ($i=0;$i$Row[$i]"; echo ""; } echo "
НомерНазваниеАвтор
"; } //=============================================================== //Функция проверяет введённые пользователем логин и пароль. Если // они правилины, она присваивает глобальной переменной login значение 1. function Register() { global $user, $pswd, $Accept, $Login; global $UserName, $FullName; //connect(); $Login=0; $res=mysql_query("SELECT * from ureg"); while ($Row=mysql_fetch_row($res)) { if ($Row[0]==$user) { if ($Row[1]===md5($pswd)) { $FullName=$Row[2]; $UserName=$user; $Login=1; break; } } } } //================================================================== //Основная программа connect(); Register(); if ($Login==0) { //Неправильные имя пользователя и|или пароль echo ""; echo "Система дистанционного контроля знаний
TEST SYSTEM"; echo "
STOP

ДОСТУП ЗАПРЕЩЁН.

"; echo "

Проверьте правильность введения имени пользователя и пароля"; echo ""; unset($Accept); session_unset(); //Запись попытки несанкционированного доступа в $Dir/access.log global $Dir; global $REMOTE_ADDR; @mkdir($Dir,755); $f=fopen("$Dir"."/access.log","a+") or Die("НЕВОЗМОЖНО СОЗДАТЬ ACCESS.LOG"); flock($f,2); $dt=date("d.m.y H.i.s"); if(PHP_OS=="Linux") $NL="\n"; else $NL="\n\r"; fputs($f,"$dt Access denied for user $user [$pswd]. IP:$REMOTE_ADDR $NL"); flock($f,3); fclose($f); exit; } else { //Всё ОК - выводим список тестов echo "TestSystem"; echo "

Система дистанционного контроля знаний
TestSystem

"; echo "Здравствуйте,$FullName!
"; GetTestList(); return; } connect(); if(isSet($Login)) {Register();} else { session_register("TestNo"); session_register("Arr"); session_register("Counter"); session_register("Table"); session_register("True"); session_register("Max"); session_register("Prev"); session_register("Diff"); session_register("Total"); session_register("TT"); session_register("Login"); //При первом запуске устанавливаем номер теста и инициализируем базу if(!isSet($TestNo)) { $Res=mysql_query("SELECT no,qmax,tbl FROM reg WHERE no=$tno"); $Row=mysql_fetch_row($Res); $Max=$Row[1]; $Table=$Row[2]; //Имя таблицы вопросов $ATable=$Table."_a"; //Имя таблицы ответов $Diff=$Row[3]; $QDiff=0; $Total=0; $R=@mysql_query("SELECT * FROM $ATable") or die("Неверный Sql-запрос [$ATable]"); while($Rw=mysql_fetch_row($R)) { if($Rw[0]===$UserName) { echo "Вы уже проходили выбранный тест
"; echo "Ваша оценка $Rw[1].Вы правильно ответили на $Rw[2] вопросов(а)"; GetTestList(); exit; } } $TestNo=$tno; $Counter=0; //Получаем 10 случайных номеров вопросов; все номера должны быть различны, // для проверки вводим вспомогательную функцию checkarr() function checkarr($Arr) { //Возвращает $Res=1, если номера различны, и $Res=0, если найдены совпадения $Res=1; for ($i=0; $i<10; $i++) for ($j=$i+1; $j<10; $j++) if($Arr[$i]===$Arr[$j]) {$Res=0; return $Res;} return $Res; } //Настраиваем генератор случайных чисел на новую последовательность mt_srand(time()+(double)microtime()*1000000); //Получаем массив $Quest for ($i=0; $i<9; $i++) $Quest[]=mt_rand(0,$Max); while(checkarr($Quest)==0) { for ($i=0; $i<9; $i++) $Quest[$i]=mt_rand(0,$Max); } //Записываем полученный массив в Cookie для возобновления прерванного теста, // предварительно преобразовав его в строку $Arr=serialize($Quest); //Первый вопрос $Res=mysql_query("SELECT * FROM $Table WHERE no=$Quest[$Counter]"); $Row=mysql_fetch_row($Res); $Prev=$Row[2]; $Text=$Row[1]; $Diff=$Row[3]; GetQuestText(); } // //if (!isSet($TestNo)) else { //не первый запуск: получен ответ на предыдущий вопрос if (!isSet($a1)) $a1=""; if (!isSet($a2)) $a2=""; if (!isSet($a3)) $a3=""; if (!isSet($a4)) $a4=""; if (!isSet($a5)) $a5=""; if (!isSet($a6)) $a6=""; //Сравниваем ответы, преобразованные в строку со значением поля TRUE // (переменная $Prev) $Answer=$a1.$a2.$a3.$a4.$a5.$a6; if ($Answer===$Prev) { //Количество правильных ответов $True=@$True+1; $Trusted='Y'; //Сумма с учётом сложности if ($Diff=='Y') $Tjtal=$Total+3; else $Total=$Total+1; } else $Trusted=('N'); //Максимальная сумма с учётом сложности if ($Diff=='Y') $TT=$TT+3; else $TT=$TT+1; if($Counter===9) { //10 вопросов предъявлены, завершаем работу $Exp=($Total*100)/$TT; if ($Exp>=90) $Mark=5; else if($Exp>=75) $Mark=4; else if($Exp>=50) $Mark=3; else $Mark=2; mysql_query("INSERT INTO $ATable Values('$UserName','$Mark','$True')"); $msg="
$FullName, вы ответили правильно на $True вопросов(а)"; $msg=$msg+"
Вы набрали $Total баллов из возможных $TT($Exp)%"; $msg=$msg+"
Ваша оценка: $Mark"; echo $msg; session_unset(); exit; } //Иначе задаём следующий вопрос $Quest=unserialize($Arr); $Res=mysql_query("SELECT * FROM $Table WHERE no=$Quest[$Counter]"); $Row=mysql_fetch_row($Res); $Prev=$Row[2]; $Text=$Row[1]; $Diff=$Row[3]; $Counter=$Counter+1; GetQuestText(); }//if (!isSet($TestNo)) }//if (!isSet($Login)) ?>