PHP Знайомство з формами
Замість передмови
Серед білого дня (втім і темної ночі теж) почали красти котів! Зовсім нахабніли викрадачі.

Ось несамовита історія в скороченні, взята звідси.
Рано-вранці у своєму приватному будинку на West Side (Нью-Йорк) молода жінка почула дикий пташиний крик. Коли вона прибігла, то побачила на невеликій терасі лише кілька пір'я та шматки хутра її улюбленого кота Едді. Було ясно, що великий дикий птах поцупив її кота, який любив повалятися вранці на свіжому повітрі. По пір'ї фахівці сказали, що тут попрацював червонохвостий яструб. Жінка була просто вбита горем.

-Я йшла кілька годин Riverside Drive і ридала, дивлячись на його фотографію. Я оглянула всі відомі яструбині гнізда у округи, шукала сліди присутності Едді. Чотири роки Едді був її єдиним компаньйоном та другом.
Тепер ви розумієте, чому вони постійно просять жерти. Це робиться з метою особистої безпеки. Тяжкого кота важко вкрасти.
А що робити тим, хто поки що не знайшов свого кота? Потрібно створити сайт та розмістити сторінку з веб-формою. За допомогою цієї форми відвідувачі сайту зможуть поінформувати вас про деталі викрадення. Ваш котик знайдеться!
Створення веб-форми засобами HTML
Для створення форми можна використовувати звичайні HTML-теги. Жодного програмування поки що не потрібно. Давайте спробуєм:
report.html
У принципі, створена форма виглядає цілком працездатною. Введіть тепер у неї якісь дані та натисніть кнопкуНадіслати повідомлення. Що при цьому станеться? Ось тут починаються проблеми. Результат буде непередбачуваним. У когось запуститься Outlook або інша поштова програма, хто може взагалі нічого не запуститися.Навіть у тих, у кого програма запустилася, лист виглядатиме по-різному. У деяких буде порожній лист, у інших – введені раніше дані будуть нечитаними або змішані в одну купу. У будь-якому разі ми маємо проблему. А пов'язана вона з тим, що ми вказали для атрибутуactionформатmailto, який відповідає за надсилання листів. На різних комп'ютерах цей формат може поводитися по-різному.
Тому нам потрібно навчитися керувати процесом передачі даних, введених у веб-форму. Одним із таких варіантів є PHP.
Нам достатньо замінити виразaction="mailto:[email protected]"наaction="report.php", щоб сценарій став оброблятися на сервері. Коли користувач натисне кнопку надсилання повідомлення, запуститься наш сценарій.
Створимо новий файл зі сценарієм:
Тепер потрібно внести зміни у форму. Відкриємо файлreport.htmlі змініть атрибут формиactionзmailtoнаreport.php:
Коли користувач надішле форму, то браузер передасть такі дані:
- textfield – значення текстового поля;
- pass – значення поля введення пароля;
- hidden – значення прихованого поля;
- параметри checkbox: checkbox1, checkbox2 та checkbox3 будуть передані тільки в тому випадку, якщо відповідні перемикачі активні;
- radiobutton - значення групи radio (буде передано одне із значень: Yes або No);
- textarea - вміст багаторядкової текстової області;
- days – значення списку з єдиним вибором;
- days_m - значення списку з множинним вибором.
Параметри textfield, pass та textarea обробляються просто, ми вже розглядали цей приклад.
З параметрами checkbox1, checkbox2, checkbox3, таRadiobutton справа дещо складніше. Якщо перемикач не активний, то ці параметри взагалі не будуть передані на сервер, ніби їх взагалі не було. Отже, при спробі звернутися до цих параметрів у сценарії, ми отримаємо повідомлення, що змінна не існує. Тому просто написатиecho $_POST['checkbox1'];ми не можемо, нам необхідно спочатку перевірити існування цих параметрів у запиті. Перевірка існування параметра здійснюється за допомогою функціїisset (), яка служить для перевірки існування змінних.
Складніше обробляти параметри списку з множинним вибором, тому що в цьому випадку параметри передаються так:
Один параметр має декілька значень. Це нагадує нам масив даних. Дійсно, множинний список можна подати у вигляді масиву, а обробити його елементи за допомогою циклуforeach.
Квадратні дужки [] це ознака масиву. Циклічна обробка масиву здійснюється так:
Цілком кодreport3.php
Перевірка даних
Справа в тому, що змінні суперглобального масиву $_POST завжди будуть повертати вам значення true незалежно від того, містять вони будь-які дані чи ні. Інакше кажучи, функціяisset()не покаже вам різниці між порожнім полем введення та полем, до якого введені будь-які дані. Функціяempty()перевіряє, чи справді поле введення порожнє чи ні, що саме нам потрібно для контролю достовірності.
Додамо перевірку одного поля з першого прикладуreport.php.
Звичайно, слід перевірити всі поля.
Іноді роблять перевірку навпаки, тобто треба переконатися, що рядок не пустий і можна продовжувати роботу.
Щоб не перевіряти кожне поле в окремих умовахif, перевірку об'єднують.
Це умовне вираз матиме значенняtrue, коли обидві змінні мають непусті значення.
Даний логічний оператор&&відповідаєAND, є щеOR, що виражається через, який повернеtrueколи будь-яка з аналізованих величин має значенняtrue.
Вам слід переписати приклади вище.
Також слід додати блокelseз виведенням помилки, щоб користувач розумів, у чому річ.