0) { $req_searchdate = mysql_escape_string ($req_searchdate); return "$prefix`date` >= '$req_searchdate'"; } else { $subl = mysql_escape_string($req_searchlogin); return "!(INSTR($prefix`login`,'$subl')=0)"; } return "1"; } // Выполняем команду if (isset ($req_cmd)) { if ($req_cmd == 'init') { $initres = init_database(); mysql_finish (); if ($initres) echo ''; else echo ''; } else if ($req_cmd == 'load') { $ldres = false; if (isset ($_FILES['loadfilename']['tmp_name']) && $_FILES['loadfilename']['size']) { $quest = load_questions ($_FILES['loadfilename']['tmp_name']); if ($quest) { if (isset ($req_loadoverwrite) && $req_loadoverwrite == 'on') amysql_query ("TRUNCATE TABLE `$QuestionsTable`"); if (load_into_database ($QuestionsTable, $quest)) $ldres = true; } if (is_uploaded_file ($_FILES['loadfilename']['tmp_name'])) unlink ($_FILES['loadfilename']['tmp_name']); } mysql_finish (); if ($ldres) echo ''; else echo ''; } else if ($cmd == 'plustest' || $cmd == 'minustest' || $cmd == 'cleartest') { $where_def = get_search_where (); if ($cmd == 'plustest') $result = amysql_query ("UPDATE `$UsersTable` SET `testlimit`=`testlimit`+1 WHERE $where_def"); else if ($cmd == 'minustest') $result = amysql_query ("UPDATE `$UsersTable` SET `testlimit`=`testlimit`-1 WHERE $where_def AND `testlimit`>0"); else $result = amysql_query ("UPDATE `$UsersTable` SET `testlimit`=0 WHERE $where_def"); mysql_finish (); if ($result) echo ''; else echo ''; } } // Продолжение статического содержимого ?>
Система администрирования тестирования слушателей
 

№ Логин +Тестов ФИО Город Организация Должность E-mail Телефон Опыт работы с ViPNet Зарегистрирован Результат '; $usi = 1; do { $result2 = amysql_query ("SELECT `result`, CHAR_LENGTH(`answers`) FROM `$results_table` WHERE `uid`=${row['id']} $additional_where ORDER BY -`date`,-`time` LIMIT 1"); $row2 = false; if ($result2) $row2 = mysql_fetch_row ($result2); echo " $usi " . (!$print_version ? "" : '') . "${row['login']}" . (!$print_version ? "" : '') . " ${row['testlimit']} ${row['lastname']} ${row['firstname']} ${row['thirdname']} ${row['town']} ${row['firm']} ${row['position']} ${row['email']} ${row['phone']} ${row['vipnet']} ${row['date']}
${row['time']} " . ($row2 !== false ? floor(100*$row2[0]/$row2[1]) . '%
(' . $row2[0] . '/' . $row2[1] . ')' : '') . (!$print_version ? " ..." : '') . "  "; $usi++; } while ($row = mysql_fetch_assoc ($result)); echo ''; if (!$print_version) echo '' . '' . '' . '' . '' . '' . '

'; else { echo '

Назад

'; exit; } } else if (!$result) $req_cfail = 10; else $req_cfail = 11; } // Вывод информации о пользователе и всех его результатов кратко function print_results_info ($userid = 1, $print_version = false, $users_table = false, $results_table = false, $additional_where = '') { global $UsersTable, $ResultsTable; if ($users_table === false) $users_table = $UsersTable; if ($results_table === false) $results_table = $ResultsTable; // Выдаём таблицу результатов ... $result = amysql_query ("SELECT * FROM `$users_table` WHERE `id`=$userid $additional_where LIMIT 1"); $row = mysql_fetch_assoc ($result); echo "" . "" . "" . "" . "" . "" . "" . "" . "" . ""; $result = amysql_query ("SELECT CHAR_LENGTH(`answers`), `date`, `time`, `result`, `answers`, `varid` FROM `$results_table` WHERE `uid`=$userid $additional_where ORDER BY -`date`, -`time`"); $row2 = mysql_fetch_assoc ($result); $lastrow_d = 0; if ($result || !$row2) $lastrow_d = 1; echo "

ФИО

${row['lastname']} ${row['firstname']} ${row['thirdname']}

Город

${row['town']}

Организация

${row['firm']}

Должность

${row['position']}

E-mail

${row['email']}

Телефон

${row['phone']}

Опыт работы с ViPNet

${row['vipnet']}

Зарегистрирован

${row['date']} ${row['time']}

Логин

${row['login']}

Осталось тестов

${row['testlimit']}


"; $row = $row2; if ($result && $row) { $crcnt = 1 + $row['CHAR_LENGTH(`answers`)'] - 1; echo ''; echo ''; do { $crres = 1 + $row['result'] - 1; $crper = 100 * $crres / $crcnt; echo ""; } while ($row = mysql_fetch_assoc ($result)); echo '
Вариант тестаВремяДатаРезультат
${row['varid']}${row['time']}${row['date']}$crper% ($crres / $crcnt)
'; } if (!$print_version) echo '

Версия для печати    Назад

'; else { echo '

Назад

