Linux и UNIX: программирование в shell. Руководство разработчика
вернуться

Тейнсли Дэвид

Шрифт:

<FORM action="/cgi-bin/conv.cgi" METHOD=POST>

Переменная CONTENT_LENGTH будет хранить общее количество байтов, отосланных с применением метода post. Производится считывание строки из потока стандартного ввода, а затем выполняется то же самое преобразование, что и при использовании метода get. Процесс считывания завершается после того, как считанное количество байтов становится равным количеству байтов, хранящихся в переменной CONTENT_LENGTH.

После выполнения небольшого изменения в конструкции form action получится обобщенный декодер форм. Для осуществления считывания из стандартного потока ввода можно использовать команду cat. Ниже показана конструкция, которую следует добавить в сценарий conv.cgi, в результате чего появится возможность использования методов get и post.

if ["$REQUEST_METHOD"="POST"]; then

QUERY_STRING=`cat -`

fi

Обратите внимание на то, что команда cat содержит дефис, благодаря чему эту команду можно применять для считывания данных из стандартного потока ввода.

При использовании метода post осуществляется обычная проверка значения переменной QUERY_string. Затем все символы, поступающие из стандартного потока ввода, присваиваются переменной QUERY_STRING. В этой ситуации возможно использование метода get, поскольку в любом случае требуется получить информацию из переменной querY_string.

Замените строку form action в cgi–сценарии books.cgi:

<FORM action="/cgi-bin/conv.cgi" METHOD=GET>

строкой

<FORM action ="/cgi-bin/conv.cgi" METHOD=POST>

Кроме того, будут выполнены небольшие изменения в сценарии conv.cgi, благодаря чему можно будет проверять значения, введенные в текстовые поля, а также определять установленные флажки. Обновленный сценарий будет иметь следующий вид:

$ pg conv.cgi

#!/bin/sh

#conv.cgi

#декодирование строки URL

echo "Content-type: text/html"

echo ""

echo "<HTML><PRE>"

# это post ???

if [ "$REQUEST_METHOD"="POST" ]; then

QUERY_STRING=`cat -`

fi

# отображение имени метода и кодированной строки

echo "Method : $REQUEST_METHOD"

echo "Query String : $QUERY_STRING"

echo "<HR>"

# используется sed для замены & символом табуляции

LINE=`echo $QUERY_STRING | sed 's/&/ /g' `

for LOOP in $LINE

do

NAME=`echo $LOOP | sed 's/=/ /g' | awk '{print $1}'`

TYPE=`echo $LOOP | sed 's/=/ /g' | awk '{print $2}' | \

sed -e 's/%\(\)/\\\x/g' | sed 's/+/ /g'`

# используется printf для преобразования шестнадцатеричных символов

printf "${NAME}=${TYPE}\n"

VARS=`printf "${NAME}=\\${TYPE}\n"`

eval `printf $VARS`

done

echo "<HR>"

if [ "$contact" != "" ]; then

printf "Hello $contact, it's great to meet you\n"

else

printf "You did not give me your name… no comment !\n"

fi

if [ "$film" != " — Pick a Film —" ]; then

printf "Hey I agree, $FILM is great film\n"

else

printf "You didn't pick a film\n"

fi

if i "$actor" != " —- Pick Your Favourite Actor --" ]; then

printf "So you like the actor $actor, good call\n"

else

printf "You didn't pick a actor from the menu\n"

fi

if [ "$view_cine"="on" ]; then

printf "Yes, I agree the cinema ls still the best place to watch a film\n" else

printf "So you don't go to the cinema, do you know what you're missing\n" fi

if [ "$view_vid"="on" ]; then

printf "I like watching videos at home as well\n"

else

printf "No video!!. you're missing out on all the classics to rent or buy\n'

fi

if [ "$textarea" != "" ]; then

printf " And here are your comments…OK $textarea\n"

else

printf "No comments entered, so no comment !\n"

fi

echo "</PRE>"

echo "</HTML>"

Обратите внимание, что в этом сценарии везде используется функция printf; хотя в некоторых случаях могут быть задействованы конструкции echo (когда не требуется доступ к переменным). Применение функций printf улучшает восприятие сценариев.

Теперь загрузим форму и осуществим тестирование путем отсылки некоторых данных с помощью метода post:

http://<имя_сервера>/cgi-bin/books.cgi

На рис. 29.11 иллюстрируются данные, введенные на Web–страницу. После завершения ввода некоторых данных щелкните на кнопке "Send". Результаты выполнения этой операции показаны на рис. 29.12.

  • Читать дальше
  • 1
  • ...
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win