Форма обратной связи (критика)

Статус
В этой теме нельзя размещать новые ответы.

lolshik

Постоялец
Регистрация
21 Фев 2008
Сообщения
316
Реакции
127
Написал небольшой скрипт формы обратной связи на php.
Чем отличается ото всех остальных?
Если пользователь ввёл неверные данные, то ему не придётся вводить их заново. Он увидит ошибку, и поправит неправильные данные, не вводя заново все остальные.

Общая логика
Код:
<?php

if (isset($_POST['submit_check'])) { //форма была отправлена

	if ($form_errors = validate_form()) { // Если $form_errors присвоился не пустой массив
	                                      // то показываем ошибки.
		show_form($form_errors);
		}

	else {
		process_form();
		}
    }

else {
	show_form();
	}

Функции

Код:
function validate_form() {


	$errors = array();
    $_POST['name'] = trim($_POST['name']);
    $_POST['email'] = trim($_POST['email']);

	if (mb_strlen($_POST['name'],'utf8') == 0) {
		$errors[] = "Вы не заполнили имя";
		}
	if (!preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i',$_POST['email'])) {
		$errors[] = 'Введите правильный e-mail.';
		}
	if (mb_strlen($_POST['message']) < 10) {
		$errors[] = 'Введите текст сообщения.';
		}


	return $errors;
	}

function show_form($errors = '') {

if (!empty($errors)) {

    echo "<br><center><div class='warning'><font size='2'color='#FF0000'><b>Обнаружены ошибки:</b></font><br>";

	 foreach ($errors as $value) {
		print $value."<br>";
	}
	echo "</div></center>";








	show_form_content();
	}
else {


print <<<HERE

<table align='center' class='table_form' width='400px'>
<form method='post' action="$_SERVER[PHP_SELF]">
<tr><td colspan='2'>Введите вопрос и данные для связи :</td></tr>
<tr><td width='200'>Ваше имя</td>
<td width='*'><input type='text' name='name' value=''></td></tr>
<tr><td>E-Mail</td><td><input type='text' name='email' value=''></td></tr>
<tr><td>Ваш вопрос или комментарий</td><td><textarea rows='5' cols='30' name='message'></textarea></td></tr>
<input name='submit_check' type='hidden' value='1'>
<td><input type='submit' name='submit' class='formbutton' value='Отправить'></td></tr></form></table>

HERE;
}
}


function show_form_content() {

print <<<HERE
<table align='center' class='table_form' width='400px'>
<form method='post' action="$_SERVER[PHP_SELF]">
<tr><td colspan='2'>Введите вопрос и данные для связи :</td></tr>
<tr><td width='200'>Ваше имя</td>
<td width='*'><input type='text' name='name' value='$_POST[name]'></td></tr>
<tr><td>E-Mail</td><td><input type='text' name='email' value='$_POST[email]'></td></tr>
<tr><td>Ваш вопрос или комментарий</td><td><textarea rows='5' cols='30' name='message'>$_POST[message]</textarea></td></tr>
<input name='submit_check' type='hidden' value='1'>
<td><input type='submit' name='submit' class='formbutton' value='Отправить'></td></tr></form></table>


HERE;


}

function process_form() {

    $name = $_POST['name'];
    $email = $_POST['email'];
    $msg = $_POST['message'];

    $name=trim($name);
    $email=trim($email);
    $msg=trim($msg);


	if (mail("$email", "С веб сайта", "$msg"));

	print "<br><table align='center' class='table_form' width='350px'>
           <tr>
           <td>Cпасибо $_POST[name]. Сообщение успешно отправлено. <br>Мы ответим Вам максимально быстро.
           </td></tr></table>";
	}

Конструктивная критика превествуется.
 
навскидку:
1. if ($form_errors == validate_form())
2. print <<<HERE .... HERE;
нет смысла 2 раза повторять форму, сохраните как переменную.
3. почитайте Для просмотра ссылки Войди или Зарегистрируйся там много интересного
 
если из критики, то добавлю к вышенаписанному, что не print, a echo.

а вообще познакомтесь с сайтом phpclasses.org, чтоб впоследующем не изобретать велосипед.
 
Мне кажется, что лучше сначала задействовать проверку яваскриптом, а потом уже на пхп. Для яваскрипта есть много готовых решений (вот, самое простое - _http://www.w3schools.com/js/js_form_validation.asp). На пхп действительно лучше классы задействовать, потому что на тему form validation уже очень многое написано и лучше едва ли получится
 
Для вывода рекомендовано использовать echo. В твоем случае лучше форму сохранить в отдельный файл и загружать из скрипта так дизайн легче править
 
Да print редко кто использует.
 
2PHP_Master
print - функция, echo - оператор.
echo - конструкция.

2Alexandre
Да print редко кто использует.
Обоснуйте. Жаль я не могу модерит в этом разделе :mad:

2lolshik
PHP:
if (mb_strlen($_POST['name'],'utf8') == 0) {
		$errors[] = "Вы не заполнили имя";
		}
Думаю, вместо вызова функции подсчета длины строки и сравнения с нулем, использовать конструкцию empty(). Все равно после "тримания" в переменной не может быть только один пробел. Заодно все же стоит проверить длину.
А можно сделать так...:ah:
PHP:
empty($_POST['name'][5]) //здесь 5 - минимальная длина
Но это врятли подайдет, надо ограничивать максимальную длину и не должен быть на пятом месте ноль, но это все мелочи :D
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху