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

web - tec / PHP 5 для начинающи

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

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

В сценарии listbox.php атрибут name связан с PHP+переменной $_POST[Price]:

<?php

echo "Диапазон цен: $_POST[Price]";

...

Здесь пока нет абсолютно ничего нового, однако второй список в listbox.html отличается:

<select name="EngineSize[]" multiple> <option>1.0L</option> <option>1.4L</option> <option>1.6L</option> <option>2.0L</option>

</select>

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

$Choice0 = $_POST['EngineSize'][0]; $Choice1 = $_POST['EngineSize'][1]; $Choice2 = $_POST['EngineSize'][2];

$Choice3 = $_POST['EngineSize'][3]; echo "<br>Объем двигателя: $Choice0,";

echo "$Choice1,"; echo "$Choice2,"; echo "$Choice3,";

Как уже отмечалось, во время создания массива PHP создает новую переменную с тем же именем и присоединенным к имени индексным номером. В списке содержится четыре пункта, поэтому в массиве будет четыре элемента. Содержимое каждого из них необ+ ходимо отобразить. Поскольку индекс ссылается на элемент массива, а нумерация элементов в массивах, как правило, начинается с нуля, $EngineSize[0] ссылается на первый пункт в списке, 1.0L, если этот пункт был выбран пользователем. Этот эле+ мент всегда содержит первый пункт списка, выбранный пользователем на странице.

В рассматриваемом примере выбран первый пункт, поэтому $EngineSize[0] дей+ ствительно содержит значение 1.0L. То же касается и элемента $EngineSize[1], свя+ занного со вторым пунктом. Элементы $EngineSize[2] и $EngineSize[3] не содер+ жат ничего, так как пользователь выбрал только два первых пункта списка. Если бы пользователь выбрал только один пункт, то значение хранилось бы только в элементе $EngineSize[0]. Элементы $EngineSize[2] и $EngineSize[3] будут содержать значения только в том случае, когда пользователь выберет все четыре пункта списка. Ес+ ли бы были выбраны только два последних пункта, то переменные $EngineSize[0] и $EngineSize[1] содержали бы значения 1.6L и 2.0L соответственно, а перемен+ ные $EngineSize[2] и $EngineSize[3] вновь не имели бы значений. Для просто+ ты отображения значений с помощью оператора echo для каждого пункта были соз+ даны переменные и им были присвоены строковые значения переменных массива.

Необходимо помнить о том, что если отображение ошибок включено и ошибки видны в окне браузера (в файле php.ini должна быть строка "display_errors = On"),

то будут также отображаться некоторые предупреждения о невыбранных значениях EngineSize, так как значения присваиваются не всем переменным

$_POST['EngineSize'][].

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 возраста

Соседние файлы в папке web - tec