Застосування методів GET та POST у PHP важко переоцінити, оскільки ці методи зустрічаються практично на кожному сайті. Перш ніж вивчати нижче описаний матеріал, раджу ознайомитись з html тегом
Зберігши цей код у HTML-файлі та переглянувши його за допомогою вашого улюбленого браузера, ви побачите звичну HTML-форму:
Тег
- action - вказує URL (повний або відносний), на який буде надіслано форму. Якщо цей атрибут не вказати, більшість браузерів (точніше кажучи, всі відомі мені браузери) надсилають форму на поточний документ, тобто "саму на себе". Це зручне скорочення, але за стандартом HTML атрибут action є обов'язковим.
- метод - спосіб відправлення форми. Їх два.
- GET - надсилання даних форми в адресному рядку.
Ви могли побачити на різних сайтах присутність в кінці URL символу "?" та наступних за ним даних у форматі параметр = значення. Тут "параметр" відповідає значенню атрибуту name елементів форми (див. нижче про тег ), а "значення" - вмісту атрибуту value (у ньому, наприклад, міститься введення користувача в текстове поле того ж тэга ).
Для прикладу – спробуйте пошукати що-небудь в Яндексі та зверніть увагу на адресний рядок браузера. Це і є спосіб GET. - POST - дані форми надсилаються у тілі запиту. Якщо не зовсім зрозуміло (або зовсім незрозуміло), що це таке – не турбуйтесь, скоро ми до цього питання повернемося.
- GET - надсилання даних форми в адресному рядку.
Тег - задає елемент форми, який визначається атрибутом type:
- Значення "text" визначає однорядкове текстове поле введення
- Значення submit задає кнопку, при натисканні якої відбувається відправлення форми на сервер
Можливі й інші значення (та й - Не єдиний тег, що задає елемент форми).
Отже, що відбувається, коли ми натискаємо кнопку "OK"?
- Браузер переглядає елементи, що входять у форму, і формує з їх атрибутів name і value дані форми. Допустимо, введено ім'я Vasya . В цьому випадку дані форми - name=Vasya&okbutton=OK
- Браузер встановлює з'єднання з сервером, відправляє на сервер запит документа, вказаного в атрибуті action тега
, використовуючи метод відправлення даних, вказаний в атрибуті методу (в даному випадку - GET), передаючи в запиті дані форми. - Сервер аналізує отриманий запит, формує відповідь, відправляє його браузеру та закриває з'єднання.
- Браузер відображає отриманий від сервера документ
Надсилання того ж запиту вручну (з допомогою telnet) виглядає наступним чином (припустимо, що доменне ім'я сайту - www.example.com):
Telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n Host: www.example.com\r\n \r\n
Як ви, швидше за все, вже здогадалися, натискання submit-кнопки у формі з методом відправки "GET" аналогічно до введення відповідного URL (зі знаком питання та даними форми в кінці) в адресному рядку браузера:
http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK
Насправді метод GET використовується завжди, коли ви запитуєте з сервера будь-який документ, просто ввівши його URL, або клацнувши за посиланням. При використанні
Можливо, всі ці технічні подробиці та вправи з telnet-ом здаються вам неймовірно нудними і навіть непотрібними ("а до чого тут PHP?"). А даремно. :) Це основи роботи з протоколу HTTP, які необхідно знати назубок кожному Web-програмісту, і це не теоретичні знання - все це знадобиться на практиці.
Тепер замінимо перший рядок нашої форми на наступний:
Ми вказали спосіб відправлення "POST". В цьому випадку дані відправляються на сервер дещо іншим способом:
Telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n Host: www.example.com\r\n Content-Type: application/x-www-form-urlencoded\r\ n Content-Length: 41263 n=Vasya&okbutton=OK
При використанні методу POST дані форми надсилаються вже після "двох Enter-ів" – у тілі запиту. Все, що вище - насправді заголовок запиту (і коли ми використовували метод GET, ці форми відправлялися в заголовку). Для того, щоб сервер знав, на якому байті закінчити читання тіла запиту, у заголовку є рядок Content-Length ; про те ж, що дані форми будуть передані у вигляді параметр1=значення1&параметр2=значення2... , причому значення передаються у вигляді urlencode - тобто так само, як і за допомогою методу GET , але в тілі запиту, - серверу повідомляє заголовок Content -Type: application/x-www-form-urlencoded .
Перевага методу POST – відсутність обмеження на довжину рядка з даними форми.
При використанні методу POST неможливо відправити форму, просто "зайшовши за посиланням", як було з GET.
При використанні POST-форми, в її атрибуті action можна вказати після знака питання та параметри GET-форми. Таким чином, метод POST включає і метод GET .
Масиви $_GET і $_POST
Отже, форми є основним способом обміну даними між веб-сервером і браузером, тобто забезпечують взаємодію з користувачем - власне, навіщо і потрібне веб-програмування.
Розглянемо простий приклад:
if ($_SERVER [ "REQUEST_METHOD" ] == "POST" ) (
echo "
Вітання, " . $_POST [ " name " ] . " .
!" ;}
?>
Введіть ваше ім'я:
Форма, наведена у рядках 8-12, містить два елементи: name та okbutton . Атрибут method вказує метод відправлення форми POST , атрибут ж action , що вказує URL, який відправляється форма, заповнюється значенням серверної змінної PHP_SELF - адресою виконуваного на даний момент скрипта.
=$_SERVER["PHP_SELF"]?>- скорочена форма запису для echo $_SERVER["PHP_SELF"]; ?> .
Припустимо, у полі name ми ввели значення Вася і натиснули кнопку OK. При цьому браузер відправляє на сервер POST запит. Тіло запиту: name=Вася&okbutton=OK. PHP автоматично заповнює масив $_POST:
$_POST [ "name" ] = "Вася"
$_POST [ "okbutton" ] = "OK"
Насправді значення "Вася" відправляється браузером в urlencode-виді; для кодування windows-1251 це значення виглядає як %C2%E0%F1%FF . Але оскільки PHP автоматично здійснює необхідне декодування, ми можемо "забути" про цю особливість - поки не доведеться працювати з HTTP-запитами вручну.
Так як у тілі запиту вказуються тільки імена та значення, але не типи елементів форм, PHP поняття не має, відповідає $_POST["name"] рядку введення, кнопці або списку. Але ця інформація нам загалом зовсім не потрібна. :)
Оскільки знати, що написано на кнопці submit, нам необов'язково, у рядку 11 можна видалити атрибут name, скоротивши опис кнопки до . У цьому випадку браузер відправить POST -запит name=Вася.
А тепер - те саме, але для GET-форми:
if (isset($_GET ["name" ])) (
echo "
Вітання, " . $_GET [ "name" ] . "
!" ;}
?>
Введіть ваше ім'я:
У рядку 8 можна було б з таким самим успіхом написати
PHP з GET-формами надходить так само, як і з POST, з тією відмінністю, що заповнюється масив $_GET.
Кардинальна відмінність - у рядку 4. Оскільки простий введення адреси в рядку браузера є GET-запитом, перевірка if ($_SERVER["REQUEST_METHOD"] == "GET") безглузда. Тому ми вдається до конструкції isset() , яка повертає true , якщо ця змінна визначена (тобто їй було надано значення), і false - якщо змінна не визначена. Якщо форма була заповнена - як ви вже зрозуміли, PHP автоматично надає $_GET["name"] відповідне значення.
Спосіб перевірки за допомогою isset() – універсальний, його можна було б використовувати і для POST-форми. Більше того, він є кращим, оскільки дозволяє з'ясувати, які саме поля форми заповнені.
Трохи складніший приклад.
echo "Вкажіть ім'я!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
echo
" ;
) else (
" ;
echo "Вам". $age. років
" ;
}
echo "
" ;
}
?>
Введіть ваше ім'я:
Введіть свій рік народження:
Жодних нових прийомів тут не використовується. Розберіться, виконайте код, спробуйте модифікувати...
Змінимо останній приклад, щоб користувачеві не потрібно повторно заповнювати поля. Для цього заповнимо атрибути value елементів форми щойно введеними значеннями.
$name = isset($_POST ["name"]) ? $_POST ["name"]: "";
$year = isset($_POST ["year" ]) ? $_POST ["year"]: "";
If (isset($_POST ["name" ], $_POST [ "year" ])) (
if ($_POST [ "name" ] == "" ) (
echo "Вкажіть ім'я!
"
;
) else if ($_POST [ "year" ]<
1900
||
$_POST
[
"year"
] >
2004
) {
echo "Вкажіть рік народження! Допустимий діапазон значень: 1900..2004
"
;
) else (
echo "Привіт," . $_POST ["name"] . "!
"
;
$age = 2004 - $_POST ["year"];
echo "Вам". $age. років
"
;
}
echo "
" ;
}
?>
Введіть ваше ім'я:
Введіть свій рік народження:
Дещо незрозумілими можуть виявитися рядки 4 і 5. Все дуже просто: рядок 4 можна було б записати так:
if (isset($_POST ["name" ])))
$name = $_POST ["name"];
else
$name = "";
Може виникнути питання - чому б не викинути рядки 4-5 і не написати:
Введіть ваше ім'я:
">
Введіть свій рік народження:
">
Справа в тому, що, якщо ці POST-змінні не визначені - а так і буде, якщо форму ще не заповнювали, - PHP видасть попередження про використання неініціалізованих змінних (причому, цілком обґрунтовано: таке повідомлення дозволяє швидко знаходити трудновиявлені друкарські помилки в іменах змінних, а також попереджає про можливі "дірки" на сайті). Можна, звичайно, помістити код з isset прямо у форму, але вийде занадто громіздко.
Розібралися? А тепер спробуйте знайти помилку у наведеному коді. Ну, не зовсім помилку, але недолік.
htmlspecialchars()
Не знайшли? Я підкажу. Введіть, наприклад, у поле "ім'я" подвійну лапку і який-небудь текст, наприклад, "Вася". Відправте форму, і погляньте на вихідний код отриманої сторінки. У четвертому рядку буде щось на кшталт:
Введіть ваше ім'я:
Тобто нічого хорошого. А якби хитрий користувач запровадив JavaScript-код?
Для вирішення цієї проблеми необхідно скористатися функцією htmlspecialchars() , яка замінить службові символи на їх HTML-подання (наприклад, лапку - на "):
$name = isset($_POST ["name"]) ? htmlspecialchars ($_POST ["name"]): "";
$year = isset($_POST ["year" ]) ? htmlspecialchars ($_POST ["year"]): "";
If (isset($_POST ["name" ], $_POST [ "year" ])) (
if ($_POST [ "name" ] == "" ) (
echo "Вкажіть ім'я!
"
;
) else if ($_POST [ "year" ]<
1900
||
$_POST
[
"year"
] >
2004
) {
echo "Вкажіть рік народження! Допустимий діапазон значень: 1900..2004
"
;
) else (
echo "Привіт," . $name. "!
"
;
$age = 2004 - $_POST ["year"];
echo "Вам". $age. років
"
;
}
echo "
" ;
}
?>
Введіть ваше ім'я:
Введіть свій рік народження:
Повторіть досвід і переконайтеся, що HTML-код тепер коректний.
Запам'ятайте - функцію htmlspecialchars() необхідно використовувати завжди, коли виводиться вміст змінної, в якій можуть бути спецсимволи HTML.
phpinfo()
Функція phpinfo() - одна з найважливіших у PHP. Вона виводить інформацію про налаштування PHP, значення різних конфігураційних змінних...
Чому я згадую про неї у статті, присвяченій формам? phpinfo() - найзручніший засіб налагодження. phpinfo() , крім іншого, виводить значення всіх $_GET , $_POST і $_SERVER змінних. Отже, якщо змінна форми "загубилася", найпростіший спосіб виявити, у чому справа - скористатися функцією phpinfo(). Щоб функція виводила лише значення змінних (і вам не довелося прокручувати десяток сторінок), її слід викликати так: phpinfo(INFO_VARIABLES); , або - що абсолютно те саме - phpinfo(32);.
Введіть ваше ім'я:
phpinfo (32);
?>
Або, наприклад, така ситуація: ви хочете дізнатися IP-адресу відвідувача. Ви пам'ятаєте, що відповідна змінна зберігається в масиві $_SERVER , але - ось невдача - забули, як саме змінна називається. Знову ж таки, викликаємо phpinfo(32); , шукаємо в табличці свою IP-адресу і знаходимо її - у рядку $_SERVER["REMOTE_ADDR"] .
Лабораторна робота 1. Протокол HTTP. Методи GET, POST. HTML форми.
Теоретична частина
Життєвий цикл запиту у протоколі HTTP
- Браузер відкриває з'єднанняіз сервером
- Браузер надсилає серверу запит на отримання сторінки
- Сервер формує відповідь (найчастіше - HTML-код) браузеру та закриває з'єднання
- Браузер обробляє HTML-код та відображає сторінку
Зверніть увагу на виділене жирним. Ще до того, як ви побачили на екрані запитану сторінку, з'єднання з сервером закрите, і він про вас забув. І коли ви введете іншу (або ту саму) адресу, або клацніть на посилання, або натисніть на кнопку HTML-форми - та ж схема повториться знову.
Таку схему роботи називають "клієнт-сервер". Клієнт у даному випадку – браузер.
Отже, з'єднання з веб-сервером триває лише кілька секунд (або часткою секунд) - це проміжок часу між клацанням за посиланням (або іншим способом запиту) і початком відображення сторінки. Більшість браузерів під час з'єднання відображають певний індикатор, наприклад, MS Internet Explorer відображає анімацію у верхньому правому куті.
Щоб назавжди позбутися сприйняття HTTP як "чорної скриньки", "прикинемось" браузером за допомогою telnet"а:
- Запустимо telnet ya.ru 80
- Введемо у вікні терміналу наступне (якщо введення не відображається – нічого страшного):
GET/HTTP/1.0[тут натиснемо Enter]
Host: ya.ru[тут натиснемо Enter двічі]
Натискання Enter відповідає, як правило, комбінації символів CR+LF, що позначаються як \r\n. Далі використовуватиметься саме це позначення.
На екрані пробіжить HTML-код сторінки http://ya.ru/. Як бачите – нічого складного.
Вихідний код поточної сторінки можна переглянути практично в будь-якому браузері, вибравши меню "View|Source".
Картинки, фрейми - все це додаткові запити, такі самі. Власне, звідки беруться зображення у вікні браузера: при парсингу (обробці) HTML-коду, браузер, натикаючись на тег https://i2.wp.com/ малюнок"> здійснює додатковий запит до сервера - запит картинки, і відображає її на місці, де стоїть тег
.
Спробуйте:
Telnet www.google.ru 80
GET /php/php5ru.png HTTP/1.0\r\n
Host: ya.ru\r\n\r\n
По екрану пробіжить те, що ви побачите, якщо перегляньте цей PNG-файл у текстовому редакторі.
І-2. HTML-форми. Методи надсилання даних на сервер
З HTML-формами ви, напевно, вже зустрічалися:
- Введіть ваше ім'я:
Зберігши цей код у HTML-файлі та переглянувши його за допомогою вашого улюбленого браузера, ви побачите звичну HTML-форму:
Введіть ваше ім'я:
Розглянемо теги, що використовуються в цьому невеликому прикладі, докладніше.
Тег
- action- Вказує URL (повний або відносний), на який буде відправленоформа. Надсилання форми - це такий самий запит до сервера, як і всі інші (як я вже описав вище).
Якщо цей атрибут не вказати, більшість браузерів (точніше кажучи, всі відомі мені браузери) надсилають форму на поточний документ, тобто "саму на себе". Це зручне скорочення, але за стандартом HTML атрибут action є обов'язковим.
- метод - спосіб відправлення форми. Їх два.
- GET- Надсилання даних форми в адресному рядку.
Ви могли побачити на різних сайтах присутність в кінці URL символу "?" та наступних за ним даних у форматі параметр = значення. Тут "параметр" відповідає значенняматрибуту nameелементів форми (див. нижче про тег ), а "значення" - вмісту атрибуту value(у ньому, наприклад, міститься введення користувача в текстове поле того ж таки тега ).
Для прикладу – спробуйте пошукати що-небудь в Яндексі та зверніть увагу на адресний рядок браузера. Це і є спосіб GET. - POST- Дані форми відправляються в тілі запиту. Якщо не зовсім зрозуміло (або зовсім незрозуміло), що це таке – не турбуйтесь, скоро ми до цього питання повернемося.
Якщо атрибут методне вказано - мається на увазі "GET".
Тег - задає елемент форми, що визначається атрибутом type :
- Значення "text"задає однорядкове текстове поле введення
- Значення "submit"задає кнопку, при натисканні якої відбувається відправкаформи на сервер
Можливі й інші значення (та й - не єдиний тег, що задає елемент форми), але їх ми розглянемо у наступних розділах.
Отже, що відбувається, коли ми натискаємо кнопку "OK"?
- Браузер переглядає елементи, що входять у форму, і формує з їх атрибутів name і value дані форми. Допустимо, введено ім'я Vasya. В цьому випадку дані форми - name=Vasya&okbutton=OK
- Браузер встановлює з'єднання із сервером, надсилає на сервер запит документа, вказаного в атрибуті actionтега
, використовуючи метод відправлення даних, вказаний в атрибуті метод(в даному випадку – GET), передаючи у запиті дані форми. - Сервер аналізує отриманий запит, формує відповідь, відправляє його браузеру та закриває з'єднання.
- Браузер відображає отриманий від сервера документ
Надсилання того ж запиту вручну (з допомогою telnet) виглядає наступним чином (припустимо, що доменне ім'я сайту - www.example.com):
telnet www.example.com 80
GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n
Host: www.example.com\r\n
\r\n
Як ви, швидше за все, вже здогадалися, натискання submit-кнопки у формі з методом відправки "GET" аналогічно до введення відповідного URL (зі знаком питання та даними форми в кінці) в адресному рядку браузера: http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK
Насправді метод GET використовується завжди, коли ви запитуєте з сервера будь-який документ, просто ввівши його URL, або клацнувши за посиланням. При використанні
Тепер замінимо перший рядок нашої форми на наступний:
Ми вказали спосіб відправлення "POST". В цьому випадку дані відправляються на сервер дещо іншим способом:
telnet www.example.com 80
POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n
Host: www.example.com\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 22\r\n
\r\n
name=Vasya&okbutton=OK
При використанні методу POST дані форми відправляються вже після "двох Enter-ів" - тілізапиту. Все, що вище – насправді Заголовокзапиту (і коли ми використовували метод GET, ці форми відправлялися в заголовку). Для того, щоб сервер знав, на якому байті закінчити читання тіла запиту, у заголовку є рядок Content-Length; про те, що дані форми будуть передані вигляді параметр1=значення1&параметр2=значення2..., причому значення передаються у вигляді urlencode - тобто, так само, як і за допомогою методу GET, але в тілі запиту, - серверу повідомляє заголовок "Content-Type: application/x-www-form-urlencoded".
Перевага методу POST – відсутність обмеження на довжину рядка з даними форми.
При використанні методу POST неможливо відправити форму, просто "зайшовши за посиланням", як було з GET.
При використанні POST-форми у її атрибуті actionможна вказати після знака питання та параметри GET-форми. Таким чином, метод POST включає і метод GET.
Оновлено 12.12.2015 р.
Незважаючи на те, що тема відправки поштових повідомлень прямо зі сторінок сайту вже досить побита, але судячи з листів, які я отримую від відвідувачів свого сайту, роблю висновок, що багато хто ще має прогалини знань у цих питаннях.
Отже, у цьому уроці ми навчимося робити форму надсилання поштових повідомлень зі сторінок сайту з перевіркою на правильність введення даних. Тобто. якщо якесь поле форми буде не заповнене, то скрипт видасть помилку і повідомить про це відвідувача. Приклад роботи такої форми Ви можете побачити. Якщо Ви заповните цю форму та натисніть кнопку: Надіслати повідомлення, то я отримаю Ваше послання.
Перевага такого надсилання повідомлень очевидна:
1. Вам не потрібно "світити в Інтернеті" свою поштову адресу, а значить вона не потрапить до спамерів.
2. Якщо відвідувач хоче запитати Вас або щось запитати йому не потрібно, копіювати адресу електронної пошти, відкривати свій поштовий клієнт, писати повідомлення і т.д. Відвідувач швидко заповнить у формі потрібні дані та надішле Вам повідомлення.
3. За такої організації зворотного зв'язку з відвідувачами, ймовірність доставки Вам повідомлення майже 100%, особливо якщо поштова адреса прив'язана до вашого домену. Адже з довгого поштового ланцюжка виключаються проміжні вузли. Отже надійність доставки пошти різко підвищується.
Як створити форму надсилання повідомлень?
Як правило, подібні скрипти складаються з двох частин і код розташований у двох різних файлах:
- Перший файл- це сама форма, у якій заповнюються дані повідомлення.
- Другий файл- це файл-обробник, який отримує дані з форми (першого файлу) та відправляє за вказаною в скрипті ел.адресою. Але ці частини скрипта працюють завжди обов'язково в парі.
Першу частину скрипту ми виносимо в окремий файл та назвемо його: mail.php. У цьому файлі буде розміщена форма введення даних. ім'я файлу mail.phpя взяв умовно, Ви можете назвати цей файл як завгодно. Цей файл може мати й інше розширення, наприклад .html.
Для звернення відвідувачів сайту до цього файлу, зазвичай роблять просте посилання: Написати автору сайту , Надіслати повідомлення або щось подібне. Коли відвідувач натискає на таке посилання він потрапляє на окрему сторінку з формою в яку потрібно ввести дані (інформацію) для відправлення повідомлення.
Отже, створюєте новий файл, надайте йому ім'я: mail.phpабо mail.htmlі вставляєте код код Лістинга 1.
Лістинг 1
|
Це найпростіша форма, що складається всього з трьох полів для введення даних. Ці поля я назвав: Ваше ім'я, Ваш e-mail, Ваше повідомлення. За потреби кількість полів можна збільшити.
Перші два поля: Ваше ім'я, Ваш e-mail, описуються тегами:
Ваше ім'я:
але кожному з них присвоюється своє ім'я, яке називається ідентифікатор: name="name"і name="email"відповідно.
Третє поле для введення повідомлення описане тегами:
Ваше повідомлення:
Це поле має ідентифікатор: name="mess".
І звичайно є дві кнопки: Надіслати повідомленняі Очистити форму.
Даним (інформації), які відвідувач заносить у форму, надаються відповідні ідентифікатори: name, emailі mess, запам'ятовуйте – це важливо!
Для зручності оформлення вся форма поміщена у звичайну таблицю, зовнішній вигляд якої можна оформити за допомогою , у мене це клас: class="td_border", його я тут не наводжу, за потреби допишіть самі, на власний смак.
Файл обробник.
Друга частина скрипта складається з файлу оброблювача: mail2.php, в який методом POSTпередаються всі дані з відповідними ідентифікаторами: name, emailі mess. Тут ці дані поміщаються у змінні: $name, $email, $mess.
Створюємо файл mail2.phpі прописуємо до нього код Лістинга 2:
Лістинг 2
$name = $_POST["name"]; $REMOTE_ADDR = $_POST["REMOTE_ADDR"]; if (isset ($name)) "; if (isset ($email)) "; if (isset ($mess)) "; $i = "не вказано"; $to = "admin@сайт"; Для мене це дуже важливо! Найближчим часом Ви обов'язково отримаєте відповідь."; exit; ?> |
У цьому файлі відбувається перевірка введених відвідувачем сайту у форму даних та подальше відправлення повідомлення за вказаною адресою електронної пошти.
При незаповнених полях чи заповнених некоректно, скрипт поверне відвідувачу повідомлення із зазначенням конкретної причини.
Звертаю Вашу увагу, що файл: mail2.php обов'язково повинен мати розширення .php , т.к. надсилання повідомлення здійснюється за допомогою функції mail PHP.
І природно ваш хостинг, повинен підтримувати роботу PHP. Це переважно стосується безкоштовних хостингів, хоча останнім часом навіть на безкоштовних хостингах практично скрізь встановлений PHP.
У коді Лістинга 2все просто, виправте всі значення, виділені червоним під свої вимоги, а саме:
- пропишіть свій Адреса електронної пошти, на який надсилатимуться повідомлення (змінна $to);
- виправте тему повідомлення (змінна $subject);
- зверніть увагу на кодування ( charset = windows-1251). Кодування пропишіть те, що використовується на вашому сайті. У російськомовному інтернеті кодування може бути: "utf-8"або "windows-1251". Якщо ви помилитеся з кодуванням текст у листі буде відображатися неправильно (кракозябрами).
Ось, власне, і все, тепер залишилося завантажити файли: mail.phpі mail2.phpі на вашому сайті з'явиться зручна форма для надсилання повідомлень.
Коментарі до цієї статті (уроку):
Дякую за урок. Ото правду кажуть, що все приходить вчасно. Сьогодні збиралася шукати в інтернеті як зробити форму контакту для сайту, причому незалежну. Я так розумію, що ця підійде.
Гарний урок! Дякую!
Спасибі Андрію, гарний урок.
Дякую, думаю, стане в нагоді
Вам пише Савін Дмитро Олександрович (SAVIN DMITRY ALEXANDROVICH), хочу дізнатися все по докладніше про форми в CSS, я мало про це обізнаний: докладніше про властивість action, як я знаю action це посилання на документ, куди надсилається запит даних або самі дані з форми, або щось в цьому роді.
Вітаю, Андрій! З повагою до Вас Ахмад. Ось я теж хочу на сайті створити "Додати Ваш коментар" щоб відвідувачі могли залишити свої Відгуки. Який код писати мені? Дякую Вам мені сподобалося. Ахмад
Красень! дуже корисна інформація!
Корисно, то корисно, але не запускаюсь. Після заповнення форми видається листинг mail2.php
Корисно, щось корисно, але не запускається. Після заповнення форми видається листинг mail2.php
Все добре працює, тільки кнопочки не виходять об'ємними як автор. Чи може хтось підкаже, як зробити об'ємні кнопочки? Автору дякую!
а в мене не працює. Точніше працює на половину. лист надсилає, але порожній. дані з майл1 не переходять у майл2
На маїл не приходить. У чому каверза? Я не зрозумію як він без логіна і пароля чогось відправить. Це що поштовий сервер типу? Проста форма та все
Дякую за форму! Працює! У кого не працює – уважно виконуйте кожен крок. У мене теж не одразу все вийшло. Андрію, ще раз дякую!
Допоможіть пліз, форму вставила все як Ок, але на пошту яку я вказала повідомлення не доходить, хоча і пишеться повідомлення відправлено...
Підкажіть, а як зробити так, щоб після відправки/невдалої відправки листа не відкривалося нове вікно, а писалість у старому?
Андрій. Я розумію, що обробник викликається. Я поки що не особливо у php знаюся. Але мені ось чого хотілося досягти: сторінка з поштовою формою одна, тобто. після натискання "Надіслати повідомлення" нове вікно не відкривається, а змінюється поточна сторінка. Тобто, я так розумію вона динамічна. Самої поки не додуматися як зробити таке, тому питаю поради.
Андрію, підкажіть будь ласка, форма чудово працює в хромі, а ось з експлорером проблема. Не надсилаються листи та не відображаються повідомлення про помилки або надсилання. У чому тут річ? Заздалегідь дякую
Класний урок! Дякую!
Дякую. Все чудово працює)
у коді немає тегів, що закривають /p. Чому?
Warning: mail(): "sendmail_from" немає в php.ini або custom "From:" Як бути??
не можу розібратися з кодуванням. Якщо прописувати windows-1251 - текст скрипта у повідомленні нормальний, сам текст повідомлення на пошту надходить крокозяброю. а якщо ставити utf-8 – текст скрипту у повідомленні на пошті – знаки питання, а текст повідомлення з форми – нормальний. як зробити, щоб і те й те нормальним було?
у мене не працює, але сайт ще не на хостингу, коли поміщу-буде?
Все працює, дякую за скрипт! Покажіть, будь ласка, як зробити що б при натисканні кнопки відправити не відкривалася нова сторінка з обробником. Що б сайт залишався на тій сторінці, де і був до натискання кнопки відправити?
а як зробити поле введення майл вище?
Якщо необхідно відправити листи на кілька адрес, просто через кому дописуєте потрібні адреси так: $to = "admin@сайт, [email protected], [email protected]";
А як зробити, щоб після відправлення повідомлення була переадресація на іншу сторінку?
є $to = "admin@сайт"; питання: якщо необхідна відправка на 2 адреси! одна з адрес у вигляді $to = "$email"; тобто функціонал "порадити другові" з дублюванням послання на мною задану пошту. Дякую.
У мене чомусь форма зворотного зв'язку не працює, причому ніяка не працює. Вдає, що повідомлення надіслано, але на пошту воно не надходить.
Здрастуйте! Поясніть, будь ласка, чому не працює на хостингу, пише: "Не можу надіслати листа". А на lockalhost на Денвері працює нормально. В чому проблема?...
чому у мене не одна формнеа не оре пише
Велике дякую. Дуже просто і доступно. Я використав ваш приклад на сайті gosdogovor.ru. Лише трохи підточив дизайн під себе та склад полів: http://www.gosdogovor.ru/easuzcon.html. Ще раз дякую.
Дітлахів, якщо ви намагаєтеся відправити повідомлення з вашого локального сервера, тобі з сайту ще не розміщеному в інтернеті, - у вас нічого не вийде. Розмістіть на якомусь хостингу і буде вам щастя)
Андрію, а як зробити так стоби при натисканні на кнопку відправлялося повідомлення з певним текстом на певну адресу? Допоможіть будь ласка: [email protected]
Сама форма зазвичай призначена для отримання від користувача інформації для подальшого пересилання її на сервер, де ці форми приймає програма-обробник. Така програма може бути написана будь-якою серверною мовою програмування на кшталт PHP, Perl та ін. Адреса програми вказується в атрибуті action тега
Приклад 1. Надсилання даних форми
HTML5 IE Cr Op Sa Fx
У цьому прикладі дані форми, позначені атрибутом name (login і password), будуть передані у файл за адресою /example/handler.php. Якщо атрибут action не вказувати, передача відбувається на адресу поточної сторінки.
Передача на сервер відбувається двома різними методами: GET і POST для завдання методу в тезі
Який метод використовується легко визначити за адресним рядком браузера. Якщо в ній з'явився знак питання і адреса стала схожою на цю, то це точно GET.
http://www.google.ru/search?q=%D1%81%D0%B8%D1%81%D1%8C%D0%BA%D0%B8&ie=utf-8
Унікальне поєднання параметрів адресного рядка однозначно ідентифікує сторінку, тому сторінки з адресами?q=node/add і?q=node вважаються різними. Цю особливість використовують системи управління контентом (CMS, Content management system) для створення багатьох сторінок сайту. Насправді ж використовується один файл, який отримує запит GET і відповідно до нього формує вміст документа.
Нижче наведено типові області застосування цих методів на сайтах.
GET
Передача невеликих текстових даних на сервер; Пошук по сайту.
Пошукові системи, форми пошуку по сайту завжди відправляються методом GET, це дозволяє ділитися результатами пошуку з друзями, надсилати посилання поштою або викладати його на форумі.
POST
Пересилання файлів (фотографій, архівів, програм та ін.); відправлення коментарів; додавання та редагування повідомлень на форумі, блозі.
Робота з формою за промовчанням відбувається в поточній вкладці браузера, при цьому допустимо при відправленні форми змінити цей параметр і відкривати обробник форми у новій вкладці або у кадрі. Така поведінка задається через «ім'я контексту», яке є значенням атрибуту target тега