Вывести пользовательские данные в браузере несложно, но вряд ли это можно назвать содержательной обработкой пользовательского ввода. Один из способов обработки информации заключается в ее отправке по электронной почте — например, администратору сайта. Хотя при помощи гиперссылки mailto: можно отправить сообщение прямо из браузера, следует учитывать, что внешние приложения электронной почты настроены не на каждом компьютере. Следовательно, отправка сообщений с веб-формы более надежно гарантирует, что сообщение будет доставлено адресату.
Давайте воспользуемся одной из форм, которые были созданы нами ранее. И пусть в нее пользователь вводит информацию и комментарии по поводу сайта. Затем данные форматируются соответствующим образом и передаются стандартной функции РНР mail(). Но прежде чем переходить к построению формы, необходимо предварительно рассмотреть синтаксис функции mail().
mail( получатель, тема, сообщение [, доп_заголовки])
В параметре тема, как нетрудно предположить, передается тема сообщения. Параметр сообщение содержит текст сообщения, а необязательный параметр доп_заголовки предназначен для включения дополнительной информации (например, атрибутов форматирования HTML), пересылаемой с сообщением.
Внимание! В системе UNIX функция mail() использует утилиту sendmail. В Windows эта функция работает лишь при наличии установленного почтового сервера или если функция mail() связана с работающим сервером SMTP. Эта задача решается модификацией переменной SMTP в файле php.ini.
Для проверки работы системы выполним фрагмент кода:
<?php
$email = "[email protected]";
$subject = "Создание динамичных сайтов";
$message = "Предлагаем учатие в разработке";
$headers = "From: [email protected]";
mail ($email, $subject, $message, $headers);
?>
Внимание! Если при открытии файла веб-браузер выдает ошибку: "Warning: mail() [function.mail]: SMTP server response: 550 5.7.1 Unable to relay for [email protected] in D:\sevidi\240.php on line 18", то вам необходимо установить или настроить SMTP server, который входит в состав IIS.
О том как установить и настроить Internet Information Services и SMTP server можно узнать ЗДЕСЬ.
При обширной переписке следует использовать специализированные почтовые программы вроде majordomo, в простых случаях функции РНР mail() оказывается вполне достаточно.
Поддержка на сайте возможности отправки электронной почты обеспечивает обратную связь с посетителями ваших веб-страниц.
Создадим форму для отправки электронной почты. Разместим ее в файле 324.html.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Отправка электронной почты</title>
</head>
<body bgcolor="#CCFFFF">
<form action="241.php" method="post" name="myform">
<table border="0" cellpadding="5">
<tr>
<td width="124">Ваше имя</td>
<td width="282"><label>
<input type="text" name="имя" size="30">
</label></td>
</tr>
<tr>
<td>Ваш E-mail</td>
<td><label>
<input type="text" name="email" size="30">
</label></td>
</tr>
<tr>
<td valign="top">Ваше сообщение</td>
<td><label>
<textarea name="сообщение" cols="40" rows="5"></textarea>
</label></td>
</tr>
<tr>
<td> </td>
<td><label>
<input type="submit" name="button" id="button" value="Отправить">
</label></td>
</tr>
</table>
</form>
</body>
</html>
В окне веб-браузера это будет выглядеть ТАК.
Теперь создадим скрипт для отправки электронной почты и разместим его в файле 241.php.
<?php
/*вводим фрагмент кода, формирующие параметры для почтовой функции*/
$тема="Создание динамичных сайтов";
$текст=$cообщение;
$заголовок="From: $email";
mail($email, $тема, $текст, $заголовок);
echo "Электронное сообщение отправлено";
?>
Теперь откроем файл с формой, заполним поля ввода и нажмем кнопку Отправить.
Примечание! Наша почта зарегистрирована на локольном хосте. Поэтому при отправке сообщения, в качестве E-mail, надо указывать имя домена зарегистрированного в SMTP. В нашем случае, в качестве почтового адреса, надо указать, например [email protected].
После отправки письма появится сообщение:
Чтобы проверить письмо откроем Мой компьютер >диск С > папка Inetpub>папка mailroot> папка Drop.
Откроем письмо.
Данные, полученные из формы, часто нужно сохранять на диске, чтобы в следующем сеансе посещения сайта можно было воспользоваться информацией о пользователе, например его электронным адресом. В этом примере мы рассмотрим, как в скрипте регистрации создавать файлы, читать их содержимое и записывать в файлы данные.
Чтобы начать работу с файлом РНР, надо открыть файл. Для открытия файла воспользуемся функцией fopen().
fopen(имя_файла, режим)
Параметр имя_файла указывает на имя файла, который нужно открыть для работы. Параметр режим задает способ работы с файлом. Значение параметра w обеспечит открытие файла для записи, r — только для чтения. Если для записи открывается не существующий файл, то он будет создан. В качестве результата функция fopen() возвращает указатель на файл, который содержит информацию о файле и используется как ссылка.
Для закрытия файла используется функция:
fclose(указатель_файла)
В качестве параметра данной функции используется указатель файла, возвращаемый функцией fopen().
Для дальнейшей работы нам понадобится файл с формой. Такой файл мы уже создавали. Давайте найдем его и сохраним как 325.html.
<form action="243.php" method="post" name="form">
<table width="255" border="0" cellpadding="5">
<tr>
<td width="101">Фамилия</td>
<td width="135"><input name="фамилия" type="text" size="20" maxlength="30"></td>
</tr>
<tr>
<td>Имя</td>
<td><input name="имя" type="text" size="20" maxlength="30"></td>
</tr>
<tr>
<td>Пароль</td>
<td><input name="пароль" type="password" size="20" maxlength="30"></td>
</tr>
<tr>
<td>E-mail</td>
<td><input name="адрес" type="text" size="20" maxlength="30" value=""></td>
</tr>
</table>
Посылать информацию о новостях сайта по электронной почте?
<input name="checkbox" type="checkbox" value="">
<br>
<p>Ваши предпочтения
<select name="select" >
<option value="Програмное обеспечение">Програмное обеспечение
<option value="Обучающие программы">Обучающие программы
<option value="Другое">Другое
</select></p>
<p><input name="submit" type="submit" value="Зарегистрироваться" id="submit"></p>
</form>
В окне веб-браузера это будет выглядеть ТАК.
Теперь создадим сценарий РНР для обработки данных из формы.
Для этого создадим файл 243.php.
<?php
if(($фамилия=="")|($имя=="")|($пароль=="")|($адрес=="")){
header("Location: http://localhost/325.html"); /*Отправляет необработанные HTTP-загаловки*/
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Сохранение пользовательских данных в файле</title>
</head>
<body>
<?php
echo "Уважаемый $фамилия $имя! Вы зарегистрированы. <br>";
?>
</body>
</html>
if(($фамилия=="")|($имя=="")|($пароль=="")|($адрес=="")) в этой строке выясняется, заполнены ли поля для фамилии, имени, пароля и адреса в регистрационной форме.
header("Location: http://localhost/325.html") — встроенная функция. Обеспечивает переход без каких-либо действий пользователя на заданную страницу. Функцию нельзя использовать после HTML-кода и оператора echo.
exit — обеспечивает выход из сценария.
Введем новый фрагмент кода:
$newfile=fopen("$фамилия.txt","w"); /*обеспечивает открытие и создание файла, если указанного файла не существует*/
Именем создаваемого файла будет вводимая в форме фамилия.
fclose($newfile) //задает закрытие файла
Для записи данных в файл используется функция
fwrite(указатель_файла, данные)
Используя данную функцию, в файл, связанный с указателем_файла, будут записаны данные.
Теперь запишем в созданный файл данные, полученные из формы.
Выше функции fclose($newfile) вставим новый фрагмент кода:
fwrite($newfile,$фамилия);
fwrite($newfile,"\n");
Первая строка обеспечивает запись в файл введенной фамилии. Второй элемент фрагмента кода задает переход в файле на новую строку. И так по всем элементам кода.
fwrite($newfile,$фамилия);
fwrite($newfile,"\n");
fwrite($newfile,$имя);
fwrite($newfile,"\n");
fwrite($newfile,$пароль);
fwrite($newfile,"\n");
fwrite($newfile,$адрес);
fwrite($newfile,"\n");
fwrite($newfile,$checkbox);
fwrite($newfile,"\n");
fwrite($newfile,$select);
fwrite($newfile,"\n");
fclose($newfile);
Чтобы прочитать файл есть две возможности. Первый способ заключается в использовании функции
fread(указатель_файла, число)
Данная функция позволяет считать нужное число байтов из файла, связанного с указателем_файла.
Другой способ чтения из файла связан с использованием массива. Элементы массива пронумерованы, начиная с индекса 0.
file(имя_файла)
Данная функция считывает весь файл имя_файла и возвращает массив, каждый элемент которого состоит из отдельной строки файла.
Далее вставим новый фрагмент кода:
$rfile=fopen("$фамилия.txt", "r");
$data=file("$фамилия.txt");
В первой строке фрагмента кода открывается только для чтения файл, в который мы записали данные. Во второй строке считывается открытый файл в массив data(данные).
Полный код файла:
<?php
if(($фамилия=="")|($имя=="")|($пароль=="")|($адрес=="")){
header("Location: http://localhost/325.html"); //Отправляет необработанные HTTP-загаловки
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Сохранение пользовательских данных в файле</title>
</head>
<body>
<?php
echo "Уважаемый $фамилия $имя! Вы зарегистрированы. <br>";
$newfile=fopen("$фамилия.txt","w");
fwrite($newfile,$фамилия);
fwrite($newfile,"\n");
fwrite($newfile,$имя);
fwrite($newfile,"\n");
fwrite($newfile,$пароль);
fwrite($newfile,"\n");
fwrite($newfile,$адрес);
fwrite($newfile,"\n");
fwrite($newfile,$checkbox);
fwrite($newfile,"\n");
fwrite($newfile,$select);
fwrite($newfile,"\n");
fclose($newfile);
$rfile=fopen("$фамилия.txt", "r");
$data=file("$фамилия.txt");
echo "Иформацию о новостях сайта Вам будут высылать по адресу $data[3] . <br>
Ваш пароль регистрации на сайте $data[2] ";
fclose($rfile);
?>
</body>
</html>
Откройте файл, заполните форму, нажмите кнопку Отправить и убедитесь, что в корневой папке сайта появился новый файл, например Сидоров.txt. В этом файле находятся данные регистрации.
Удобнее и эффективнее хранить данные регистрации в базе данных, однако к этой теме мы вернемся позднее.
Примечание. Для копирования фалов следует использовать функцию copy(), для переименования функцию rename(), для удаления файла функцию unlink().