Программирование >>  Программный интерфейс приложений 

1 ... 136 137 138 [ 139 ] 140 141 142 ... 264


print ( <TR>\n );

display cell ( TH , Event ID , 1); display cell ( TH , Date , 1) ; display cell ( TH , Type , 1); print ( </TR>\n );

# связать каждый идентификатор со ссылкой, которая отобразит

# оценки за экзамен; используется mysql fetch array(), что

# позволяет обращаться к столбцам по имени while ($row = mysql fetch array (Sresult)) {

print ( <TR>\n ) ;

Surl = sprintf ( %s?action=%dSevent id=%d ,

SPHP SELF, DISPLAY SCORES, Srow[ event ld ] );

display cell ( TD ,

<A HREF=\ Surl\ > . Srow[ event id ] . </A> , 0) ;

display cell ( TD , $row[ date ], 1); display cell ( TD , Srow[ type ], 1); print ( </TTR>\n );

# добавит еще одну ссылку на новый экзамен print ( <TR ALIGN=CENTER>\n );

Surl = sprintf { %s-action=%d , SPHP SELF, SOLICIT EVENT) ; display cell ( TD C0LSPAN=3 ,

<A HREF=\ Surl\ > . New Event . </A>

0) ;

print ( </TR>\n ); print ( </TABLE>\n );

Bee ссылки в таблице созданы с помощью переменной $php self. Эта переменная содержит URL самого сценария, что является очень удобным методом рекурсивного вызова сценарием самого себя. Однако обратите внимание на строку с объявлением global перед началом функции:

global SPHP SELF;

В функциях РНР глобальные переменные не будут доступными до того момента, пока они не будут объявлены явным образом. Без объявления как глобальная, переменная $php self будет рассматриваться как локальная переменная (и так как мы не присвоили ей значение, она будет пустой). Также необходимо внутри функции объявление глобальных переменных для передачи параметров, переданных в сценарий посредством параметров URL или в качестве полей.

Функция display cell (), которая используется для генерации таблицы, аналогична одноименной DBI-функции, которая бьша упомянута нами в главе 7, Программный интерфейс Perl API . Версия, разработанная для РНР, выглядит следующим образом:



function display cell ($tag, $value, $encode) {

if ($encode)

value = htmlspecialchars ($value); if {$value == )

$value = inbsp; ; print ( <$tag>$value</$tag>\n ) ;

Если в таблице, которую отображает функция display events (), выбрана ссылка New Event, сценарий вызывается повторно с действием SOLICIT EVENT. В результате запускается вызов solicit event info (), отображающий форму ввода информации о новом экзамене:

function solicit event infо () (

global $PHP SELF;

printf ( <FORM METHOD=\ post\ ACTION=\ %s?action=%d\ >\n ,

$PHP SELF, ADD EVENT); print ( Ввести информацию о новом экзамене:<BR><BR>\n ); print ( Дата: <INPUT TYPE=text NAME=\ date\ ); print ( VALUE=\ \ SIZE=10> ); print ( Тип: );

print ( <INPUT TYPE=\ radio\ NAME=\ type\ VALUE=\ T\ CHECKED>Test\n ); print ( <INPUT TYPE=\ radio\ NAME=\ type\ VALUE=\ Q\ >Quiz\n ); print ( <BR><BR>\n );

print ( <INPUT TYPE=\ submit\ NAME=\ button\ VALUE=\ Submit\ >\n );

print ( </FORM>\n );

Форма, генерируемая процедурой solicit event info (), содержит редактируемое поле для ввода данных; пару радиокнопок для определения типа вводимых данных (это тест или викторина) и кнопку Submit. При подтверждении формы вызывается сценарий scoreentry .php с действием add event (добавить событие). Вызьшается функция addnewevent () для добавления новой строки в таблице event.

function add new event() (

global $date, $type;

if (empty ($date)) # проверить ввод даты

die ( Дата не указана ); $query = sprintf ( INSERT INTO event (date,type) VALUES(\ %s\ ,\ %s\ ) ,

addslaslies ($date) , $addslaslies ($type)); if (imysql query ($query))

die ( Невозможно добавить экзаменi );

В функции add new event о используются глобальные переменные для осуществления доступа к значениям полей, задействованных в форме ввода новых экзаменов (дата и тип доступны как переменные $date и $type). После самой минимальной проверки на безопасность, заключающейся в том, что дата не пустая, в таблицу event вводится новая за-



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

Функция display scores О предназначена для просмотра проставленных оценок по данному экзамену и вывода формы, отображающей их вместе с именами учащихся:

function display scores () {

global $PHP SELF, $event id,-

# выбрать оценки для заданного экзамена $queгу =

SELECT

student.student id, student.name, event.date,

score.score AS score, event.type FROM student, event

LEFT JOIN score ON student.student id = score.student id AND event.event id = score.event id WHERE event. event id = $event id ORDER BY student, name

Sresult = mysql query (Squery)

or die ( Невозможно выполнить запрос ) ;

printf ( <FORM METHOD=\ poSt\

ACTION=\ %s?action=%d&event id=%d\ >\n ,

SPHP SELF, ENTER SCORES, $event id) ;

# распечатать оценки в табличном виде,

# распечатать дату и тип экзамена

# перед таблицей (однако нет возможности распечатать дату и тип

# до тех пор, пока не выбрана первая строка результирующего

# набора) Sneedheading = 1;

while row = mysql fetch array (Sresult)) (

if (Sneedheading) {

printf ( Идентификатор экзамена: %s, дата: %s, тип: %s\n ,

$event id, Srow[ date ] , Srow[ type ] ); print ( <BR><BR>\n ); print ( <TABLE BORDER>\n ); print ( <TR>\n ); display cell ( TH , Name , 1); display cell ( TH , Score , 1); print </TR>\n ; Sneedheading = 0;

print ( <TR>\n );

display cell ( TD , Srow( name ] , 1); Scol val =

sprintf ( <INPUT TYPE=text NAME=\ score[%s]\ , Srow[ student id ] );

Scol val .=

sprintf ( VALUE=\ %s\ SIZE=5><BR>\n ,



1 ... 136 137 138 [ 139 ] 140 141 142 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика