Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Страница вывода тестов




Сюда приходит POST-запрос с идентификатором теста, от которого много зависит в дальнейшем. Потому что эта страница выводит разные тесты, с помощью полученных данных из POST-запроса сервер выводит нужный тест:

$test = $_POST['test'];

В основном вывод вопросов и ответов происходит по одному алгоритму, в цикле DO-WHILE, но каждый тест имеет ряд особенностей, поэтому перед выводом теста мы проверяем, какой надо выводить тест, обычной проверкой:

if ($test == "1") {};

Рисунок 2.5 - Иллюстрация первого теста

 

На странице также присутствует счётчик количества посещений страницы, который служит для вывода номера вопроса-ответа:

$numb = 1;

$numb = $numb + $_POST['numb'];

При первом посещении этой страницы, переменная $_POST['numb'] не существует, поэтому переменная $numb остаётся равной 1. После ответа на вопрос отправляется несколько POST-запросов, один из них это номер вопроса, на который отправляется ответ и каждый раз отправляется номер теста, для вывода выбранного теста:

echo "<form method=\"post\" action=\"test.php\" id=\"myform\">

<input type=\"hidden\" name=\"numb\" value=\"" . $numb . "\">

<input type=\"hidden\" name=\"test\" value=\"" . $test . "\">";

Вывод вопросов производится при помощи цикла FOR, перед выводом происходит подключение к базе данных и делается выборка из таблицы согласно условиям выбранного теста:

$result = mysql_query("SELECT * FROM test_$test WHERE num_question='$numb'",$db);

$myrow = mysql_fetch_array($result);

Выборка будет сделана из таблицы test_$test, где $test – это номер теста, который пришёл нам с страницы выбора теста. Так как это переменная, то этот алгоритм подходит для вывода любого теста из базы данных.

Далее мы опять делаем MySQL-запрос к базе данных, для выяснения количества вопросов в выбранном тесте. Результат этого запроса заносится в переменную $if которая в дальнейшем будет использоваться в качестве условия выполнения вывода вопросов:

$result_if = mysql_query("SELECT num_question FROM test_$test ORDER BY num_question DESC",$db);

$myrow_if = mysql_fetch_array($result_if);

$if = $myrow_if['num_question'] + 1;

Переменную $if я намеренно увеличил на 1, так как если в тесте 25 вопросов, то ответ на 25 вопрос придёт когда $numb будет равна 26, если не увеличивать эту переменную на единицу, то когда переменная $if будет равна $numb вывод вопросов тестирования закончится, и попросту 25 вопрос не отобразится.

