|
Программирование >> Программный интерфейс приложений
function setup quiz () { # генерировать запрос случайного выбора # президента и его места рождения Squery = SELECT CONCAT(first name, , last name) AS name, . CONCAT(city, , , state) AS place . FROM president ORDER BY RANDO LIMIT 1 ; Sresult = mysql query (Squery) or die ( Невозможно выполнить запрос ); Srow = mysql fetch array (Sresult) or die ( Невозможно выбрать результат ); Sname = $row[ name ]; Splace = Srow[ place ]; # Создание набора мест рождения для вывода. # Инициализировать массив Schoice, содержащий пять # мест рождения, # одно из которых является правильным. Squery = SELECT DISTINCT CONCAT(city, , , State) AS place . FROM president ORDER BY RANDO ; Sresult = mysql query (Squery) or die ( Невозможно выполнить запрос ); Schoice]] = Splace; # Инициализировать массив с # правильным выбором while (count (Schoice) < 5 5.5. Srow = mysql fetch array (Sresult)) if ($row[ place ] == Splace) continue; Schoice]] = Srow] place ]; # добавить другой вариант . # расположить варианты ответа случайным образом и # отобразить форму shuffle (Schoice); display form (Sname, Splace, Schoice); Вопросы викторины представляются в специальной форме, в которой выводится имя президента, набор радиокнопок, перечень вероятных вариантов ответа и кнопка Submit. Эта форма выполняет двоякую функцию: она должна представлять информацию викторины клиенту и передавать эту информацию обратно на Web-сервер, когда пользователь отвечает. Ответ следует проверять на правильность. Информация заключается в форму с помощью скрытых полей. Назовем эти поля name, place и choice ДЛЯ хранения имени президента, места его рождения и набора возможных вариантов ответов. Варианты кодируются в виде одной строки с помощью функции implode (), объединяющей значения в одну строку со специальным разделительным символом. (Этот специальный символ нам необходим на будущее, чтобы разбить строку с помощью функции explode () при необходимости повторного вывода вопроса на экран.) Функция, отображающая форму, имеет следующий вид. function display forin ($name, $place, $choice) { global $PHP SELF; printf ( <FORM METHOD=\ post\ ACTI0N=\ %S\ >\n , $PHP SELF) ; hidden field ( name , $name); hidden field ( place , $place) ; hidden field ( choice , implode ( # , $choice)); printf ( Где родился %s?<BR><BR>\n , $name); for ($i = 0; $i < 5; $i++) { print ( <INPUT TYPE=\ radio\ NAME= \ r e spon s e \ \n ) ; printf ( VALUE=\ %s\ >%s<BR>\n , $choice[$i], $choice [$i] ) ; print ( <BR><INPUT TYPE=\ Submit\ VALUE= \ Submit \ >\n ) ; print ( </FORM>\n ); Функция hidden f ield () создает HTML-код для скрытых полей в виде: function hidden field ($name, Svalue) { printf ( <INPUT TYPE=\ HIDDEN\ NAME=\ %S\ VALUE=\ %S\ >\n , $name, $value); После того как выбор сделан и пользователь его подтвердил, результат кодируется в поле ответа и отсылается на Web-сервер. Определить значения полей name, place, choice и response можно, просмотрев значения переменных $name, $р1асе, $choice и $response. Кроме того, это позволяет определить, был сценарий вызван впервые или это уже ответ на ранее отображенную форму. Ни одна из этих переменных не будет установлена в том случае, если это первый вызов сценария. Таким образом, в основном теле сценария можно определить, какие действия ему надо производить дальше, проверив одну из этих переменных: if (!$name) # первоначальный вызов setup quiE (); else # пользователь дал ответ на вопрос check response (); Нам осталось написать функцию checkresponse (), которая сравнивает ответ пользователя с правильным ответом. Правильный ответ закодирован в поле place, а ответ пользователя - в поле response. Таким образом, нам остается сравнить переменную $р1асе с переменной $response. Основываясь на полученном результате сравнения, можно запрограммировать реакцию профаммы и вывести на экран новый вопрос викторины или повторить прежний, если ответ был неверным: function check response О { global $name, $р1асе, $choice; global $response; if ($place == $response) # правильный ответ; # генерировать новый вопрос print ( Правильно .<BR>\n ); printf ( %s родился в %s.<BR>\n , $name, Splace); print ( Ответьте на следующий вопрос:<BR><BR>\n ) ; setup quiz() ; > else # ответ неверный; повторить вопрос print ( Неправильно. Попробуйте еде раз. <BR><BR>\n ); Schoice = explode ( # , Schoice); display form (Sname, Splace, Schoice); Вот и все. Теперь добавьте ссыпку на сценарий pres qui2. php из начальной Web-страницы Исторической Лиги , и посетители могут проверять свою эрудицию. Интерактивное редактирование данных о членах Исторической Лиги Наш последний сценарий edit member.php позволит членам Исторической Лиги редактировать данные о себе самостоятельно прямо на Web-странице. Теперь для этого совсем не обязательно связываться с офисом Исторической Лиги . Такая возможность позволит сделать каталог членов Исторической Лиги более актуальным, что совершенно закономерно снизит рабочую нафузку на секретаря Исторической Лиги . Но сразу же нужно предупредить, что необходимо будет предпринять меры для того, чтобы никто иной, кроме члена Исторической Лиги , не мог модифицировать свою запись. Это значит, что необходима какая-то система безопасности. Продемонсфируем простой метод аутентификации с помошью возможностей СУБД MySQL. Запомним пароль пользователя и при попытке скорректировать запись будем требовать его ввода. Этот сценарий будет работать следующим образом. При первоначальном вызове сценарий edit script.php выводит форму, содержащую поля, предназначенные для ввода идентификатора пользователя и его пароля. После того как будет подтверждена первоначальная форма, сценарий проверяет таблицу password, используя в качестве ключа идентификатор пользователя для сравнения введенного пароля с паролем, хранящимся в таблице паролей. Если пароль совпадает, сценарий ищет запись с данными этого члена Исторической Лиги и готовит ее для редактирования. После того как форма будет подтверждена, запись модифицируется с помощью данных, содержащихся в форме.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |