Урок 6 - Робота з даними форм
Сьогодні поговоримо про роботу над даними, які ми будемо получати з форм.
Нарешті ми підійшли до насправді високофункціональної та гнучкої частини мови.
Всі сайти, портали, форуми, блоги ітд, получають дані від користувача через форми, тобто форми є основною частиної для зв’язку з юзером! Деякі приклади форм:
- Форма зв’язку
- Форма відповіді на любому форумі
- Форма редагування інформації або скриптів на сайті
- Форма для передачі файлів
- та всі інші види
Хочу також нагадати, що уроки розраховані на “учня”, який вже почуває себе досить вільно в такій мові-розмітці, як HTML (XHTML), якщо ви хочете продовжувати вивчати PHP, за допомогою мого сайту, ще раз наполягаю попередньо вивчити HTML, якщо ви його не знаєте.
Отож, повертаючись до уроку, як я казав форми є дуже важливим і необхідним елементом для ваших сайтів.
Як же вони працюють, як передаються дані?
Все дуже просто та зрозуміло для всіх. Ось простий приклад лінку, який вже в своїй конструкції має дані, які можуть бути обролені та інтерпретовані за допомогою PHP:
http://lessons.ua/script.php?name=Igor&age=18
Як ви могли здогадатися цей лінк “передає” скрипту script.php, дані, а саме:
name = Igor
age = 18
Вам нічого не нагадує така структура?
Так це дуже схоже на присвоєння змінним значень.
А ось ще один приклад лінку, який вже в собі зберігає дані:
http://lessons.ua/script.php?i+love+my+computer
Ця конструкція виражає QUERY_STRING, в який і заносяться дані.
А тепер про конструкції для обробки даних.
При получені любих даних, скрипт створює спеціальні масиви (про массиви поговоримо в Неділю). Всього їх 5 типів:
- $_GET[] - збергія GET-дані форм, які прийшли скрипту через зміну оточення QUERY_STRING
- $_POST[] - зберігає дані, які прийшли через метод POST
- $_COOKIES[] - всі куккі (ще не час), які передав браузер
- $_REQUEST[] - об’єднює всі 3 вищеперерахованих типи масивів
- $_SERVER[] - зберігає змінні оточення, які передав сервер
Тепер розглянемо кожен окремо.
Ось простий скрипт з використанням $_GET, $_SERVER (name.php):
My name is: <?=@$_GET['name']?><br />
<form method="get" action="<?=$_SERVER['SCRIPT_NAME']?>">
<input type="text" name="name" /> <input type="submit" />
</form>
@ - це спеціальна “заглушка” для помилок, яку вам потрібно поставити щоб уникнути помилки, при “жорстких” налаштувань компілятора, про які я говорив в другому уроці:
Хитрощі, які рекомендую використовувати:
При написані скриптів та їх тесутванні пропоную включити візуалізацію всіх помилок в файлі на локальному сервері \usr\local\php5\php.ini.
error_reporting = E_ALL ; & ~E_NOTICE & ~E_STRICT (по дефолту)
При тестуванні чужих скриптів (при умові що вони вже протестовані на помилки), замінивши попередній рядок ↑, раджу використовувати такі налаштуванні:
error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERRORЦе перш за все, через те що, не всі скрипти написані під php5, який більш “суворіший” за своїх попередників і в вас можуть виникнути проблеми.
А тепер по пунктах:
<?=@$_GET['name']?>
еквівалентне:
<?php echo @$_GET['name']; ?>
Тобто видає значення масиву в змінні $_GET відповідно до ключа (зазвичай в різних книжках її вже більше не називають зімнною, але я буду!).
Структура змінних, які ви вже побачили на приклді, які ми розглядаємо, така:
$_ТИПЗМІННОЇ['КЛЮЧ'] - зрозумієте краще коли розглянемо глибше массиви.
Відповідно:
<?=$_SERVER['SCRIPT_NAME']?>
Зберігає в собі ім’я скрипту, де і був викликаний цей код.
Після введення імені в формі нажміть на кнопку, щоб відіслати дані скрипту.
Що сталося?
Як бачите, форма згенерувала, GET методом, дані на основі ваших, та відслала їх скрипту.
Лінк до скрипту змінився на такий: http://lessons.ua/name.php?name=Igor
Відповідно за допомогою змінної, який зберігає массив, в який PHP вже заніс дані з цього GET методу, ми візуалізовуємо дані.
По такому принципу працює і $_POST та $_REQUEST, а $_COOKIES має особливий режим присвоєння, а $_SERVER зберігає вже попередньо визначені значення.
Ось аналог нашого скрипту з використанням $_POST і за ним $_REQUEST.
My name is: <?=@$_POST['name']?><br />
<form method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">
<input type="text" name="name" /> <input type="submit" />
</form>
My name is: <?=@$_REQUEST['name']?><br />
<form method="get" action="<?=$_SERVER['SCRIPT_NAME']?>">
<input type="text" name="name" /> <input type="submit" />
</form>
Про $_COOKIES поговоримо в майбутньому, а ось всі значення в масиві $_SERVER можна побачити через спеціальний скрипт який візуалізуватиме всі змінні оточення (get,post,cookies,server,request).
Скрипт: http://lessons.ua/dump.php:
<pre>
<?php
print_r($GLOBALS);
?>
</pre>
Між
[_SERVER] => Array
(
та
)
можете побачити всі системні змінні які можна викликати за допомогою $_SERVER, а також всі інші значення в масивах, інших змінних.
Ось і все я коротко та узагальнено розказав про обробку форм, заглиблюватися не буду, тому що нема потреби, на мою думку краще інше, поступово в майбутньому вивчати, ніж зразу навантажувати вас теорією (практика найкращий метод вивчення).
Після багатьох відгуків, хочу прислухатися до читачів та ввести рубрику на уроках: “Домашні завдання”, в якій я б давав ДЗ учням, для контролю якості вивчення.
Отож, для всіх хто закінчив всі 6 уроків мого курсу, ось перше ДЗ:
- Створити скрипт, який би показував привітання, та в якому б можна було ввести ім’я для візуалізації в привітанні
- Створити скрипт, в якому:
- була б задана константа з вашим іменем
- задано в змінні ваш IP адрес (див $_SERVER)
- та щоб була форма для зазначення прізвища
І все це щоб було показано за таким шаблоном:
Привіт ПРІЗВИЩЕ(якщо задане через форму) IM’Я(з константної)
Ваш IP: ЗМІНА(з попередньо зазначеним IP з $_SERVER)
Думаю цих два міні завдання дозволить вам протестувати ваші знання.
Прокоментувати ваші результати зможете тут в коментарях, також пишіть про складності.
Також для програмістів початківців та для моїх учнів, рекомендую форум http://bloggers.org.ua, де є спеціальний розділ для всіх питань по html, php, css та інших потрібних мов та розміток для веб.
мда…. нахомутав немало
з нетерпінням чекаю, доки дійдеш до розповіді про ООП 