Відправка електронної пошти
Додаткові настройки РНР для користувачів Windows
ЯКЩО ви використовуєте РНР4 під управління операційної системи Windows, зверніть увагу на наступні рядки в вашому файлі php.ini:
[Mail function]
SMTP =; for Win32 only
sendmail_from =; for Win32 only
Вам необхідно змінити дві останні рядки для того, щоб функція mail () працювала правильно. Для цього виконайте такі дії:
Створення простої форми зворотного зв'язку
Створення форми зворотного зв'язку
і натисніть клавішу Enter.
В робоче вікно браузера буде завантажена створена вами форма зворотного зв'язку (рис. 4.1).
Мал. 4.1. Робоче вікно браузера з завантаженою формою зворотного зв'язку.
Створення сценарію для обробки форми
Тепер ви створите сценарій, який буде мати справу з трьома змінними: $ sender_name, $ sender_email і $ message.
У зв'язку з тим, що параметр ACTION у створеній формі simple_form.html має значення send_simpleform.php. ви повинні дати це ж ім'я своїм сценарієм. Мета сценарію - отримати текст в змінних $ sender_name. $ Sender_email і $ message. сформувати і відправити поштове повідомлення, і відобразити підтвердження в Web-браузері.
Наступні кілька кроків будуть продовжувати формування рядка повідомлення, об'єднуючи маленькі рядки в одну довгу рядок повідомлення. Для об'єднання рядків використовується оператор (. =).
Останній рядок містить два ознаки нового рядка (\ n \ n), щоб додати порожній рядок в кінці.
Набраний вами текст сценарію повинен виглядати так, як він показаний в лістингу наведеному на мал. 4.2.
Мал. 4.2. Лістинг сценарію.
Збережіть сценарій з ім'ям send_simpleform.php.
Створення повідомлення для браузера
Хоча створений сценарій РНР буде відправляти повідомлення електронної пошти, необхідно згенерувати повернути якусь повідомлення користувачу на екран, щоб він знав, що його повідомлення, яке він відправив з форми, було прийнято. Інакше він буде продовжувати натискати кнопку Послати форму. не підозрюючи, що повідомлення вже надіслано.
Продовжимо введення тексту в створений в попередньому кроці файл.
Мал. 4.3. РНР-сценарій для формування і надсилання листів і створення повідомлення для браузера.
Заповнення створеної форми і отримання результату
Ви створили форму і пов'язаний з нею сценарій, тепер перевірте все це в роботі.
і натисніть клавішу Enter. В робоче вікно браузера буде завантажена створена вами раніше форма зворотного зв'язку (мал. 4.1).
Мал. 4.4. Підтвердження відправлення повідомлення.
Вирівнювання тeкcтa в поштовому повідомленні
Як видно з рис.4.5, текст в рядках повідомлення не вирівняний, і це псує зовнішній вигляд листа. Щоб виправити це і зробити текст повідомлення більш акуратним, виконайте наступні дії:
Збережіть зроблені зміни. Фрагмент зміненої частини файлу send_simpleform.php приведений в лістингу на рис. 4.5.
Мал. 4.5. Фрагмент зміненої частини файлу send_simpleform.php
і натисніть клавішу Enter. в робоче вікно браузера буде завантажена створена вами раніше і вже знайома форма зворотного зв'язку (мал. 4.6).
Мал. 4.6. Формa зворотного зв'язку.
Мал. 4.7. Підтвердження відправлення повідомлення.
Запустіть вашу поштову програму і перевірте свою поштову скриньку. Ви знайдете в ньому очікує вас повідомлення (рис. 4.8).
Мал. 4.8. Лист з вирівняним текстом повідомлення.
Тепер текст повідомлення став більш акуратним.
Для того щоб поліпшити сценарій send_simpleform.php. перевіримо, чи мають будь-які значення змінних $ sender_name. $ Sender_email і $ message. перед тим як виконати відправку листа. Для цього виконайте такі дії:
Далі ви створите сценарій, в якому будеnт генеруватися повідомлення про помилку, якщо поле введення в формі не заповнене. Крім цього, ви об'єднаєте двоступеневий процес відправки повідомлення в одному сценарії.
Форма зворотнього зв'язку з повідомленнями про помилки.
Отже, Ви створили два окремих файлу. Один з них містить форму, а інший - пов'язаний з нею сценарій. Тепер Ви дізнаєтеся як, використовуючи змінну $ PHP_SELF для обробки форми, створити один єдиний файл, який об'єднує в собі і форму і сценарій. Ви також дізнаєтеся, як створювати повідомлення про помилку, коли хоча б одне з полів введення форми не заповнено.
Створення початкового сценарію
Оскільки необхідно помістити довгий рядок в змінну, велика ймовірність того, що в рядку зустрінеться одна або кілька лапок. Не забувайте маскувати всі внутрішні знаки лапок за допомогою символу зворотної косої риски (\).
Мал. 4.9. Лістинг файлу allinone_form.php.
Якщо ви спробуєте завантажити файл allinone_form.php в ваш Web-браузер, то нічого не побачите, крім заголовка вікна Форма повідомлення все-в-одному. У вас може виникнути питання: "Навіщо були потрібні всі введені HTML-рядки, присвоєні змінної $ form_block?" Далі Ви додасте до створеного сценарієм команди, які відображають деякі фрагменти коду в залежності від певних дій. Рядок в змінній $ form_block є одним з таких фрагментів.
Додавання npoвepкu помилок в сценарій.
Ми плануємо використовувати глобальну змінну $ PHP_SELF. яка має значення імені поточного сценарію. У нашому випадку змінна $ PHP_SELF матиме значення allinone_form.php. Коли ви використовуєте змінну $ PHP_SELF як дії (ACTION). ви як би говорите: "Коли буде натиснута кнопка пересилання форми, потрібно перезавантажити цей сценарій і зробити деякі дії" замість того, щоб сказати: "Коли буде натиснута кнопка пересилання форми, потрібно знайти інший сценарій і зробити деякі дії".
Поки є тільки оболонка сценарію, тому слід подумати про те, які дії повинен виконувати цей сценарій:
Уточнивши завдання, що стоять перед сценарієм, можна продовжити його створення.
Цей рядок задає приховану змінну з ім'ям $ ор. якої присвоюється значення ds. Позначення змінної op - скорочення від operator (оператор), а значення ds - do something (зробити щось). Такі імена обрані просто тому, що вони не зарезервовані для жодних дій в різних мовах програмування. Ви можете назвати їх так, як вам захочеться, аби ви розуміли їх призначення, про яке буде розказано далі.
Змінна $ ор буде визначена тільки в тому випадку, якщо форма була передана для обробки, тобто була натиснута кнопка Послати форму. Таким чином, якщо значення змінної $ ор не визначене, тобто не дорівнює "ds". то це означає, що ще не бачив форму. А якщо користувач не бачив форму, то ми повинні її показати.
Фрагмент лістингу зміненої вами частини файлу allinone_form.php повинен виглядати як показано на рис. 4.10
Мал. 4.10. Фрагмент лістингу зміненої частини файлу allinone_form.php
У наступних нижче кроки ви справите додатково деякі зміни в створеному сценарії, щоб додати повідомлення про помилки при неправильному заповненні форми користувачем. Якщо форма була передана, то змінна $ ор матиме значення "ds". і ми виконаємо дії вже для цього умови. Ми припускаємо, що всі поля форми обов'язково повинні бути заповнені, тому після перевірки значення змінної $ ор потрібно перевірити, чи є значення у всіх полях.
Пересилання форми і отримання результатів
Ви об'єднали форму і сценарій її обробки в одному файлі allinone_form.php. Пора перевірити їх працездатність.
і натисніть клавішу Enter. В робоче вікно браузера буде завантажена створена вами форма (мал. 4.12).
Мал. 4.12. Робоче вікно браузера з формою все-в-одному.
У верхній частині форми будуть виведені три повідомлення про помилки (рис. 4.13).
Мал. 4.13. Робоче вікно браузера з трьома повідомленнями про помилки.
Мал. 4.14. Робоче вікно браузера з двома повідомленнями про помилки.
У верхній частині вікна браузера буде виведено одне повідомлення про одну помилку (рис. 4.15).
Мал. 4.15. Робоче вікно браузера з одним повідомленням про помилку.
У робочому вікні браузера з'явиться повідомлення про успішну відправку поштового повідомлення (рис. 4.16).
Мал. 4.16. Повідомлення про успішну відправку повідомлення.
Мал. 4.17. Лист, відправлений за допомогою сценарію allinone_form.php.
Збереження значень в полях форми при oшібкax
При роботі сценарію allinone_form.php ви могли помітити, що якщо була допущена помилка, то значення, введені в поля форми, не зберігаються. Це дуже просто виправити у фрагменті коду, що задає змінну $ form_block. Треба просто додати параметр VALUE в рядки, що задають поля введення, щоб зберігати в цьому параметрі попереднє значення даного поля.
Пpu визначенні текстової області TEXTAREA не потрібно параметр VALUE. Досить вставити значення між початковим і кінцевим тегом, що визначає область.
В робоче вікно браузера буде завантажена форма з модернізованого вами файлу allinone_form.php (рис. 4.18).
Мал. 4.18. Робоче вікно браузера з формою все-в-одному.
Мал. 4.19. Форма з повідомленнями про помилки і з збереженими даними в поле введення Ваше ім'я.
Ви бачите, що на цей раз значення в поле введення Ваше ім'я: збереглося!
Сценарій все-в-одному - це дуже здорово!