Урок 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 типів:

  1. $_GET[] - збергія GET-дані форм, які прийшли скрипту через зміну оточення QUERY_STRING
  2. $_POST[] - зберігає дані, які прийшли через метод POST
  3. $_COOKIES[] - всі куккі (ще не час), які передав браузер
  4. $_REQUEST[] - об’єднює всі 3 вищеперерахованих типи масивів
  5. $_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 уроків мого курсу, ось перше ДЗ:

  • Створити скрипт, який би показував привітання, та в якому б можна було ввести ім’я для візуалізації в привітанні
  • Створити скрипт, в якому:
    1. була б задана константа з вашим іменем
    2. задано в змінні ваш IP адрес (див $_SERVER)
    3. та щоб була форма для зазначення прізвища

    І все це щоб було показано за таким шаблоном:

    Привіт ПРІЗВИЩЕ(якщо задане через форму) IM’Я(з константної)
    Ваш IP: ЗМІНА(з попередньо зазначеним IP з $_SERVER)

Думаю цих два міні завдання дозволить вам протестувати ваші знання.

Прокоментувати ваші результати зможете тут в коментарях, також пишіть про складності.

Також для програмістів початківців та для моїх учнів, рекомендую форум http://bloggers.org.ua, де є спеціальний розділ для всіх питань по html, php, css та інших потрібних мов та розміток для веб.

Загрузка...

1 коментар:

  1. vedeney, 22. Березень 2008, 10:33

    мда…. нахомутав немало :) з нетерпінням чекаю, доки дійдеш до розповіді про ООП :)

     

Написати коментар:


Украинская Баннерная Сеть
WeRteR Blog Український рейтинг TOP.TOPUA.NEThurtom.com
UA TOP BloggersІвано-Франківськ
Безкоштовний хостинг TOPUA