|
Программирование >> Программный интерфейс приложений
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 ,
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |