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

1 ... 138 139 140 [ 141 ] 142 143 144 ... 264


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, используя в качестве ключа идентификатор пользователя для сравнения введенного пароля с паролем, хранящимся в таблице паролей. Если пароль совпадает, сценарий ищет запись с данными этого члена Исторической Лиги и готовит ее для редактирования.

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



1 ... 138 139 140 [ 141 ] 142 143 144 ... 264

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