Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

PHP5_nachinayushim

.pdf
Скачиваний:
29
Добавлен:
20.03.2015
Размер:
26.79 Mб
Скачать

134 Глава 3

Скрытые поля форм

Часто возникает необходимость получить информацию, содержащуюся на одной Web+странице, и передать ее другой Web+странице без какого+либо ввода данных пользователем. В дескрипторе <input> существует еще один параметр, который по+ зволяет передавать информацию в поле, как если бы оно было текстовым, скрывая при этом сам элемент управления и его значение от пользователя. Такое поле называ+ ется скрытым полем формы (или скрытым элементом управления).

Действие скрытых полей несколько отличается от действия уже рассмотренных элементов управления ++++++ они более полезны в PHP+страницах, содержащих формы, так как их можно использовать для отправки информации, хранящейся в PHP+пере+ менных. Ниже приведен пример обычного скрытого поля формы:

<input type="hidden" name="Hidden1" value="Секретное сообщение">

Для этого примера нет снимка с экрана, так как данный элемент управления не отображается на странице. Любая форма, отправляющая такое скрытое поле, будет иметь переменную с именем $Hidden1, содержащую текст Секретное сообщение. Чтобы использовать данное скрытое поле в PHP+странице, можно написать всю HTML+ форму в операторах echo(), передающих содержимое PHP+переменных через HTML+де+ скрипторы, как показано ниже:

<?php

$Message1="Этот текст невидимый"; echo "<form>";

echo "<input type='hidden' name='Hidden2' value='$Message1'>"; echo "<input type='submit' value='Отправить>";

echo "</form>"; ?>

Выше приведен пример целой HTML+формы, написанной в PHP+операторах, ко+ торая позволяет создать переменную $Hidden2 и передать ей значение переменной $Message1. Естественно, это не единственный способ сохранять данные между от+ правками форм или запросами страниц; другие способы, такие как cookie+файлы, се+ ансы и т.д., рассматриваются в настоящей главе далее.

Рассмотрим пример, в котором на одной странице принимается содержимое спи+ ска, а на следующей странице отображается пользовательский выбор. Для создания HTML+формы в PHP также используется описанный выше код с echo+операторами.

Практика Использование скрытых полей форм

1. Откройте HTML+редактор и введите следующий код:

<html>

<head></head>

<body>

<?php

$Message1="Багс Банни"; $Message2="Гомер Симпсон"; $Message3="Рен и Стимпи";

echo "<form method='GET' action='hidden2.php'>";

echo "Кто из следующих персонажей победит в перестрелке?"; echo "<select name='ListBox'>";

echo "<option>$Message1</option>"; echo "<option>$Message2</option>"; echo "<option>$Message3</option>"; echo "</select><br><br>";

PHP, HTML и состояние сеанса 135

echo "<input type='hidden' name='Hidden1' value='$Message1'>"; echo "<input type='hidden' name='Hidden2' value='$Message2'>";

echo "<input type='hidden' name='Hidden3' value='$Message3'>"; echo "<input type='submit' value='Отправить'>";

echo "</form>"; ?>

</body>

</html>

2.Сохраните файл как hidden.php и закройте его.

3.Создайте новый файл и введите в него следующий код:

<html>

<head><title></title></head>

<body>

<?php

echo "Было три варианта:<br>"; echo "$_GET[Hidden1]<br>"; echo "$_GET[Hidden2]<br>";

echo "$_GET[Hidden3]<br>"; echo "<br>Вы выбрали:<br>";

echo "$_GET[ListBox]"; ?>

</body>

</html>

4.Сохраните файл как hidden2.php и закройте его.

5.Откройте страницу hidden.php в браузере и выберите имя персонажа (рис. 3.16).

Рис. 3.16.

136Глава 3

6.Нажмите кнопку Отправить, чтобы просмотреть результат (рис. 3.17).

Рис. 3.17.

Как это работает

Процесс создания HTML+форм с помощью echo+операторов очень прост. Главное отличие этого способа от использования чистого HTML+кода в том, что можно опус+ тить апострофы в именах переменных массива. Для формирования списка создается три переменных:

$Message1="Багс Банни"; $Message2="Гомер Симпсон"; $Message3="Рен и Стимпи";

Затем с помощью echo+операторов создается форма. Она ничем не отличается от обычной HTML+формы за исключением того, что там, где нужны кавычки, следует писать не двойные, а одинарные кавычки, иначе echo+оператор будет работать не+ правильно. Первая строка говорит только о том, что содержимое формы необходимо передавать сценарию hidden2.php методом GET:

echo "<form method='GET' action='hidden2.php'>";

Далее отображается вопрос, а затем начинается список:

echo "Кто из следующих персонажей победит в перестрелке?"; echo "<select name='ListBox'>";

В список включается три пункта, значения переменных $Message1, $Message2 и $Message3 соответственно.

PHP, HTML и состояние сеанса 137

echo "<option>$Message1</option>"; echo "<option>$Message2</option>"; echo "<option>$Message3</option>";

После этого записывается закрывающий тег <select> и добавляется два разрыва строки:

echo "</select><br><br>";

Затем три уже используемые переменные передаются в форму как скрытые поля:

echo "<input type='hidden' name='Hidden1' value='$Message1'>"; echo "<input type='hidden' name='Hidden2' value='$Message2'>"; echo "<input type='hidden' name='Hidden3' value='$Message3'>";

Три переменные превращаются в форме в переменные $Hidden1, $Hidden2 и $Hidden3 соответственно. В форму добавляется кнопка Отправить, после чего

форма закрывается:

echo "<input type='submit' value='Отправить'>"; echo "</form>";

Вторая PHP+страница отображает содержимое элементов управления, созданных на первой странице. Сначала выводится содержимое трех скрытых полей формы:

echo "Было три варианта:<br>"; echo "$_GET[Hidden1]<br>"; echo "$_GET[Hidden2]<br>"; echo "$_GET[Hidden3]<br>";

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

Последние строки отображают выбранный пользователем пункт.

echo "<br>Вы выбрали:<br>"; echo "$_GET[ListBox]";

Далее в книге скрытые поля используются для решения задач такого типа.

Поля ввода паролей

Поля ввода паролей, по сути, представляют собой текстовые поля, в которых вво+ димые символы заменяются звездочками. Они хранят и передают информацию так же, как и текстовые поля:

Введите пароль

<input name="Password" type="password">

Обработка полей ввода паролей и текстовых полей ничем не отличается, поэтому данный раздел не содержит примеров кода. Чтобы посмотреть поле ввода пароля в действии, можно вернуться к одному из предыдущих примеров (text.html) и ис+ править значение атрибута type на password. Следует, однако, отметить, что если для передачи данных из поля такого типа использовать метод GET, то пароль в строке запроса не шифруется и будет видимым для всех и каждого. Это не означает, что ме+ тод POST является безопасным методом передачи данных. Речь идет только о том, что информация при передаче методом POST непосредственно не показывается пользо+ вателю. Чтобы действительно обеспечить безопасность передаваемых данных, необ+ ходимо применять какой+либо специальный протокол, например, SSL (Secure Sockets Layer ++++++ протокол безопасных сокетов) для реального шифрования данных.

138 Глава 3

Кнопки submit и reset

Кнопка типа submit (отправить) много раз использовалась в данной главе, поэтому нет необходимости приводить отдельный пример для демонстрации ее работы. Од+ нако следует отметить два момента. Во+первых, что произойдет, если в форму помес+ тить несколько кнопок данного типа? В таком случае также необходимо задать значе+ ния атрибутов name и value для кнопок. Например:

<input value="Нажата кнопка 1" type="submit" name="Submit1"> <input value="Нажата кнопка 2" type="submit" name="Submit2">

Данный код, как и следовало ожидать, создает в PHP доступные переменные. Фак+ тически этот код создает одну PHP+переменную в зависимости от того, какая кнопка нажата. Если нажать кнопку Submit1, то в массиве $_GET или $_POST будет создана переменная Submit1. Если нажать вторую кнопку, то будет создана переменная Submit2. Содержимым Submit1 является текст Нажата кнопка 1, тогда как содержи+ мым Submit2 будет текст Нажата кнопка 2. Фактически с помощью данного кода нельзя выполнить что+нибудь полезное, поэтому примеры здесь не приводятся.

Во+вторых, кнопка типа submit не способна отменить ввод информации. Фактиче+ ски невозможно отменить информацию, переданную с помощью кнопки типа submit. Однако существует такой элемент управления, как кнопка типа reset, которая отчасти решает эту проблему ++++++ с ее помощью можно установить все элементы управления на форме в их первоначальное состояние.

<input type="reset">

Использование в PHP-сценариях значений, возвращаемых формами

Выше были рассмотрены все разновидности элементов управления и обработка их содержимого в PHP, однако приводимые до сих пор в данной главе программы не делают ничего полезного с практической точки зрения, а лишь выводят содержимое элементов управления на другой Web+странице. Вероятно, без какой+либо из функ+ ций, которые рассматриваются в последующих главах, будет сложно манипулировать значением переменных. Однако из материала предыдущей главы читателю уже из+ вестны математические и строковые операторы, и эти знания можно объединить

спонятиями, представленными в данной главе.

Впоследнем примере этой главы создается форма для подачи заявки на получение кредита, запрашивающая у пользователя размер денежной суммы, которую он хочет за+ нять. После этого приложение вычисляет сумму, которую вымышленный банк NAMLLU может предложить заявителю на основании данных о возрасте и заработной плате. В конце расчетов приложение отвечает пользователю лишь ‘‘да’’ или ‘‘нет’’.

Хотя формула расчета кредита может показаться сложной, на самом деле она весьма проста (и не основывается на формуле какой+либо реальной компании). Раз+ мер кредита для заявителя вычисляется по трем числам:

переменная нормы зарплаты: годовая зарплата пользователя, разделенная на 5;

переменная возрастного ценза: возраст пользователя, разделенный на 10; ре+ зультат округляется в меньшую сторону до ближайшего целого числа, а затем уменьшается на единицу;

переменная кредитной нормы: норма зарплаты, умноженная на возрастной ценз.

PHP, HTML и состояние сеанса 139

Приложение автоматически исключает всех пользователей моложе 20 лет, так как формула всегда возвращает нуль, а умножение любого числа на нуль в результате дает нуль. Ниже приведен пример вычисления кредитной нормы для пользователя 19 лет, где First figure ++++++ норма зарплаты:

First figure * (19/10 - (19 Modulus 10)/10)-1

Оператор Modulus возвращает остаток от деления. В данном случае выражение можно упростить:

First figure * (1.9 - 0.9) -1

что в результате дает:

First figure * 0

Для любого пользователя моложе 20 лет кредитная норма всегда равна нулю: так как один из множителей равен нулю, то размер зарплаты не имеет значения.

Рассмотрим другой пример: заявку на кредит подает пользователь 57 лет с годовой зарплатой 50 000 долларов.

Норма зарплаты для этого пользователя равна 50000/5 = 10000.

Возрастной ценз равен (57/10 - (57 Modulus 10)/10)) - 1 = 4.

Кредитная норма равна 10000* 4 = 40000 (норма зарплаты, умноженная на возрастной ценз).

Если кредитная норма больше, чем сумма займа, необходимая пользователю, то приложение выдает ответ ‘‘да’’.

Практика Форма заявки на кредит

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

1. Откройте HTML+редактор и введите следующий код:

<html>

<head><title></title></head>

<body>

<b>Заявка на получение кредита в Namllu Credit Bank</b>

<form method="POST" action="loan.php">

Имя:

<input name="FirstName" type="text">

Фамилия:

<input name="LastName" type="text">

Возраст:

<input name="Age" type="text" size="3"> <br>

<br>

Адрес:

<textarea name="Address" rows="4" cols="40"> </textarea>

<br>

<br>

Выберите размер Вашей текущей зарплаты

<select name="Salary">

<option value=0>До $10000</option>

<option value=10000>$10000 - $25000</option> <option value=25000>$25000 - $50000</option>

140 Глава 3

<option value=50000>Свыше $50000</option> </select>

<br>

<br>

Выберите сумму необходимого кредита<br><br>

<input name="Loan" type="radio" value='1000'>$1000 под 8,0% годовых

<br>

<input name="Loan" type="radio" value='5000'>$5000 под 11,5% годовых

<br>

<input name="Loan" type="radio" value='10000'>$10000 под 15,0% годовых <br>

<br>

<input type="submit" value="Подать заявку"> <input type="reset" value="Очистить">

</form>

</body>

</html>

2.Сохраните файл как loan.html и закройте его.

3.Создайте новый файл и введите следующий код:

<html>

<head><title></title></head>

<body>

<b>Заявка на получение кредита в Namllu Credit Bank</b> <br>

<br>

<?php

$SalaryAllowance = $_POST['Salary']/5;

$AgeAllowance = ($_POST['Age']/10 - ($_POST['Age']%10)/10)-1;

$LoanAllowance = $SalaryAllowance * $AgeAllowance; echo "Запрашиваемый кредит:$_POST[Loan]<br>";

echo "Допустимая сумма кредита:$LoanAllowance<br><br>";

if ($_POST['Loan'] <= $LoanAllowance) echo "Да, $_POST[FirstName] $_POST[LastName], мы удовлетворим Вашу заявку";

if ($_POST['Loan'] > $LoanAllowance) echo "Извините, $_POST[FirstName] $_POST[LastName], в настоящее время мы не можем принять Вашу заявку";

?>

</body>

</html>

4.Сохраните данный файл как loan.php.

5.Откройте в браузере страницу loan.html (рис. 3.18) и введите необходимые сведения.

6.Нажмите кнопку Подать заявку, в результате чего должна появиться страница, показанная на рис. 3.19.

Как это работает

Первая страница состоит из довольно длинного кода, однако она не делает ничего экстраординарного и определенно не содержит ничего нового для изучения. В форме (loan.html) содержится восемь элементов управления. Первые три ++++++ текстовые по+ ля, используемые для получения имени, фамилии и возраста заявителя:

<input name="FirstName" type="text">

Фамилия:

<input name="LastName" type="text">

Возраст:

<input name="Age" type="text" size="3">

PHP, HTML и состояние сеанса 141

Рис. 3.18.

Рис. 3.19.

142 Глава 3

Очевидно, что они создают на PHP+странице переменные $_POST[FirstName], $_POST[LastName] и $_POST[Age] соответственно.

Адрес заявителя вводится в текстовую область:

<textarea name="Address" rows="4" cols="40"> </textarea>

Текстовая область в свою очередь создает PHP+переменную $_POST[Address]. В этом примере используются не все PHP+переменные, созданные данной формой, но в последующих главах рассматриваются аналогичные примеры, где применяются дру+ гие переменные.

Следующим элементом управления является выпадающий список, содержащий не+ сколько диапазонов зарплаты:

<select name="Salary">

<option value=0>До $10000</option>

<option value=10000>$10000 - $25000</option> <option value=25000>$25000 - $50000</option> <option value=50000>Свыше $50000</option> </select>

На практике сохранить весь диапазон как значение нельзя. Вместо этого в качестве значения определенного пункта списка сохраняется наименьшая граница соответст+ вующего диапазона. При этом создается только одна PHP+переменная $_POST[Salary], в которой хранится значение, связанное с диапазоном, выбранным пользователем. Если пользователь не выбрал диапазон, то список вообще не возвращает значение. Следует отметить, что первое значение равно нулю, и согласно приведенной выше формуле приложение автоматически возвращает пользователю, зарплата которого ниже 10 000 долларов, отрицательный ответ.

Следующий элемент управления ++++++ группа связанных друг с другом переключателей:

Выберите сумму необходимого кредита<br><br>

<input name="Loan" type="radio" value='1000'>$1000 под 8,0% годовых

<br>

<input name="Loan" type="radio" value='5000'>$5000 под 11,5% годовых

<br>

<input name="Loan" type="radio" value='10000'>$10000 под 15,0% годовых

Все переключатели имеют одинаковые имена, так как в переменной должно со+ держаться только одно значение в зависимости от выбора пользователя. Группа, состоя+ щая из трех переключателей, создает только одну PHP+переменную, $Loan.

Два последних элемента управления ++++++ кнопки типа submit и reset:

<input type="submit" value="Подать заявку"> <input type="reset" value="Очистить">

Кнопка типа submit использует значение атрибута action, установленного в на+ чале формы, и поэтому ‘‘знает’’, куда следует отправлять информацию формы:

<form method="POST" action="loan.php">

Очевидно, что первая программа сохраняет и передает информацию формы, а вто+ рая программа, loan.php, принимает переданные значения и выполняет некоторые простые операции над ними, чтобы принять или отклонить заявку на кредит. В пер+ вой строке создается новая переменная $SalaryAllowance, значение которой равно зарплате пользователя, разделенной на 5:

$SalaryAllowance = $_POST['Salary']/5;

Во второй строке вычисляется более сложная формула возрастного ценза, резуль+ татом которой должно быть целое число, зависящее от разделенного на 10 возраста

PHP, HTML и состояние сеанса 143

пользователя. Остаток от деления (если он есть) возраста пользователя на 10 удаляет+ ся путем округления в меньшую сторону до ближайшего целого числа. Для вычисле+ ния остатка используется оператор Modulus (%). После этого из полученного числа вычитается единица, и результат присваивается переменной. Последняя строка воз+ вращает 0, если пользователь ввел возраст от 0 до 19 лет; 1, если введенный возраст по+ падает в промежуток 20++++29 лет; 2, если возраст попадает в промежуток 30++++39 лет, и т.д. Результат вычислений хранится в новой переменной $AgeAllowance:

$AgeAllowance = ($_POST['Age']/10 - ($_POST['Age']%10)/10)-1;

Следующая строка значительно короче. В ней два только что вычисленных значе+ ния перемножаются и результат сохраняется в новой переменной $LoanAllowance, которая представляет собой окончательное число, ограничивающее размер возмож+ ного займа.

$LoanAllowance = $SalaryAllowance * $AgeAllowance;

Следующие две строки выводят на Web+странице подтверждение введенного поль+ зователем размера займа и сумму допустимого займа:

echo "Запрашиваемая ссуда:$_POST[Loan]<br>"; echo "Допустимая ссуда:$LoanAllowance<br><br>";

В двух последующих строках используется оператор <= (меньше или равно), кото+ рый позволяет принять решение на основе полученной информации. Данный опера+ тор определяет, не превышает ли необходимый пользователю размер ссуды сумму, допустимую банком, и если не превышает, то на Web+странице отображается сообще+ ние, подтверждающее принятие заявки. Данная структура детально обсуждается в следующей главе, поэтому здесь она рассмотрена очень кратко.

Отображаемое сообщение содержит персональную информацию (имя и фамилию), введенную пользователем в форму:

if ($_POST['Loan'] <= $LoanAllowance) echo "Да, $_POST[FirstName] $_POST[LastName], мы удовлетворим Вашу заявку";

В последней строке PHP+сценарий обрабатывает ситуацию отклонения заявки ++++++ ко+ гда сумма, которую пользователь хочет занять в банке, превышает допустимую банком сумму. В этом случае на Web+странице отображается сообщение об отклонении заявки:

if ($_POST['Loan'] > $LoanAllowance) echo "Извините, $_POST[FirstName] $_POST[LastName], в настоящее время мы не можем принять Вашу заявку";

Это практически все, что касается данных программ. Есть еще одна деталь: ин+ формация в реальном приложении такого рода конфиденциальна, поэтому для пере+ дачи данных формы следует использовать метод POST. При этом следует помнить, что этот метод скрывает информацию от рядового пользователя, однако хакеры легко могут похитить информацию, передаваемую с помощью данного метода. Чтобы обес+ печить реальную безопасность, необходимо применять SSL+сертификат для шифро+ вания обмена данными между пользователем и Web+сервером.

Возможные усовершенствования приложения

Рассмотренное выше приложение нельзя называть идеальным. Если приложить некоторые усилия, его работу можно нарушить или заставить его отображать нело+ гичные значения. Это возможно, потому что корректность значений, полученных от пользователя, никак не проверяется. Как можно предотвратить ввод абсолютно непра+ вильных значений, например, 965 в поле возраста? Очевидно, что такое значение не

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]