Чтобы организовать передачу данных на сервер с помощью формы, потребуется реализовать HTML форму, в которую посетители сайта будут вводить свою информацию и PHP код, назначение которого в принятии и обработке полученных данных на сервере.
Форма на странице формируется тегами
, внутри которых помещаются теги полей для ввода текстовой информации, теги специальных компонентов (например, поле со списком), теги для поля выбора и загрузки файла .* Для HTML5 так же существует возможность размещать теги полей формы не внутри тегов формы, а в любом месте на странице. При этом для каждого такого поля нужно указывать атрибут "form", чтобы определить с какой формой отправки он должен взаимодействовать.
Итак, простейшая форма отправки может содержать следующий код:
Элементы формы и их параметры:
action="myform.php" – атрибут "action" определяет, какой php-файл будет обрабатывать отправляемые данные. В этом примере, данные будут отправлены в файл "myform.php", находящийся в той же директории что и страница с формой. Если этот атрибут не указать явно, данные формы будут отправлены по адресу страницы самой формы.
method="post" – параметр method определяет метод передачи данных POST или GET. Более подробно об этом в статье "Отличия методов POST или GET" . Если не указывать атрибут явно, по умолчанию будет использоваться метод GET.
Текст "Значение А:" и "Значение Б:" добавлен только с целью оформления и понятности формы для пользователя. Добавлять это для передачи данных не обязательно, но для того, чтобы пользователю стало понятно, что вводить, стоит указывать.
Теги используются для формирования различных управляющих элементов формы.
type="text" – атрибут "type" определяет вид поля. В зависимости от того, какой тип указан, меняется и внешний вид элемента, и его назначение. Значение атрибута "text" указывает, что в браузере элемент будет отображаться однострочным текстовым полем, куда пользователь сможет ввести свою строку.
name="data1" – атрибут "name", указывает имя, вернее индекс данных в массиве, полученных сервером. Это обязательный параметр, по которому в php-обработчике можно будет затем получить доступ переданному значению. Имя может быть выбрано произвольно, однако, удобнее когда это значение имеет какой-то понятный смысл.
type="submit" – тег с таким значением параметра "type" будет отображаться на странице как кнопка. На самом деле на форме можно обойтись и без кнопки. Если, например, в форме есть текстовые поля, то отправку можно осуществить, просто нажав "Ввод" на клавиатуре. Но наличие кнопки делает форму более понятной.
value="Отправить" – в данном случае (для type="submit") определяет только надпись на кнопке. Для type="text", например, это будет текст, который будет выведен в текстовом поле.
В итоге, на странице этот код будет выглядеть приблизительно так:
По нажатию на кнопку, будет выполнена отправка данных на указанную страницу, и если она существует и корректно работает, данные будут обработаны.
Отправленные описанным способом данные, помещаются в суперглобальные массивы $_POST, $_GET и $_REQUEST. $_POST или $_GET будут содержать данные в зависимости от того, каким методом осуществлялась отправка. $_REQUEST содержит отправленные данные любым из указанных методов.
$_POST, $_GET и $_REQUEST – это ассоциативные массивы, поля-индексы которых совпадают с атрибутами "name" тегов . Соответственно, для работы с данными в файле myform.php можно присвоить переменным значения элементов такого массива указав в качестве индекса имя поля:
// для метода GET
$a = $_GET["data1"
];
$b = $_GET["data2"
];
// для метода POST
$a = $_POST["data1"
];
$b = $_POST["data2"
];
// при любом методе
$a = $_REQUEST["data1"
];
$b = $_REQUEST["data2"
];
Иногда при получении данных нужно проверить, не отправил ли пользователь пустую форму. Для этого можно использовать функцию empty .
if
(empty
($_REQUEST["data1"
])) {
echo
"Поле не заполнено"
;
} else
{
echo
"Поле было заполнено"
;
$a = $_REQUEST["data1"
];
}
Обычно этого решения достаточно. Если нужно вводить текст, то будет понятно, введен он или нет. Однако, если пользователь намеренно для вычислений введет ноль, то функция empty покажет, что значения нет. Поэтому для таких ситуаций лучше использовать функцию isset . Она будет явно проверять, заданно ли значение или нет.
if
(isset
($_REQUEST["data1"
])) {
echo
"Поле было заполнено"
;
$a = $_REQUEST["data1"
];
} else
{
echo
"Поле не заполнено"
;
}
ПИСЬМО-ПРОСЬБА
Письмо-просьба - это, пожалуй, наиболее распространенная форма деловой переписки. Количество ситуаций, вызывающих необходимость обращения с просьбой от имени юридического либо физического лица, не поддается учету. Это получение информации, образцов продукции, согласование действий, побуждение к какому-либо действию и пр.
Композиция и структура письма-просьбы мало чем отличается от стандартных (см. Деловые письма. Правила оформления. Структура письма). Как правило, текст письма-просьбы состоит из двух частей:
1. Вводная часть , где в повествовательной форме излагается существо дела, объясняются побудительные мотивы, причины обращения с просьбой. Здесь часто используются следующие стандартные выражения:
Все перечисленные выражения необходимо использовать с учетом контекста и речевой ситуации.
Почти все стандартные выражения начинаются с производного предлога или с предложного сочетания. Следует обратить внимание на правильность использования этих предлогов с именами существительными, cтоящими в основном в родительном и дательном падежах.
2. Собственно просьба . Здесь в ключевую фразу письма входят слова, образованные от глагола просить . Его использование объясняется этикетными требованиями к деловым текстам и психологическими законами делового общения - человек охотнее соглашается выполнить действие, выраженное в форме просьбы, нежели в форме требования.
В ряде случаев сама просьба, высказанная описательно, может и не содержать этого глагола, например: Мы надеемся, что Вы сочтете возможным рассмотреть наше предложение в указанный срок .
Просьба может излагаться от первого лица единственного числа ("Прошу... "), от первого лица множественного числа ("Просим... "), от третьего лица единственного числа (в этом случае употребляются существительные с собирательным значением: "Дирекция просит... ", "Администрация просит... ", "Совет трудового коллектива просит... " и т. п.), от третьего лица множественного числа, если употребляется несколько существительных с собирательным значением (Администрация и Совет трудового коллектива просят... ).
Если письмо-просьба является многоаспектным , то композиция второй части такого письма может выглядеть следующим образом (части композиции должны соответствовать абзацному членению текста):
Прошу...
(Просим...
)
...
Одновременно прошу...
(Также
просим...
)
...
А также прошу...
(А
также просим...
)
...
и т. д.
При составлении письма-просьбы следует учесть и такие рекомендации :
1. Излагая просьбу, подчеркните вашу заинтересованность
или заинтересованность вашей организации в ее исполнении.
2.
Ни при каких условиях не начинайте письмо со слова "Прошу...
"
- тактичнее сначала объяснить мотивы вашего обращения (даже в том случае,
когда все детали уже согласованы с адресатом).
3. Не спешите благодарить
адресата заранее
. Этим вы ставите и себя, и адресата в неловкое положение.
Старайтесь поблагодарить, когда узнаете, что ваша просьба удовлетворена.
При формулировке просьбы часто используют следующие стандартные выражения:
Одной из самых востребованных функций на сайте является форма заявки или заказа, данные из которой отправляются на почту владельцу сайта. Как правило такие формы являются простыми и состоят из двух трех полей для ввода данных. Как же создать такую форму заказа? Здесь потребуется использование языка разметки HTML и языка программирования PHP.
Язык разметки HTML сам по себе несложен, нужно всего лишь разобраться в том как и где ставить те или иные теги. С языком программирования PHP все немного сложнее.
Для программиста создать такую форму не составит труда, а вот HTML верстальщику может показаться сложным некоторые действия.
Первая строка будет следующей
Теперь соберем все вместе.
Теперь сделаем так, чтобы поля в форме стали обязательными для заполнения. Имеем следующий код:
Это будет файл с именем send.php
В файле на первом этапе нужно принять данные из пост массива. Для этого создаем две переменные:
$fio = $_POST["fio"];
$email = $_POST["email"];
Перед названиями переменных в php ставиться знак $, в конце каждой строки ставиться точка с запятой. $_POST это массив в который передаются данный из формы. В форме html при этом указан метод отправки method="post". Так, приняты две переменные из формы html. Для целей защиты своего сайта нужно провести эти переменные через несколько фильтров - функций php.
Первая функция преобразует все символы, которые пользователь попытается добавить в форму:
При этом новые переменные в php не создаются, а используются уже имеющиеся. Что сделает фильтр, он преобразует символ "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
Вторая функция декодирует url, если пользователь попытается его добавить в форму.
$fio = urldecode($fio);
$email = urldecode($email);
Третей функцией мы удалим пробелы с начала и конца строки, если таковые имеются:
$fio = trim($fio);
$email = trim($email);
Существуют и другие функции, позволяющие отфильтровать переменные php. Их использование зависит от того, насколько вы опасаетесь того, что злоумышленник попытается добавить программный код в данную форму отправки данных на почту html.
Проверка данных, передаваемых от HTML формы в файл PHP
Для того, чотбы проверить, работает ли этот код, передаются ли данные можно просто их вывести на экран при помощи функции echo:
echo $fio;
echo "
";
echo $fio;
Вторая строка здесь нужна для того, чтобы разделить вывод переменных php на разные строки.
Для отправки данных на почту нужно воспользоваться функцией mail в PHP.
mail("на какой адрес отправить", "тема письма", "Сообщение (тело письма)","From: с какого email отправляется письмо \r\n");
Например, нужно отправить данные на email владельца сайта или менеджера [email protected].
Тема письма должна быть понятной, а сообщение письма должно содержать то, что указал пользователь в HTML форме.
mail("[email protected]", "Заявка с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n");
Необходимо добавить условие, которе проверит отправилась ли форма при помощи PHP на указанные адрес электронной почты.
if (mail("[email protected]", "Заказ с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n"))
{
echo "сообщение успешно отправлено";
} else {
}
Таким образом программный код файла send.php, который отправит данные HTML формы на почту будет выглядеть следующим образом:
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
//echo $fio;
//echo "
";
//echo $email;
if (mail("[email protected]", "Заявка с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n"))
{ echo "сообщение успешно отправлено";
} else {
echo "при отправке сообщения возникли ошибки";
}?>
Три строки для проверки, передаются ли данные в файл закомментированы. При необходимости их можно удалить, так как они нужны были только для отладки.
В комментариях к этой статье многие задают вопрос о том, как сделать, чтобы и HTML форма и PHP код отправки данных на почту находились в одном файле, а не двух.
Для реализации такой работы нужно поместить HTML код формы в файл send.php и добавить условие, которое будет проверять наличие переменных в массиве POST (этот массив передается из формы). То есть, если переменные в массиве не существуют, то нужно показать пользователю форму. Иначе нужно принять данные из массива и отправить их адресату.
Давайте посмотрим как изменить PHP код в файле send.php:
Существование переменной в POST массиве мы проверяем PHP функцией isset(). Восклицательный знак перед этой функцией в условии означает отрицание. То есть, если переменной не существует, то нужно показать нашу форму. Если бы я не поставил восклицательный знак, то условие дословно означало бы - "если существует, то показать форму". А это неправильно в нашем случае. Естественно, что вы можете переименовать его в index.php. Если будуту переименовывать файл, то не забудьте переименовать название файла и в строке