if ($numb < $if){

echo "<form action=\"test.php\" method=\"post\">";

Вывод номера вопроса и теста вопроса:

echo "Вопрос: " . $myrow['num_question'] . "<hr>" . $myrow['question_string'] . "<br>";

Так как максимальное количество ответов во всех тестах равно 5, то цикл делает 5 повторений:

for ($otv = 1; $otv <= 5; $otv++){

Производим проверку на присутствие текста ответа в переменной $myrow["question_values$otv"], если переменная непустая то выполняется её вывод:

if ($myrow["question_values$otv"] <> ''){

В 3м тесте за счёт его индивидуальности производится отличный от других тестов заполнение скрытых полей формы и дополнительный вывод шкалы уверенности в выбранном ответе:

Рисунок 2.6 – иллюстрация 3го теста

 

if ($test == "3"){

$abc_otv = $otv + 223;

echo "<label><input name=\"q_" . $myrow['num_question'] . "\" type=\"radio\" value=\"" . chr($abc_otv) . "\">" . $myrow["question_values$otv"] . "</label><br>";

echo "<br>Насколько Вы уверены в своем выборе?<br>

<table width=\"100%\" cellspacing=\"2\" cellpadding=\"0\" bgcolor=\"#F0F0F0\" align=\"center\" class=\"TableQuestion\">

<tr>

<td align=\"right\">Совершенно</td>";

for ($j = 10 ; $j > 0 ; $j=$j-1){

echo "<td align=\"center\">$j</td>";}

echo "<td>Далеко</td></tr>

<tr><td align=\"right\">уверен</td>";

for ($k = 10 ; $k > 0 ; $k=$k-1){

echo "<td align=\"center\"><input type=\"radio\" name=\"qs$numb\" value=\"$k\"></td>";}

echo "<td>не уверен</td></tr></table><br>";

}

Во всех других случаях, если номер выбранного теста отличен от 3го, происходит заполнение скрытых полей формы по одному образцу:

Рисунок 2.7 – Иллюстрация 2го теста

 

else {

echo "<label><input name=\"q_" . $myrow['num_question'] . "\" type=\"radio\" value=\"" . $otv . "\">" . $myrow["question_values$otv"] . "</label><br>\r\n";

}

}

echo "</td></tr></table><br>\r\n\r\n";

echo

"<center><input type=\"submit\" name=\"okbutton\" value=\"Следующий\">" .

"<input type=\"hidden\" name=\"test\" value=\"" . $test . "\">" .

"<input type=\"hidden\" name=\"numb\" value=\"" . $numb . "\">" .

"</form></center></table>";

}

В ситуации когда переменная $numb становится равной переменной $if, такое происходит когда пользователь ответил на все предложенные вопросы выдаётся сообщение о окончании тестирования:

echo "

<table border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"2\" width=\"640px\"><tr><td>

<center>

<p>Тест закончен... <br><a href=\"choice_test.php\">Выбрать другой тест</a><br><a href=\"hiden_php/exit.php\">Выход</a></p>

</td></table>";

}

}

Рисунок 2.8 – Сообщение об оконченном тестировании

 

Запись выбранных ответов ведётся с каждым обращением к этой странице, на этой странице одновременно выполняется вывод нового вопроса и запись ответа в БД на предыдущий вопрос, который приходит при помощи POST-запроса:

$otvet = $numb - 1;

$_POST["q_$otvet"] и $_POST["qs$otvet"]

Действия записи или обновления данных в базе данных. При первом посещении этой страницы if ($numb == 1) в базу данных делается MySQL запрос, на обновление результатов, а точнее если тестируемый решил повторно пройти тест, то ответы предыдущего прохождения стираются, чтобы не было наложения старых и новых ответов. А если тестируемый первый раз проходит тестирования, этот запрос попросту создаёт новую запись в базе данных:

if ($numb == 1) mysql_query("UPDATE test_values SET test_values_$test='' WHERE pid='$pid'",$db);

$result_3 = mysql_query("SELECT * FROM test_values WHERE pid='$pid'",$db);

$myrow_3 = mysql_fetch_array($result_3);

Так как все действия по записи данных в базе данных логичны только на втором обращении к странице ($numb > 1) когда приходит ответ наа ей вопрос, то оператору IF мы пишем такое условие:

