Проверка введенных данных на PHP, отправка заполненной формы на почту
В нашем примере у нас 5 полей, которые необходимо заполнить:
- имя
- сообщение
- контактный телефон
- контрольное число для защиты
Помимо простой проверки на пустоту поля, мы покажем как проверить правильно ли введен e-mail и телефон
Проверять поля мы будем с помощью PHP. В последнее поле необходимо ввести определенное число (для защиты от автоматического заполнения).
Уведомление об ошибке в заполнении формы появится после перезагрузки страницы.
Делаем, создаем файл index.php и пишем туда следующую форму:
<form action=index.php method=post>
Ваше Имя:<p>
<input type=text name=uname value="<?=@$uname?>" class=vvod>
<p>
<span class=error><?=@$e1?></span>
<p>
Текст Сообщения:<p>
<textarea name=utext rows=10 class=vvod_textarea><?=@$utext?></textarea>
<p>
<span class=error><?=@$e2?></span>
<p>
Ваш E-Mail:<p>
<input type=text name=umail value="<?=@$umail?>" class=vvod>
<p>
<span class=error><?=@$e3;?></span>
<p>
Контактный телефон (например XXX-XX-XX):<p>
<input type=text name=uphone value="<?=@$uphone?>" class=vvod>
<p>
<span class=error><?=@$e4?></span>
<p>
Выбор:<p>
<select name=select class=vvod>
<option value=1 <?@$select==1 ? print"selected":false?>>1</option>
<option value=2 <?@$select==2 ? print"selected":false?>>2</option>
<option value=3 <?@$select==3 ? print"selected":false?>>3</option>
</select>
<p><p>
Checkbox:<p>
<input type=checkbox value=1 name=box1 <?@$box1==1 ? print"checked":false?>>1<p>
<input type=checkbox value=2 name=box2 <?@$box2==2 ? print"checked":false?>>2<p>
<input type=checkbox value=3 name=box3 <?@$box3==3 ? print"checked":false?>>3<p>
<p>
Radio:<p>
<input type=radio name=radio value=1 <?@$radio==1 ? print"checked":false?>>1<p>
<input type=radio name=radio value=2 <?@$radio==2 ? print"checked":false?>>2<p>
<input type=radio name=radio value=3 <?if(@$radio==3)
{print"checked";}if(empty($_POST[radio])){print"checked";}?>>3<p>
<p>
Введите результат 24*2=?:<p>
<input type=text name=umath value="<?=@$umath?>" class=vvod>
<p>
<span class=error><?=@$e5?></span>
<input type=hidden name=go value=5><p>
<button type=submit>Отправить</button>
</form>
Вы заметили, что в значение полей (value=) мы вставили код php.
Что дает данный код?
Представьте, что пользователь заполнял форму с кучей полей и одно случайно пропустил, и вот страница перезагрузилась, он видит сообщения об ошибке и, о Боже!, все поля которые он заполнял пустые.
Вот данный код как раз и спасает ситуацию, поля которые были заполнены останутся заполненными.
Форма готова. Пишем скрипт проверки. Разместим его перед формой
<?if(isset($_POST["go"])):
$e1=null;
$uname=trim($_POST["uname"]);
$uname=strip_tags($uname);//вырезаем теги
//конвертируем специальные символы в мнемоники HTML
$uname=htmlspecialchars($uname,ENT_QUOTES);
//на некоторых серверах автоматически добавляются обратные слеши к кавычкам, вырезаем их
$uname=stripslashes($uname);
if(strlen($uname)=="0"):
$e1.="Заполните поле 'Ваше имя'<p>";
endif;
$e2=null;
$utext=trim($_POST["utext"]);
$utext=strip_tags($utext);
$utext=htmlspecialchars($utext,ENT_QUOTES);
$utext=stripslashes($utext);
if(strlen($utext)=="0"):
$e2.="Заполните поле 'Текст Сообщения'<p>";
endif;
$e3=null;
$umail=trim($_POST["umail"]);
$umail=strip_tags($umail);
$umail=htmlspecialchars($umail,ENT_QUOTES);
$umail=stripslashes($umail);
if(!filter_var($umail,FILTER_VALIDATE_EMAIL)):
$e3.="Неверное значение<p>";
endif;
$e4=null;
$uphone=trim($_POST["uphone"]);
$uphone=strip_tags($uphone);
$uphone=htmlspecialchars($uphone,ENT_QUOTES);
$uphone=stripslashes($uphone);
if(strlen($uphone)=="0"):
$e4.="Заполните поле 'Контактный телефон'<p>";
elseif((strlen($uphone)>0)&&(!preg_match("/^[0-9-]+$/",$uphone))):
$e4.="Неверный формат<p>";
endif;
//получаем данные из select
$select=trim($_POST[select]);
$select=strip_tags($select);
$select=htmlspecialchars($select,ENT_QUOTES);
$select=stripslashes($select);
if(!empty($_POST["box1"])){$box1=trim($_POST["box1"]);}
if(!empty($_POST["box2"])){$box2=trim($_POST["box2"]);}
if(!empty($_POST["box3"])){$box3=trim($_POST["box3"]);}
if(!empty($_POST[radio])){$radio=trim($_POST[radio]);}
$e5=null;
$umath=trim($_POST["umath"]);
$umath=strip_tags($umath);
$umath=htmlspecialchars($umath,ENT_QUOTES);
$umath=stripslashes($umath);
if($umath!="48"):
$e5.="Неверный результат<p>";
endif;
$eEn=$e1.$e2.$e3.$e4.$e5;
if($eEn==null):
$dt=date("d.m.Y, H:i:s");//дата и время
$mail="my@email.ru";//e-mail куда уйдет письмо
$title="Форма проверки введенных данных";//заголовок (тема) письма
//конвертируем
$title=iconv("utf-8","windows-1251",$title);
$title=convert_cyr_string($title,"w","k");
$utext=str_replace("\r\n","<p>",$utext);//обрабатываем
$mess="Имя: $uname<p>";
$mess.="Сообщение: $utext<p>";
//ссылка на e-mail
$mess.="E-Mail: <a href='mailto:$umail'>$umail</a><p>";
$mess.="Телефон: $uphone<p>";
$mess.="Дата и Время: $dt</body></html>";
//конвертируем
$mess=iconv("utf-8","windows-1251",$mess);
$mess=convert_cyr_string($mess,"w","k");
$headers="MIME-Version:1.0\r\n";
$headers.="Content-Type:text/html;charset=koi8-r\r\n";
$headers.="From: $umail\r\n";//откуда письмо
mail($mail,$title,$mess,$headers);//отправляем
//выводим уведомление об успехе операции и перезагружаем страничку
print"<script>
<!--
alert('Ваше сообщение отправлено! Спасибо!');
function reload(){location='index.php'};
setTimeout('reload()',0);
-->
</script>";
endif;
endif;
?>
Ошибки заполнения $e1-$e5 можно разместить в удобном для Вас месте на странице.