'; exit; } } // Вывод всех результатов пользователей детально. where_def должно быть относительно таблицы t1, // то есть WHERE-определение вида t1.id=1 а не `id`=1; для additional_where возможности ограничены :) потому что оно // здесь может состоять только вида `ПОЛЕ`=ЗНАЧЕНИЕ, т.к в начало к нему приписывается function print_tests_detailed_info ($where_def, $cmdtail, $users_table = false, $results_table = false, $questions_table = false, $additional_where = false) { global $UsersTable, $ResultsTable, $QuestionsTable, $req_showall, $req_nohide; if ($users_table === false) $users_table = $UsersTable; if ($results_table === false) $results_table = $ResultsTable; if ($questions_table === false) $questions_table = $QuestionsTable; if ($additional_where !== false) $addwh = "AND t1.$additional_where AND t2.$additional_where"; else $addwh = ''; $result = amysql_query ("SELECT t1.lastname, t1.firstname, t1.thirdname, t2.* FROM `$users_table` AS t1, `$results_table` AS t2 WHERE $where_def $addwh AND t2.uid=t1.id ORDER BY t1.lastname, t1.firstname, t1.thirdname, -t2.date, -t2.time"); if ($row = mysql_fetch_assoc ($result)) { echo ''; $msg = 'Показаны неверные ответы выбранных пользователей'; if (!isset ($req_nohide)) $msg .= ' (+ неотвеченные...)'; else $msg = 'Показаны неверные и неотвеченные ответы выбранных пользователей (-)'; if (!isset ($req_showall)) $msg .= ' (все...)'; else { if (isset ($req_nohide)) $msg = 'Показаны все ответы выбранных пользователей (- правильные)(-)'; else $msg = 'Показаны ответы выбранных пользователей'; } echo ''; $notfirst = 0; while ($row) { echo ''; if ($additional_where !== false) $addwh = 'AND ' . $additional_where; else $addwh = ''; $res2 = amysql_query ("SELECT * FROM `$questions_table` WHERE `varid`=${row['varid']} $addwh ORDER BY `id`"); $quests = array (); while ($row2 = mysql_fetch_assoc ($res2)) { $quests [$row2['id']] = $row2; $quests [$row2['id']]['answer0'] = 'не отвечено'; } $allanswers = true; $noshown = true; $i = 0; foreach ($quests as $cq) { if (strlen ($row ['answers']) > $i) { if ($row['answers']{$i} != $cq['rightanswer']) { $allanswers = false; if ($row['answers']{$i} != 0 || isset ($req_nohide)) { echo ''; $noshown = false; } } else if (isset ($req_showall)) { echo ''; $noshown = false; } } $i++; } if ($allanswers) echo ''; else if ($noshown) echo ''; $row = mysql_fetch_assoc ($result); $notfirst = 1; } echo '
' . $msg . '
' . $row['lastname'] . ' ' . $row ['firstname'] . ' ' . $row ['thirdname'] . ': ' . floor (100 * $row['result'] / strlen ($row ['answers'])) . '%' . $row ['date'] . ' ' . $row ['time'] . '
' . ($i+1) . '. ' . $cq ['question'] . ' => ' . $cq ['answer' . $row['answers']{$i}] . '
' . ($i+1) . '. ' . $cq ['question'] . ' => ' . $cq ['answer' . $row['answers']{$i}] . '
Пользователь ответил на все вопросы правильно! Молодец :)
Пользователь не отвечал ни на один вопрос :(
'; } echo '

Внимание: для корректного вывода информации текущие вопросы в БД должны соответствовать тем, на которые отвечали выбранные пользователи
Назад

'; exit; } // Выполняем команды, связанные с выводом информации if (isset ($req_cmd)) { $where_def = get_search_where (); $cmdtail = (isset($req_searchdate) && strlen ($req_searchdate) > 0 ? 'searchdate=' . urlencode($req_searchdate) : 'searchlogin=' . urlencode($req_searchlogin)); if ($req_cmd == 'users' || $req_cmd == 'prnusers') print_users_info ($where_def, $cmdtail, $req_cmd == 'prnusers'); else if (($req_cmd == 'results' || $req_cmd == 'prnresults') && isset ($req_uid)) print_results_info ($req_uid, $req_cmd == 'prnresults'); else if ($cmd == 'prntests') { $where_def = get_search_where ('t1.'); print_tests_detailed_info ($where_def, $cmdtail); } } mysql_finish (); // Выводим статусные сообщения if (isset ($req_cok) || isset ($req_cfail)) { echo '
Результат операции: '; if (isset ($req_cok)) { if ($req_cok == 0) echo 'Инициализация БД прошла успешно.'; else if ($req_cok == 1) echo 'Файл успешно загружен в БД.'; else if ($req_cok == 2) echo 'Количество предписанных тестов успешно изменено.'; } else { if ($req_cfail == 0) echo 'При инициализации БД произошла ошибка.'; else if ($req_cfail == 1) echo 'При загрузке файла в БД произошла ошибка.'; else if ($req_cfail == 2) echo 'Ошибка изменения количества предписанных тестов.'; else if ($req_cfail == 10) echo 'Ошибка запроса к БД при выводе списка пользователей.'; else if ($req_cfail == 11) echo 'Таких пользователей нет.'; } echo '

'; } error_reporting (E_ALL & ~E_NOTICE); // Статическое содержимое ?>
Возможные операции
 
Вывод информации о пользователях
 
Логин (пустой=все): >
или зарегистрировавшиеся:
После YYYY-MM-DD: >
Загрузка вопросов из текстового файла
 
Файл:
Вариант этих вопросов:
Перезаписать БД вопросов
Инициализация / очистка базы данных
 
Powered by VMX, 2006