if ($numb > 1) {

Так как записи новых данных по времени прохождения тестирования производится методом дописывания нового ответа к старому, то делается проверка, если в базе данных есть уже запись под этим идентификатором:

if ($pid == $myrow_3['pid']) {

MySQL запросом мы делаем выборку данных из базы данных ответов:

$result_2 = mysql_query("SELECT * FROM test_values WHERE pid='$pid'",$db);

Переменной $valSQL присваивается значение ответов на предыдущие вопросы:

$valSQL = mysql_fetch_array($result_2);

Процедура добавления нового значения ответа на последний вопрос выглядит следующим образом:

Сначала проверяется, если идёт обработка 3го теста, то выполняется сценарий записи новых значений с двумя ответами:

if ($test == '3') {

Переменной $val присваивается значение $valSQL["test_values_$test"] где находятся ответы на предыдущие вопросы, затем приплюсовывается значение $_POST["q_$otvet"] – ответ на вопрос, и приплюсовывается $_POST["qs$otvet"] – ответ который тестируемый выбирает в шкале уверенности:

$val = $valSQL["test_values_$test"] . $_POST["q_$otvet"] . $_POST["qs$otvet"] . " ";

Далее значение переменной $val записывается в базу данных ответов, в ячейку который соответствует идентификатору тестируемого:

$update_value = mysql_query("UPDATE test_values SET test_values_$test='$val' WHERE pid='$pid'",$db);

}

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

else

Переменной $val присваивается значение ответов на предыдущие вопросы и пристыкуется новый ответ, полученный методом POST из формы:

$val = $valSQL["test_values_$test"] . $_POST["q_$otvet"];

Затем новое значение переменной $val записывается в базу данных:

$ update_value = mysql_query("UPDATE test_values SET test_values_$test='$val' WHERE pid='$pid'",$db);

}

Если тестируемый зашёл первый раз для прохождения этого теста, то создаётся новая запись в базе данных, а не её обновление как описано выше:

else {

Сначала проверяется, если идёт обработка 3го теста, то выполняется сценарий записи новых значений с двумя ответами:

if ($test == '3') {

Переменной $val присваивается значение $_POST["q_$otvet"] – ответ на вопрос, и приплюсовывается $_POST["qs$otvet"] – ответ который тестируемый выбирает в шкале уверенности:

$val = $_POST["q_$otvet"] . $_POST["qs$otvet"] . " ";

Далее значение переменной $val записывается в базу данных ответов, в ячейку который соответствует идентификатору тестируемого:

$insert_value = mysql_query("INSERT INTO test_values (pid, test_values_$test) VALUES('$pid','$val')",$db);

}

else {

В этом исключении происходит создании записи в базе данных для тестов отличных от 3го, где на каждый вопрос по одному ответу. Переменной $val присваивается значение ответа, который мы получили из формы на предыдущей странице:

$val = $_POST["q_$otvet"];

Затем значение этой переменной и идентификатор тестируемого мы записываем в базу данных:

$insert = mysql_query("INSERT INTO test_values (pid, test_values_$test) VALUES('$pid','$val')",$db);

}}}

По окончанию теста, выдаётся табличка с ссылками на выбор другого теста или выход из системы:

echo "

<table border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"2\" width=\"640px\"><tr><td>

<center>

<p>Тест закончен... <br><a href=\"choice_test.php\">Выбрать другой тест</a><br><a href=\"hiden_php/exit.php\">Выход</a></p>

</td></table>";

 

2.7 Административная страница отчётов

Вход на данную страницу возможен только при вводе пароля, который известен только администратору сайта. При входе на данную страницу проверяется наличие в Сессии PHP ключа:

$propusk = $_SESSION['key'];

if ($propusk == "12345"){код страницы};

Если в Сессии есть ключ, то выполняется вывод всего содержимого страницы на экран администратору.

Если ключ в сессии есть, но он не совпадает, система выводит сообщение о неверном ключе доступа и и выводится форма для повторного заполнения пароля:

else {

if ($propusk <> ''){

echo "<p>Неверный ключ</p><p>Введите ключ доступа:<form method=\"POST\" action=\"otchet.php\">\r\n<input name=\"key\" type=\"password\" id=\"key\" maxlength=\"8\"><input type=\"submit\" value=\" ok \"></form></p>";}

}

Если ключ вообще не существует, переменная $propusk и $_SESSION['key'] не существуют, значит пользователь первый раз посетил эту страницу, и система предлагает ввести ключ доступа, который в дальнейшем будет записан в Сессию PHP ($_SESSION['key']) и соответственно будет присвоен переменной $propusk:

else{

echo "<p>Введите ключ доступа:<form method=\"POST\" action=\"otchet.php\">\r\n<input name=\"key\" type=\"password\" id=\"key\" maxlength=\"8\"><input type=\"submit\" value=\" ok \"></form></p>;

}

}

Основное назначение этой страницы – создавать текстовые файлы результатов прохождения тестирования пользователями, эти текстовые файлы определённого формата хранятся на сервере, в каталоге, где расположен сайт в папке (otchet_att). На этой странице можно формировать 3 разных вида отчётов:

