На продвинутого не претендую. Но как-то так:
<?php
/**
* Применяет рекурсивно ко всем элементам массива функции htmlspecialchars, stripslashes, trim.
* @param $arr array;
* @return $newArr array - обработанный массив.
*/
function array_stripslashes($arr)
{
$newArr = is_array($arr) ? array_map('array_stripslashes', $arr) : htmlspecialchars(stripslashes(trim($arr)));
return $newArr;
}
/**
* Типа массив для формы.
*/
$arFields = [
'EMAIL' => [
'name' => 'Email',
'validate' => 'email, length',
'type' => 'text',
'error' => 'Email не введен либо введен неверно'
],
'NAME' => [
'name' => 'Имя',
'validate' => 'length',
'type' => 'text',
'error' => 'Введите имя'
],
'MESSAGE' => [
'name' => 'Сообщение',
'validate' => 'length',
'type' => 'textarea',
'error' => 'Введите сообщение'
],
];
//require_once $_SERVER['DOCUMENT_ROOT'] . '/mass.php'; // хз че тут, закоментим.
if ($_POST['submit']) {
$error = [];
$_POST = array_map('array_stripslashes', $_POST); // почистим пост данные.
foreach ($arFields as $key => $value) {
if ($arFields[$key]['validate']) {
$validateArr = array_map("trim", explode(",", $arFields[$key]['validate']));
foreach ($validateArr as $validateParam) {
// валидация по списку
if ($validateParam === "email") {
(filter_var($_POST[$key], FILTER_VALIDATE_EMAIL) === false) ? $error[$key][] = "Неверный емейл" : $userEmail = $_POST[$key];// Запомним емейл юзера, если он прошел валидацию.
} elseif ($validateParam === "length") {
(strlen($_POST[$key]) > 100) ? $error[$key][] = "Превышена допустимая длина" : false ;
}
}
}
}
if (empty($error)) {
$from = 'den090393@gmail.com';
$message = "Спасибо что пользуетесь нашим продуктом.";
mail($userEmail, 'Новое сообщение', $message, "From:" . $from);
$notify = "Gисьмо отправлено на {$userEmail}<br>";
$notify .= "<a href=\"http://mysite.com/\">Перейти на главную</a>";
echo $notify;
die();
}
}
?>
<form action="" method="POST">
<div align="left">
<?php foreach ($arFields as $key => $value) : ?>
<?php if (!empty($error[$key])): ?>
<?= implode("<br>", $error[$key]) ?>
<br>
<?php endif; ?>
<label><?= $arFields[$key]['name']?></label>
<?php if ($arFields[$key]['type'] === 'textarea'): ?>
<textarea rows="10" cols="35" name="<?=$key?>"><?= $_POST[$key]?></textarea>
<?php else: ?>
<input size="40" type="<?= $arFields[$key]['type']?>" name="<?= $key?>" value ="<?= $_POST[$key]?>">
<?php endif; ?>
<br>
<?php endforeach; ?>
<input type="submit" value="Отправить" name="submit">
</div>
</form>
Касательно массива валидации.
Имхо было бы удобнее сделать так:
$arFields = [
'email' => [
'validate' => [
'required',
'email',
'length' => 100,
]
'type' => 'text',
'label' => 'Ваш емейл'
],
'name' => [
'validate' => [
'required',
'length' => 40,
],
'type' => 'text',
'label' => 'Введите имя'
],
'message' => [
'validate' => [
'required',
'length' => 1000,
],
'type' => 'textarea',
'label' => 'Введите сообщение'
],
];