Министерство образования и науки РФ
Новосибирский Государственный Технический Университет
Кафедра ВТ
Лабораторная работа № 3
по дисциплине «Инфокоммуникации»
«Создание тестовой системы и счетчика посещений страницы средствами CGI и PHP»
Факультет: АВТ Преподаватель: Новицкая Ю.В.
Группа: АМ-509
Студент: Трегубов И.Г.
Волынцев А.А.
Новосибирск, 2009 г.
Разработать CGI-модуль и PHP-скрипт.
Вариант 1
CGI. Проверка знания правил дорожного движения и текстовый счетчик посещения страницы.
PHP. Проверка знаний правил дорожного движения с записью результатов прохождения теста разными пользователями в файл и вывода результатов в виде диаграммы.
CGI – модуль в данной работе представляет собой скомпилированный с помощью Microsoft Visual Studio .exe файл.
Приведем кода CGI - модуля:
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <fstream.h>
char *GetName(char *out,char *in) // функция извлечения информации о сдающем
{
char *tmp1,*tmp2; // два указателя для продвижения
tmp1=strstr(in,"&"); // возвращаем часть строки, начинающуюся с первого вхождения &
tmp1[0]=0;
tmp2=strstr(in,"="); // возвращаем часть строки, начинающуюся с первого вхождения =
tmp2++; // переводим указатель на символ вперед
strcpy(out,tmp2); // копирование значения
++tmp1;
return ++tmp1; // перевод указателя дальше
}
char *GetVal(int *out,char *in) // функция извлечения значений
{
char *tmp1,*tmp2;
if(strstr(in,"&")) {tmp1=strstr(in,"&"); tmp1[0]=0;}
else
{
tmp2=strstr(in,"=");// возвращаем часть строки, начинающуюся с первого вхождения =
tmp2++;
*out=atoi(tmp2); // преобразуем из строки в число
return NULL;
}
tmp2=strstr(in,"="); // возвращаем часть строки, начинающуюся с первого вхождения =
tmp2++; // переводим указаетль на символ вперед
*out=atoi(tmp2); // перевод в int и передаем на выход
return ++tmp1;
}
void main()
{
char *name1=new char[20];
char *name2=new char[20];
char *name3=new char[20];
char *tmp, *ocenka;
int v1,v2,v3,v4,v5,count,count2;
v1=v2=v3=v4=v5=count=count2=0; // инициализация
char *query=getenv("QUERY_STRING"); // устанавливаем указатель на переменную среды
if(!query) return; // если переменной не существует, то реализуем возврат
tmp = new char[80];
strcpy(tmp,query); // копируем строку
tmp=GetName(name1,tmp); // получаем фамилию
tmp=GetName(name2,tmp); // имя
tmp=GetVal(&v1,tmp); // значения переменных в ответах
tmp=GetVal(&v2,tmp);
tmp=GetVal(&v3,tmp);
tmp=GetVal(&v4,tmp);
tmp=GetVal(&v5,tmp);
count=v1+v2+v3+v4+v5;
if (count==5) ocenka="тест пройден";
else ocenka="тест не пройден";
cout<<"Content-type:text/html\n\n"; // вывод сформированного документа о результатах
cout<<"<html>";
cout<<"<body bgcolor=yellow>";
cout<<"<h3><u>Результаты</u></h3>";
cout<<"<b>Ученик:</b> "<<name1<<" "<<name2<<"<br>";
cout<<"<b>Правильных ответов: </b>"<<count<<" из 5<br>";
cout<<"<b>Итог: </b>"<<ocenka;
ifstream fin("count.txt");
int cnt;
fin>>cnt;
cnt++;
fin.close();
cout<<"<br><h4>Тест проходили уже "<<cnt<<" раз(а).</h3>";
cout<<"</html>";
ofstream fout("count.txt");
fout<<cnt;
fout.close();
}
Данный скрипт является обработчиком html формы, которая для CGI и для PHP скриптов является аналогичной (описание обработчика в пункте 2.3)
<?
echo "<html><body bgcolor=yellow>";
if (!isSet($_COOKIE["Counter"])) $_COOKIE["Counter"]=0; //Хранение счетчика в cookie
$_COOKIE["Counter"]++;
SetCookie("Counter",$_COOKIE["Counter"],time()+3600);
$name1 = $_GET['name1']; //получение переменных из массива GET
$name2 = $_GET['name2'];
$r1 = $_GET['r1'];
$r2 = $_GET['r1'];
$r3 = $_GET['r1'];
$r4 = $_GET['r1'];
$r5 = $_GET['r1'];
$count=$r1+$r2+$r3+$r4+$r5; //Суммирование результата
if ($count<=2) $ocenka="неуд";
if ($count==3) $ocenka="удовл";
if ($count==4) $ocenka="хорошо";
if ($count>=5) $ocenka="отлично";
echo "<h3><u>Результаты</u></h3>"; //Вывод
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.