- индивидуальный файл отчёта, в нём будет написана информация только о конкретном тестируемом

- файл отчёта по организации, в нём будет выписана информация о прохождении тестирования всеми работниками выбранной организации

- полный отчёт, в нём будет выписана информация обо всех пользователях, которые проходили тестирование

 

2.7.1 Файл отчёта по организации

 

Рисунок 2.9 – Иллюстрация по созданию отчёта по организации

 

В самом верхнем блоке страницы, сервер формирует выпадающий список организаций, работники которых проходили тестирование. Для формирования текстового файла необходимо выбрать нужную организацию и нажать кнопку формы «ok». На языке PHP это выглядит так:

echo "<p>Отчёт по организации:</p>

<form action=\"otchet.php\" method=\"POST\">

<select name=\"org_otch\" id=\"org_otch\">\r\n<option value=\"...\">(Выбрать)</option>";

Выполняем SQL-запрос к базе данных, в результате в переменную $view_org_otchet присваивается наименование организации, в которой тестируемый работает, вся эта информация берётся из таблицы регистрационных данных тестируемых:

$org_otchet = mysql_query ("select * from registr");

$view_org_otchet = mysql_fetch_array ($org_otchet);

Затем с помошью цикла DO-WHILE перебираем все места работы тестируемых, которые есть в базе данных:

do{

В базе данных может содержаться много тестируемых из одной организации, поэтому надо написать алгоритм, чтобы не было повторений наименований организаций в выпадающем списке. Переменная $num_firm++ при первом обращении становится равной 1, и так как это первый проход цикла, то в выпадающий список выписывается самая первая организация:

$num_firm++;

if ($num_firm == '1') {

echo "<option value=\"" . $view_org_otchet['org'] . "\">" . $view_org_otchet['org'] . "</option>";

В массив переменной $firma[1] записывается наименование организации, которая была вписана в выпадающий список, это нужно для дальнейшего сравнения на совпадение:

$firma["$num_firm"] = $view_org_otchet['org'];

}

Этот сценарий начинает работать со второго прохода цикла, и тут уже каждое наименование фирмы, которое пришло из базы данных, нужно проверять на уникальность, чтобы не было в выпадающем списке повторений:

else {

$nesovpal = 0;

Переменная $nesovpal хранит в себе значение несовпадений наименования организации, которая сравнивается в данном проходе цикла. При проверки каждого нового наименования фирмы эта переменная обнуляется. Каждое новое значение наименования фирмы записывается в массив переменной $firma["$num_firm"], для дальнейшего сравнения на уникальность:

$firma["$num_firm"] = $view_org_otchet['org'];

При помощи цикла FOR мы сравниваем наименование организации которое пришло из базы данных, со всеми предыдущими наименованиями:

for ($a = 1; $a < $num_firm; $a++){

Если значение в переменной $view_org_otchet['org'] равно значению переменной $firma[$a] значит что найдено совпадение, и наименование организации которое пришло из базы данных уже выписано в выпадающий список. В этом случае никаких операций не происходит, и программа заканчивает этот проход цикла и начинается следующий, так сравниваются все значения нового наименования и всех значений организаций, которые находятся в массиве переменной $firma[$a]:

if ($view_org_otchet['org'] === $firma[$a]) {}

Если значения переменных не совпали, значит в данном случае найдено уникальное наименование организации, но перед выводом её в выпадающий список надо ещё сделать одну проверку, программа просто прибавляет на единицу значение переменной $nesovpal:

else {

$nesovpal++;

Если значение переменной $nesovpal равно значению переменной $num_firm – 1, это означает что наименование фирмы точно уникально и его нужно внести в выпадающий список наименований организаций:

if ($nesovpal == $num_firm - 1){

echo "<option value=\"" . $view_org_otchet['org'] . "\">" . $view_org_otchet['org'] . "</option>";

}}}}}

while ($view_org_otchet = mysql_fetch_array ($org_otchet));

echo "<input type=\"submit\" value=\" ok \"></form></table></form>";

