Обработка формы PHP
Теперь нам предстоит разобраться, как увязать программирование на HTML со скриптами на PHP. На самом деле это ещё проще, чем что-либо другое в PHP. Всё сделано так, чтобы пользователь чувствовал себя достаточно комфортно и не испытывал проблем, в том числе и при программировании. Каким же образом можно достичь плотного взаимодействия программиста и пользователя?
Посещая сайты, каждый из вас не раз сталкивался с различными формами и полями для ввода. Некоторые даже пытались разобраться, как всё это работает, но непременно натыкались на тот факт, что данные формы нужно как-то и чем-то обработать. Но как!? И главное — чем? Ответ нам уже ясен — с помощью PHP. И именно это мы с вами сейчас и будем делать...
Для начала давайте сделаем ручками (ими, родимыми, ими) форму для отправки писем на любой адрес, который тоже требуется ввести в форме. На этом примере и разберемся, как всё работает:
<form method="POST" action="action.phtml">
<p>
<input type="text" name="email" size="20">
<input type="text" name="name" size="20">
<textarea rows="2" name="txt" cols="20"></textarea>
<input type="submit" value="Submit" name="B1">
<input type="reset" value="Reset" name="B2">
</p>
</form>
Запустив этот HTML код в браузере, вы увидите перед собой небольшую форму с тремя полями для ввода. Особенности этой формы таковы: обработка, которая начнется после нажатия кнопки отправить, будет передана файлу action.phtm. Если надо указать другой путь — воспользуйтесь стандартными методами указания пути. Имя первого поля — email, и туда посетитель будет вводить адрес, куда надо отправить письмо. Второе поле имеет имя name, и оно предназначено для ввода имени того, кто хочет отправить письмо. Следующее поле — поле ввода текста сообщения, и оно имеет имя txt. Как видите, все имена можно давать так, чтобы в последствии не запутаться в них. Наша форма почти готова. Не хватает только эстетического оформления, но это уже дело десятое, можно сделать любые надписи или применить различные стили. Тут вы можете в полной мере проявить свои творческие способности. А мы теперь перейдем к нашей основной части — обработчику формы, который, как вы помните, находится у нас в файле action.phtm.
<?php
mail($email, $name, $txt, $name);
?>
Все очень просто. Как вы, надеюсь, уже поняли, все имена, которые мы присвоили полям для ввода в нашей форме, переходят точно такими же в скрипт PHP, который указывается в форме как обработчик. Значением этих имен (переменных PHP) будет то, что посетитель вашей страницы введет в соответствующее поле. Адрес окажется в переменной $email, имя — в $name, а текст — в $txt. Вот и вся наука! Любое имя формы становится переменной в обработчике, написанном на PHP. Метод, которым передаются значения и имена переменных в обработчик, называется POST. Если помните, несколько выше мы познакомились с еще одним методом передачи данных скрипту — GET. Здесь вы можете видеть коренное отличие двух похожих методов. В первом случае (GET) — по ссылке, а во втором (POST) — через форму.
Запомните это как дважды два, и жизнь покажется вам намного прекраснее!
Отправка почты — второй пример
Очень часто хочется знать, что происходит на сайте во время вашего отсутствия. Конечно, можно периодически проверять форум, гостевую книгу, другие сервисы сайта на предмет новых сообщений, но есть и лучший способ! Почему бы не присылать себе сообщение на свой почтовый ящик, когда на сайте происходит то или иное событие.
Как пример, могу предложить такие варианты — регистрация в рассылке, ввод сообщения в форум, гостевую книгу и так далее, ошибка открытия файла, организация обратной связи, опрос мнения читателей о размещенной статье и так далее. Способов применить эту возможность PHP — множество, осталось разобраться, как это работает. Как всегда, все просто! Синтаксис следующий:
Mail($email, "Введено сообщение", $str, "From: сообщение");
Конечно, перед этим соответствующие переменные должны быть введены либо вручную, либо с помощью формы (нужно следить за соответствием имен переменных в форме и в скрипте). При выполнении данной команды интерпретатор РНР пошлет письмо с текстом из переменной $str по адресу, указанному в переменной $email. Все остальное – служебная информация, которая может быть в некоторых случаях опущена за ненадобностью.
Для примера рассмотрим систему контроля за посетителями определенных страниц сайта. Такая возможность может понадобиться для анализа посещений определенных статей, страниц и т.д. Нам потребуется информация о посетителе, которая в РНР автоматически доступна через переменные окружения. Эту информацию мы будем отсылать самому себе на почтовый ящик. Только не переусердствуйте – каждое посещение такой страницы вызовет отправку письма, и ящик может оказаться переполненным. Особенно если поток посетителей будет большим.
<?php
if (isset($HTTP_X_FORWARDED_FOR)) {
$host = gethostbyaddr($HTTP_X_FORWARDED_FOR);
} else {
$host = gethostbyaddr($REMOTE_ADDR);
}
$ip = getenv('REMOTE_ADDR');
$date = date('d M Y, H:i:s');
$host1 = gethostbyaddr("$ip");
$str = ("Дата - $date Хост - $host IP-адрес - $ip ---------------------");
mail($email, "статистика", $str, "From: информация");
?>
Если Вы разместите на одной из Ваших страниц этот код РНР, информация о посетителе (это дата входа, хост и IP-адрес) будет в Вашем почтовом ящике. Еще можно прислать себе сообщение при возникновении ошибки (например, открытия файла) на сайте:
$filename = "data.txt";
$fp = @fopen($filename, "r");
if (!$fp) {
@mail($email, "Ошибка!", "Ошибка открытия файла $filename !");
}
Как обычно, можно поставить знак @, и если возникнет ошибка при отправке почты, сообщение об этом не будет выведено на экран. А можно просто проверить, ушло письмо или нет:
if (@mail($email, "Тест", $str)) {
// что сделать, если письмо ушло
} else {
// что делать, если произошла ошибка отправки (неправильные настройки сервера, недоступен ящик, сайт и т.д.)
}
Если в переменной $email указать несколько адресов, разделенных пробелами, информация будет разослана по всем указанным адресам. Это открывает простой путь к организации собственной, ни от кого не зависящей системы почтовых рассылок.