Проста форма, PHP, Програмування, статті

Тарасенко Сергій, Webscript.ru

Одна з найбільш зручних та приємних особливостей PHP – це його здатністьавтоматично передавати значення змінних з форм в змінні PHP.Це дуже полегшує обробку форм.

Наприклад, Ви обробляєте форму, яка має поле введення такого вигляду:

<INPUT ENGINE=TEXT NAME=”name” VALUE=”Glen Morris”>

і в той час, коли виводиться сторінка з цим PHP-кодом, мінлива
$name має значення Glen Morris.

Тоді Ви можете вивести це значення на екран:

echo “Hi $name!”;

або вставити перевірку в умовному операторі:

if ($name == “Glen Morris”) { echo “Please check your email.”; }

Це дозволяє організувати обробку форм за допомогою PHP. Розглянемо невеликийприклад, в якому попросимо відвідувача відповісти на кілька питань (вказатиім’я, електронна адреса і ще дещо) і сформуємо виведену сторінкув залежності від його відповідей.

Спочатку розділимо нашу сторінку на дві частини. Але не будемостворювати дві окремі сторінки (одна для форми, інша для CGI-скрипта,який цю форму обробляє), а створимо одну PHP-сторінку,вид якої змінюється в залежності від результатів аналізу даних, введенихвідвідувачем в наявну на цій сторінці форму.

Висновок форми

Перша функція служить для виведення форми:

<?php
function display_form() {
  global $PHP_SELF;
?>
<FORM TARGET=”<?php echo $PHP_SELF; ?>” METHOD=GET>
Ім’я:

Улюблений сорт сиру: Very soft French Brie
                 <INPUT ENGINE=RADIO NAME=”cheese” VALUE=”cheddar”>Farmhouse English Cheddar
                 <INPUT ENGINE=RADIO NAME=”cheese” VALUE=”mozzarella”>Italian Buffalo Mozzarella

Коли Ви віддаєте перевагу їсти сир:
ENGINE= CHECKBOX NAME = “times []” VALUE = “m”> На сніданок
ENGINE= CHECKBOX NAME = “times []” VALUE = “n”> В обід
ENGINE= CHECKBOX NAME = “times []” VALUE = “d”> На вечерю
ENGINE= CHECKBOX NAME = “times []” VALUE = “l”> Пізно вночі

<INPUT ENGINE=HIDDEN NAME=”stage” VALUE=”results”>
<INPUT ENGINE=SUBMIT VALUE=”Thanks!”>
</FORM>
<?php
}
?>

Велика частина представленого вище тексту є звичайний HTML-текст, необхіднийдля формування форми. Однак є пара складних моментів,вимагають особливого пояснення.

По-перше, це змінна $PHP_SELF.
$PHP_SELF – Це зручна форма посилання, її значенняодно URL поточної сторінки. Ми задаємо атрибуту TARGETцієї форми значення $PHP_SELF, Тому щоми хочемо, щоб ця сторінка обробляла форму. Використовуючи $PHP_SELFзамість реального шляху до файлу сторінки, ми отримуємо можливість перейменовуватиабо переміщати наш скрипт, не піклуючись про внесення відповіднихзмін кожного разу, як тільки ми заново використовуємо той же шматок коду.

До речі, рядок

global $PHP_SELF;

означає, що ми хочемо використовувати глобальну змінну
$PHP_SELF. Усередині функції змінні маютьлокальну сферу дії, тобто мають значення, що відрізняютьсявід значень змінних з тими ж самими іменами, але певнихпоза цієї функції. Якщо ми не вкажемо PHP, що хочемо використовуватиглобальне значення $PHP_SELF, Ми виявимо,що $PHP_SELF буде порожнім.

По-друге, як Ви могли помітити, ми вільно переходимо в режим PHP іназад навіть усередині функції. Це повністю законно. PHP умієігнорувати HTML-код і виділяти тільки PHP-блоки. Це швидше,ніж залишатися в режимі PHP і організовувати висновок HTML, використовуючи
echo.

Тепер зверніть увагу на атрибут NAME тега INPUT.Ви бачите, що у випадку, якщо тип поля вводу є CHECKBOX, то після найменуванняполя (в даному випадку times[]) Коштує пара квадратних дужок,Якщо ж тип поля введення є RADIO, то після імені (cheese)таких дужок немає. Це пояснюється тим, що поля типу RADIO служать для виборуодного і тільки одного з варіантів відповіді, тому значенням змінної
cheese буде один рядок. Поля типу CHECKBOX(Їх декілька) дозволяють вибрати (або не вибрати) кожен зможливих варіантів, тому для збереження відповідей користувачаPHP повинен запам’ятати їх у вигляді масиву. Додавання
[] після імені змінної times і вказуєна те, що в даному випадку це масив, а не одинична змінна.

І, нарешті, в цьому шматку коду є прихована змінна з ім’ям
stage. Ми використовуємо
$stage щоб сказати програмі,чи хочемо ми вивести форму або відобразити результати обробки відповідей.

Обробка форми

Тепер розглянемо функцію process_form()обробки форми після введення відповідей користувачем.

<?php
function process_form() {
  global $name;
  global $cheese;
  global $times;

  if ($cheese == ‘brie’) { $cheese_message = ‘I love brie.’; }
  elseif ($cheese == ‘cheddar’) { $cheese_message = ‘Cheddar is awesome!’; }
  else { $cheese_message = ‘Fresh mozzarella is divine.’; }

  $favorite_times = count($times);

  if ($favorite_times <= 1) {
    $times_message = ‘You should eat cheese more often.’;
  } elseif ($favorite_times > 1 && $favorite_times < 4) {
  $times_message = ‘Those are good times to eat cheese.’;
  } else {
    $times_message = ‘You are eating too much cheese.’;
  }

  echo “Hello $name.”;
  echo “$cheese_message $times_message”;
}

?>

По-перше, так само як ми робили це з $PHP_SELF,ми зчитуємо глобальні значення змінних, включених у форму. Потімми дивимося, який сорт сиру вибрав користувач і відповідно до цьогоформуємо початок виводиться на сторінку тексту.

Далі використовується функція count() для того,щоб підрахувати, скільки разів на день їсть сир людина, відповів на нашіпитання. Якщо в попередньому випадку ми повинні були порівняти відповідь відвідувачаз кожним з можливих значень змінної $cheese,то при аналізі значень змінної $favorite_timesможна скористатися операціями порівняння “менше ніж” і “більше ніж”.Знаки && в умовному операторі “$favorite_times > 1 && $favorite_times
< 4
“Означають логічну операцію” І “(” and “). Тобто
$favorite_times повинно одночасно бутибільше 1 і менше 4 для того, щоб умова була виконана.

Ну, і нарешті, виводимо введене людиною ім’я і наше повідомлення для нього (неї).Ви, звичайно, можете придумати безліч більш цікавих дій,таких як збереження введеної інформації в базі даних або формуваннязапиту до якогось сховища даних і виведення отриманих результатівв красиво оформленому вигляді.

Формуємо Putting the Form Together

Тепер, коли ми маємо ці дві функції, залишається додати лише маленькийшматочок коду для того, щоб викликати їх у потрібній послідовності.Отже, після (або нижче) запису тіла функцій
display_form() і
process_form() додаємо:

<?php

if (empty($stage)) { display_form(); }
else { process_form(); }

?>

Тут ми спочатку перевіряємо, задано чи будь-яке значення змінної
$stage.В PHP мінлива вважається порожньою (empty), якщо її значення незадано явно (тобто їй ніколи не надаються значення за замовчуванням), абоїй задано порожнє значення (змінної присвоєно значення пусто, якщовона прирівняна порожньому рядку -”, або їй присвоєно значення 0).Коли відвідувач вперше потрапляє на нашу сторінку, змінна
$stage порожня. Тому на сторінку будевиводитися форма з нашими питаннями, в іншому випадку ми повинніобробити заповнену форму.

І це все, що ми хотіли сказати про обробку простих форм за допомогою PHP.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*