Выше описан только алгоритм создания выпадающего списка организаций, но основной идеей этой страницы является создание текстового файла. Для начала мы проверяем, пришёл POST-запрос из формы выбора организации:

if ($_POST['org_otch'] <> ''){

$firma = $_POST['org_otch'];

Отчёты хранятся в отдельной папке для удобства, для начала их создания, нужно сменить каталог (по стандарту выставлен каталог, где расположена страница), меняем каталог на "otchet_txt":

chdir("otchet_txt");

Делаем выборку из базы данных, выбираются все поля из таблицы регистрационных данных, где поле Работа выбрана организация которая нас интересует:

$search_org = mysql_query("select * from registr where org='$firma'");

$view_org = mysql_fetch_array($search_org);

Файлы отчёта уникальны, чтобы не было засорения на сервере при создании нового отчёта старый удаляется:
if (file_exists("firma.att") == 'TRUE') {

unlink("firma.att"); }

С помошью цикла DO-WHILE перебираем все записи в базе данных:

do

{

Переменной $pid_view_values присваиваем значение персонального идентификатора тестируемого, это значение участвует в другом запросе к базе данных, в котором берутся данные о прохождении теста пользователем:

$pid_view_values = $view_org['pid'];

$otveti = mysql_query("SELECT * FROM test_values where pid='$pid_view_values'");

$view_otveti = mysql_fetch_array($otveti);

С помощью функции fopen открываем файл firma.att с атрибутом 'a' (Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.):

$f = fopen("firma.att" , 'a');

Далее функцией fwrite производим запись данных из базы в текстовый файл отчёта:

fwrite($f, $shift9 . $view_org["org"] . ", " . $view_org["date"] . $shift0 . "\r\n");

fwrite($f, "1.ФАМ:" . $view_org["name"] . " 2.ИМЯ:" . $view_org["last_name"] . " 3.ОТЧ:" . $view_org["otchestvo"] . " Пол:" . $view_org["sex"] ."\r\n");

fwrite($f, "4.ГОРОД:" . $view_org["place_job"] . "5.ОРГАНИЗАЦИЯ:" . $view_org["org"] . "\r\n");

fwrite($f, "6.ПОДРАЗДЕЛЕНИЕ:" . $view_org["unit"] . " 7.ДОЛЖНОСТЬ:" . $view_org["position"] . "\r\n");

fwrite($f, "8.ГОД РОЖДЕНИЯ:" . $view_org["year"] . " 9.ОБЩ. ТРУД. СТАЖ:" . $view_org["experience"] . " 10.В ДАННОЙ ОРГ-ИИ С:" . $view_org["org_year"] . "\r\n");

fwrite($f, "11.В ЗАНИМАЕМОЙ ДОЛЖНОСТИ С:" . $view_org["position_year"] . " 12.ОБРАЗОВАНИЕ:" . $view_org["education"] . "\r\n");

fwrite($f, "13.В:" . $view_org["educ_year"] . " ГОДУ ЗАКОНЧИЛ:" . $view_org["name_educ"] . "\r\n");

fwrite($f, "14.ПО СПЕЦИАЛЬНОСТИ:" . $view_org["position_educ"] . "\r\n");

fwrite($f, "ТЕЛЕФОН: РАБОЧИЙ " . $view_org["tel_work"] . " ДОМАШНИЙ:" . $view_org["tel_home"] . "\r\n");

fwrite($f, "16.ОСНОВНЫЕ ЦЕЛИ ДЕЯТЕЛЬНОСТИ И РЕШАЕМЫЕ ЗАДАЧИ:" . $view_org["goal"] . "\r\n");

fwrite($f, "РАВЕН:" . $view_otveti["test_values_1"] . "\r\n");

fwrite($f, "ВЕРБАЛЬНЫЙ:" . $view_otveti["test_values_2"] . "\r\n");

fwrite($f, "СИТУАЦИОННЫЙ:" . $view_otveti['test_values_3'] . "\r\n");

fwrite($f, "ПСИХОЛОГИЧЕСКИЙ:\r\n");

В базе данных, в таблице где находятся ответы на 4й тест, ответы написаны непрерывным списком, а для файла отчёта нужно использовать шаблон выписки ответов, поэтому мы разбиваем длинную строку на 4 функцией substr(переменная, начало, длина), и присваиваем их переменным:

$otvet_60 = substr($view_otveti['test_values_4'], 1, 60);

$otvet_120 = substr($view_otveti['test_values_4'], 61, 60);

$otvet_180 = substr($view_otveti['test_values_4'], 121, 60);

$otvet_235 = substr($view_otveti['test_values_4'], 181, 55);

fwrite($f, "1- 60:" . $otvet_60 . "\r\n");

fwrite($f, "61-120:" . $otvet_120 . "\r\n");

fwrite($f, "121-180:" . $otvet_180 . "\r\n");

fwrite($f, "181-235:" . $otvet_235 . "\r\n\r\n");

fclose($f);

}

while ($view_org = mysql_fetch_array($search_org));

По окончанию записи в файл выдаётся сообщение, что файл отчёта был создан и ссылка на его скачивание с сервера:

echo "<table class=\"TableQuestion\" align=\"center\" width=\"95%\" cellpadding=\"0\"><tr><td>

<p>Файл отчёта по организации $firma создан (<a href=\"otchet_txt/firma.att\" target=\"_blank\">firma.att</a>)</p></center>

</td></tr></table>";

Рисунок 2.10 - Сообщение о создании отчёта по организации

 

2.7.2 Индивидуальный файл отчёта

 

В среднем блоке страницы выводится информация о всех пользователях, которые существуют в базе данных. Информация представлена в таблице, в которой выписаны ФИО тестируемых и отмечены тесты, которые они проходили. В самой последней колонке таблицы присутствует кнопка «Записать в отчёт». При нажатии на эту кнопку на сервер отправляется форма:

<input name=\"number_action\" value=\"" . $i . "\" type=\"hidden\">, с командами на выполнение операции по формированию индивидуального отчёта по тестируемому. Значение, которое приходит из формы, с информацией какого именно тестируемого из базы данных записать в файл индивидуального отчёта присваиается пременной $man, далее вся работа будет происходить с этой переменной.

$man = $_POST['number_action'];

Если администратор нажал на кнопку «Записать в отчёт», то переменная $man будет иметь значение, и будет выполняться условия, в противном случае эта часть кода просто пропускается

if ($man <> ' ') {условия}

Для записи в внешний файл используются функции fopen() и fwrite(). Для начала опять меняем каталог с стандартного где хранится страница, на каталог созданный специально для таких текстовых файлов отчётов:

chdir("otchet_txt");

Делаем выборку из базы данных для конкретного тестируемого:

$otveti = mysql_query("SELECT * FROM test_values WHERE pid='$pid_post'");

$view_otveti = mysql_fetch_array($otveti);

Функцие открываем текстовый файл индивидуального отчёта (otchet.att) с атрибутом 'w' (Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует - пробует его создать.). Открываем именно с этим атрибутом, так как если есть индивидуальный файл отчёта с данными другого тестируемого, функция с таким атрибутом удаляет всю старую информацию и записывает новую. Таким образом не создаётся много файлов и старая информация удаляется:

$f = fopen('otchet.att' , 'w');

Далее записываем все интересующие данные в файл:

fwrite($f, $org["$man"] . ", " . $data["$man"] . "\r\n");

fwrite($f, "1.ФАМ:" . $name["$man"] . " 2.ИМЯ:" . $last_name["$man"] . " 3.ОТЧ:" . $otchestvo["$man"] . " Пол:" . $sex["$man"] ."\r\n");

fwrite($f, "4.ГОРОД:" . $place_job["$man"] . "5.ОРГАНИЗАЦИЯ" . $org["$man"] . "\r\n");

fwrite($f, "6.ПОДРАЗДЕЛЕНИЕ:" . $unit["$man"] . " 7.ДОЛЖНОСТЬ:" . $position["$man"] . "\r\n");

fwrite($f, "8.ГОД РОЖДЕНИЯ:" . $year["$man"] . " 9.ОБЩ. ТРУД. СТАЖ:" . $experience["$man"] . " 10.В ДАННОЙ ОРГ-ИИ С:" . $org_year["$man"] . "\r\n");

fwrite($f, "11.В ЗАНИМАЕМОЙ ДОЛЖНОСТИ С:" . $position_year["$man"] . " 12.ОБРАЗОВАНИЕ:" . $education["$man"] . "\r\n");

fwrite($f, "13.В:" . $educ_year["$man"] . " ГОДУ ЗАКОНЧИЛ:" . $name_educ["$man"] . "\r\n");

fwrite($f, "14.ПО СПЕЦИАЛЬНОСТИ:" . $position_educ["$man"] . "\r\n");

fwrite($f, "ТЕЛЕФОН: РАБОЧИЙ " . $tel_work["$man"] . " ДОМАШНИЙ:" . $tel_home["$man"] . "\r\n");

fwrite($f, "16.ОСНОВНЫЕ ЦЕЛИ ДЕЯТЕЛЬНОСТИ И РЕШАЕМЫЕ ЗАДАЧИ:" . $goal["$man"] . "\r\n");

fwrite($f, "РАВЕН:" . $view_otveti["test_values_1"] . "\r\n");

fwrite($f, "ВЕРБАЛЬНЫЙ:" . $view_otveti["test_values_2"] . "\r\n");

fwrite($f, "СИТУАЦИОННЫЙ:" . $view_otveti['test_values_3'] . "\r\n");

fwrite($f, "ПСИХОЛОГИЧЕСКИЙ:\r\n");

В базе данных, в таблице где находятся ответы на 4й тест, ответы написаны непрерывным списком, а для файла отчёта нужно использовать шаблон выписки ответов, поэтому мы разбиваем длинную строку на 4 функцией substr(переменная, начало, длина), и присваиваем их переменным:

$otvet_60 = substr($view_otveti['test_values_4'], 1, 60);

$otvet_120 = substr($view_otveti['test_values_4'], 61, 60);

$otvet_180 = substr($view_otveti['test_values_4'], 121, 60);

$otvet_235 = substr($view_otveti['test_values_4'], 181, 55);

fwrite($f, "1- 60:" . $otvet_60 . "\r\n");

fwrite($f, "61-120:" . $otvet_120 . "\r\n");

fwrite($f, "121-180:" . $otvet_180 . "\r\n");

fwrite($f, "181-235:" . $otvet_235 . "\r\n");

fclose($f);

По окончанию всех действий администратору выдаётся информационный блок, где говорится, что файл создан и даётся ссылка на его скачивание:

<center>В файл выборочного отчёта (<a href=\"otchet_txt/otchet.att\" target=\"_blank\">otchet.att</a>) <br>записана информация по тестируемому:<br> " . $name["$man"] . " " . $last_name["$man"] . "</center>

 

Рисунок 2.11 – Сообщение о создании индивидуального отчёта

 

2.7.3 Общий отчёт

 

При формировании таблицы, где отображаются все пользователи, которые проходили тестирование, все данные о пользователях записываются с массивы переменных. Эти переменные используются как для вывода всех пользователей прошедших тестирование на экран, так и для записи данных в отдельный файл отчёта. Если сервер получил POST-запрос с именем 'all_otchet' и значением равным '1', то формируется полный отчёт тестируемых:

if ($_POST['all_otchet'] == 1) {

Отчёты хранятся в отдельной папке для удобства, для начала их создания, нужно сменить каталог (по стандарту выставлен каталог, где расположена страница), меняем каталог на "otchet_txt":

chdir("otchet_txt");

Выполняем запрос к базе данных и берём из неё значения пройденных тестов:

$otveti = mysql_query("SELECT * FROM test_values");

Файлы отчёта уникальны, чтобы не было засорения на сервере при создании нового отчёта старый удаляется:
if (file_exists("otchet_all.att") == 'TRUE'){

unlink("otchet_all.att");}

С помощью цикла FOR будем перебирать все пользователей по очереди и дописывать их данные в отчёт:

for ($k = 1; $k <= $i; $k++){

Переменной $view_otveti присваиваем значение строки из базы данных:

$view_otveti = mysql_fetch_array($otveti);

Открываем файл 'otchet_all.att' с атрибутом 'a' (Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.):

$f = fopen("otchet_all.att" , 'a');

Затем записываем все данные из базы данных в внешний файл полного отчёта:

fwrite($f, $shift9 . $org["$k"] . ", " . $data["$k"] . $shift0 . "\r\n");

fwrite($f, "1.ФАМ:" . $name["$k"] . " 2.ИМЯ:" . $last_name["$k"] . " 3.ОТЧ:" . $otchestvo["$k"] . " Пол:" . $sex["$k"] ."\r\n");

fwrite($f, "4.ГОРОД:" . $place_job["$k"] . "5.ОРГАНИЗАЦИЯ" . $org["$k"] . "\r\n");

fwrite($f, "6.ПОДРАЗДЕЛЕНИЕ:" . $unit["$k"] . " 7.ДОЛЖНОСТЬ:" . $position["$k"] . "\r\n");

fwrite($f, "8.ГОД РОЖДЕНИЯ:" . $year["$k"] . " 9.ОБЩ. ТРУД. СТАЖ:" . $experience["$k"] . " 10.В ДАННОЙ ОРГ-ИИ С:" . $org_year["$k"] . "\r\n");

fwrite($f, "11.В ЗАНИМАЕМОЙ ДОЛЖНОСТИ С:" . $position_year["$k"] . " 12.ОБРАЗОВАНИЕ:" . $education["$k"] . "\r\n");

fwrite($f, "13.В:" . $educ_year["$k"] . " ГОДУ ЗАКОНЧИЛ:" . $name_educ["$k"] . "\r\n");

fwrite($f, "14.ПО СПЕЦИАЛЬНОСТИ:" . $position_educ["$k"] . "\r\n");

fwrite($f, "ТЕЛЕФОН: РАБОЧИЙ " . $tel_work["$k"] . " ДОМАШНИЙ:" . $tel_home["$k"] . "\r\n");

fwrite($f, "16.ОСНОВНЫЕ ЦЕЛИ ДЕЯТЕЛЬНОСТИ И РЕШАЕМЫЕ ЗАДАЧИ:" . $goal["$k"] . "\r\n");

fwrite($f, "РАВЕН:" . $view_otveti["test_values_1"] . "\r\n");

fwrite($f, "ВЕРБАЛЬНЫЙ:" . $view_otveti["test_values_2"] . "\r\n");

fwrite($f, "СИТУАЦИОННЫЙ:" . $view_otveti['test_values_3'] . "\r\n");

fwrite($f, "ПСИХОЛОГИЧЕСКИЙ:\r\n");

$otvet_60 = substr($view_otveti['test_values_4'], 1, 60);

$otvet_120 = substr($view_otveti['test_values_4'], 61, 60);

$otvet_180 = substr($view_otveti['test_values_4'], 121, 60);

$otvet_235 = substr($view_otveti['test_values_4'], 181, 55);

fwrite($f, "1- 60:" . $otvet_60 . "\r\n");

fwrite($f, "61-120:" . $otvet_120 . "\r\n");

fwrite($f, "121-180:" . $otvet_180 . "\r\n");

fwrite($f, "181-235:" . $otvet_235 . "\r\n");

fclose($f);

По завершению всех операций выдаётся информационный блок, где выписано, что всё прошло успешно и даётся ссылка на скачивание отчёта:

<center>Файл полного отчёта создан (<a href=\"otchet_txt/otchet_all.att\" target=\"_blank\">otchet_all.att</a>)</center>

Рисунок 2.12 – Сообщение о созданном полном отчёте


Поделиться:

Дата добавления: 2015-08-05; просмотров: 100; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты