ОТПРАВКА ЗАКАЗА

После оформления заказа и нажатия посетителем кнопки отправки формы произойдет переход на страницу, указанную в заголовке этой формы (в рассматриваемом сценарии - zakaz.php). Именно в этом файле содержится программа отправки заказа.
При передаче формы сценарию на РНР содержимое каждого элемента переданной формы (для поля ввода текста - введенный текст, для элемента <select. . .> - значение параметра value выбранного пункта <орtion>) помещается в переменную, имя которой равно значению параметра пате данного элемента (Так происходит, если в файле pkp.mi установлен в on параметр register_globals). Кроме того, все эти значения помещаются в одноименные соответствующим значениям параметров пате элементы массива $HTTP_POST_VARS (если форма передана методом POST) или $HTTP_GET_VARS (если форма передана методом GET) (Так происходит, если в файле php.ini установлен в on параметр track_vars), а в РНР версии 4.1 и выше - еще и в массивы $_POST и $_GET соответственно. Например, значение элемента <select name="TOV1"> будет доступно сценариям на странице-обработчике в переменной $TOV1 и в элементе массива $HTTP_POST_VARS [ "TOV1' ] (а в РНР версии 4.1 и старше - еще и в элементе массива $_POST [ ' T0V1' ].
Однако особенностью использования этих массивов в частности является то, что для присоединения значения любого их элемента к какой-либо строковой переменной нельзя просто поместить их внутрь текста строки - нужно использовать оператор сложения строк: точку. Скажем, написать

$zak="$zak $HTTP_POST_VARS['TOV1']";

нельзя - надо использовать формат

$zak="$zak "$HTTP_POST_VARS['TOV1'];

Отправка письма осуществляется командой mail, как вы помните, имеющей формат
тай ("Кому", "Тема", "Текст сообщения", "Дополнительныезаголовки");
При выполнении данной команды на сервере формируется электронное письмо в соответствии с указанными параметрами и отправляется с помощью установленной на web-сервере почтовой программы (Вы можете установить такую программу и на своем компьютере - используйте, например, Office Mail Server Юрия Кучуры (доступен с http://eu3eu.chat.ru) или Courier Mail Server Романа Ругаленко (доступен с http.V/courierms. narod. ru)).
В качестве параметра "Кому" может выступать набор адресов, разделенных запятыми.
"Дополнительные заголовки" могут быть любые из допустимых почтовыми протоколами, разделяться они должны комбинацией символов /п, которая в РНР означает перевод строки. Если среди "Дополнительных заголовков" не указано поле From, то оно заполняется по умолчаниюпочтовой программой, установленной на web-сервере, например, именем "Unprivileged User".
Для отправки письма с заказом необходимо приготовить его текст. Можно, конечно, просто включить в письмо значения всех переменных с именами, равными кодам товара (т. е. полученные из элементов <select...>), и в конец добавить контактные данные посетителя. Но куда как лучше, чтобы владелец web-сайта получал не набор кодов, которые он еще должен по своим данным перевести в названия, а уже готовый список заказанных посетителем товаров (рис.5.5). Для этого в текст сценария включим блок определения полного названия товара по его коду.

Рис.5.5. Письмо с заказом. Удобно читать - удобно выполнять

Итак, в любом месте файла-обработчика формы, но лучше всего в начале, следует поместить следующий сценарий:

<?php
$zak="";

(В эту переменную будем последовательно собирать названия заказанных товаров.)

if ($TOV1>0){$zak="$zak Название товара 1 -$TOV1 шт.\n"; }
if ($TOV2>0){$zak="$zak Название товара 2 -$TOV2 шт.\n"; }
...

И такие же строчки - для каждого товара. В качестве имени переменной в условной части блока if ($ . . . >0) указывается значение параметра пате соответствующего тэга <select. . .>, а в последующих фигурных скобках - название того товара, к которому этот тэг относился на странице-витрине. В результате в том случае, если посетитель изменил значение какого-либо выпадающего списка на число, отличное от нуля, то в переменную Szak, которая впоследствии станет текстом отправляемого письма, включается название товара, соответствующего этому выпадающему списку, и сведения о количестве его заказанных единиц - та величина, которая в конце концов и оказалась значением этого выпадающего списка.
Теперь завершим составление текста письма:

$zak="C адреса $email от заказчика с контактными данными $contact пришла заявка на приобретение товара: \n$zak";

и отправим письмо-заявку:

mail ("электронный адрес владельца сайта", "Заказ на товар", $zak, "From: $email\nReply-To: $email\nContent-Type: text/plain; charset=windows-12 51");?>

В результате выполнения этой команды тот, кто обрабатывает заказы, получит аккуратный список заказанных товаров и сведения о заказчике (см. рис.5.5). Причем если посетитель правильно ввел свой е-mail, то для связи с ним после получения письма достаточно нажать кнопку "Ответить" или ей подобную в почтовом клиенте - этот e-mail подставляется в заголовок письма From:.

Письмо будет отправлено через почтовую программу, находящуюся на сервере - программы на компьютере посетителя никак не будут затронуты.
Сам же файл, в котором размещен код отправки письма, может содержать, скажем, благодарность посетителю за заказ - рис.5.6 или сведения о том, куда обращаться за информацией об этапе его выполнения. HTML-код страницы просто помещается вслед за окончанием сценария на РНР и выводится в браузер после окончания работы сценария.

Рис.5.6. Заказ сделан - можно уходить и ждать...

В приведенном сценарии вместо одноименных элементов формы переменных можно использовать и соответствующие элементы массивов $HTTP_POST_VARS и (в РНР версии старше 4.1) SPOST. Например, строка добавления в текст заказа нового товара будет выглядеть как

if ($HTTP_POST_VARS['TOV1']>0){$zak="$zak Название товара 1 -
".$HTTP_POST_VARS['TOV1']." шт.\n"; }

строка генерации письма - как

$zak="C адреса ".$HTTP_POST_VARS['email']. " от заказчика с контактными данными
".$HTTP_POST_VARS['contact']." пришла заявка на приобретение товара:\n$zak";

и команда отправки письма - измененная по тому же принципу.

 
Электронные Книги по компьютерным программам
На правах рекламы:
Регистрация. | Забыли пароль?
Логин
Пароль
Запомнить меня