Обработка формы с помощью php на одной странице.

Количество просмотров: 3221

Создадим простую html форму, обработаем данные с нее с помощью php и отправим на почту.

Для начала сделаем простую форму. Ее код приведен ниже.


<form method="post" action="<?= $_SERVER['REQUEST_URI'];?>">
<label>Имя<br> <input type="text" name="name" required></label><br>
<label>Телефон<br> <input type="text" name="phone" required></label><br>
<label>Ваше сообщение<br><textarea name="message"></textarea></label><br>
<input type="submit" value="Отправить!" />
</form>

Как вы могли заметить у формы указан атрибут method="post" используем его для того, чтобы данные из формы не были видны в строке браузера. В целом метод post более удобен чем метод get используемый по умолчанию. Так же у тега form указан атрибут action="<?= $_SERVER['REQUEST_URI'];?> говорящий о том, что обработка данных с формы будет проводиться на этой же странице, вместо $_SERVER['REQUEST_URI'] вы можете указать точный адрес вашей страницы, например test.php

У тегов input указан атрибут required - делающий поле обязательный для заполнения, этот атрибут отлично подходит для нашей простой формы и никакие дополнительные методы валидации в нашем примере использованы не будут, однако, если вам интересно узнать поподробнее, то вы можете ознакомиться со способами html валидации в нашей статье.

Форма готова, теперь приступим к написанию простого обработчика данных. Ниже приведен php код для данной формы с комментариями.


<?php
//для начала опишем функцию очистки данных от лишних пробелов и тегов
function clstr($data){
 return trim(strip_tags($data));
}
//если метод обращения совпадает, то обрабатываем данные из массива $_POST
if($_SERVER['REQUEST_METHOD']=='POST'){
	$name = clstr($_POST['name']);
	$phone = clstr($_POST['phone']);
	$msg = clstr($_POST['message']);
		//проверим наши переменные на пустоту
		if(!empty($name)&&!empty($phone)&&!empty($msg)){
			$to='poluchatel@mail.ru';
			$sub='Письмо с сайта';
			$text='Имя - '.$name.' Телефон - '.' Сообщение: '.$msg;
			//в переменную положим результат от функции mail false или true
			$status=mail($to, $sub, $text); 
			//положим результат в куки с временем хранения 10 сек
			setcookie('status_mail', $status, time()+10);
		}
		//обновим страницу
header('Location:'.$_SERVER['REQUEST_URI']); 
}
?>

Обработчик формы готов, алгоритм таков - данные из формы отправляются через метод post следовательно мы читаем их из суперглобального массива $_POST в переменные с очисткой данных, если переменные не пустые, то пробуем отправить письмо через функцию mail(); результат выполнения функции мы записываем в куки и обновляем страницу. В итоге исходный код страницы будет примерно следующим.


<?php
//для начала опишем функцию очистки данных от лишних пробелов и тегов
function clstr($data){
 return trim(strip_tags($data));
}
//если метод обращения совпадает, то обрабатываем данные из массива $_POST
if($_SERVER['REQUEST_METHOD']=='POST'){
	$name = clstr($_POST['name']);
	$phone = clstr($_POST['phone']);
	$msg = clstr($_POST['message']);
		//проверим наши переменные на пустоту
		if(!empty($name)&&!empty($phone)&&!empty($msg)){
			$to='poluchatel@mail.ru';
			$sub='Письмо с сайта';
			$text='Имя - '.$name.' Телефон - '.' Сообщение: '.$msg;
			//в переменную положим результат от функции mail false или true
			$status=mail($to, $sub, $text); 
			//положим результат в куки с временем хранения 10 сек
			setcookie('status_mail', $status, time()+10);
			header('Location:'.$_SERVER['REQUEST_URI']); 
		}
}
if($_COOKIE['status_mail']==true){
echo "Сообщение отправлено";
}
?>
<form method="post" action="<?= $_SERVER['REQUEST_URI'];?>">
<label>Имя<br> <input type="text" name="name" required></label><br>
<label>Телефон<br> <input type="text" name="phone" required></label><br>
<label>Ваше сообщение<br><textarea name="message"></textarea></label><br>
<input type="submit" value="Отправить!" />
</form>

Попробуйте скопируйте выше приведенный код в файл test.php и запустите на сервере. Сообственно это и есть самая простая обработка данных из форм. Конечно можно в несколько раз ужесточить данную проверку, но это уже тема для отдельной статьи. Спасибо за внимание, ждем ваших комментариев.


comments powered by HyperComments

© 2015-2018 Goodweb.me --- Карта сайта --- info@goodweb.me

Наверх