Обработка формы PHP

Теперь нам предстоит разобраться, как увязать программирование на HTML с скриптами на РНР. На самом деле это еще проще, чем что-либо другое в РНР. Все сделано так, чтобы пользователь чувствовал себя достаточно комфортно и не испытывал проблем, в том числе и при программировании. Каким же образом можно достичь плотного взаимодействия программиста и пользователя?

Посещая сайты, каждый из Вас не раз сталкивался с различными формами и полями для ввода. Некоторые даже пытались разобраться, как все это работает, но непременно натыкались на тот факт, что данные формы нужно как-то и чем-то обработать. Но как!? И главное – чем? Ответ нам уже ясен - с помощью РНР. И именно это мы с Вами сейчас и будем делать...

Для начала давайте сделаем ручками (ими, родимыми, ими) форму для отправки писем на любой адрес, который тоже требуется ввести в форме. На этом примере и разберемся, как все работает:

<form method="POST" action="action.phtml"> <p><input type="text" name="email" size="20"> <br><input type="text" name="name" size="20"> <br><textarea rows="2" name="txt" cols="20"></textarea> <br><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); ?>

Все. И опять очень просто. Как Вы, надеюсь, поняли уже, все те имена, которые мы присвоили полям для ввода в нашей форме, перешили точно такими же в скрипт РНР, который указывается в форме как обработчик. Причем значением этих имен (переменных РНР) будет являться то, что посетитель Вашей странички введет в соответствующее поле. Адрес окажется в переменной $email, имя - в $name, а текст - в $txt. Вот и вся наука! Любое имя формы становится переменной в обработчике, написанном на РНР. Метод, которым передаются значения и имена переменных в обработчик, называется POST. Если помните, несколько выше мы познакомились с еще одним методом передачи данных скрипту – GET. Тут Вы можете видеть коренное отличие двух похожих методов. В первом случае ( GET ) – по ссылке, и во втором ( POST ) – через форму.

Запомните это как дважды два, и жизнь покажется Вам намного прекрасней!

Отправка почты – второй пример

Очень часто хочется знать, что происходит на сайте за время Вашего отсутствия. Конечно, можно периодически проверять форум, гостевую книгу, другие сервисы сайта на предмет новых сообщений, но есть способ лучше! Почему бы ни присылать самому себе сообщение на свой почтовый ящик, когда на сайте происходит то, или иное событие.

Как пример могу предложить такие варианты – регистрация в рассылке, ввод сообщения в форум, гостевую книгу и т.д., ошибка открытия файла, организация обратной связи, опрос мнения читателей о размещенной статье и т.д. и т.п. Способов применить эту возможность РНР – масса, осталось разобраться, как это работает. Как всегда – просто! Синтаксис таков:  

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 указать несколько адресов, разделенных пробелами, информация будет разослана по всем указанным адресам. Это открывает простой путь к организации собственной, ни от кого не зависящей системы почтовых рассылок.