<?php
// Включение ошибок
ini_set( "display_errors", 1 );
// Массив полей с параметрами где есть тип поля, массив ошибок, обязательность поля, имя на русском, значение
$allFields = [
'name' => ['type' => 'text', 'errors' => [], 'require' => true, 'value' => '', 'rusName' => 'Имя', 'checkLen' => true, 'class' => []],
'surname' => ['type' => 'text', 'errors' => [], 'require' => true, 'value' => '', 'rusName' => 'Фамилия', 'checkLen' => true, 'class' => []],
'age' => ['type' => 'text', 'errors' => [], 'require' => false, 'value' => '', 'rusName' => 'Возраст', 'checkLen' => false, 'class' => []],
'check1' => ['type' => 'checkbox', 'errors' => [], 'require' => false, 'value' => '', 'rusName' => 'Чек', 'checkLen' => false, 'class' => []],
'file[]' => ['type' => 'file', 'errors' => [], 'require' => false, 'value' => '', 'rusName' => 'Файлы', 'checkLen' => false, 'class' => []]
];
//функция проверки полей на пустоту
function checkAllField(&$allFields)
{
foreach ($allFields as $key => $value)
{
// сразу присваеваем значение полю если есть такое поле в посте и оно не пустое
$allFields[$key]['value'] = (isset( $_POST[$key] )) ? $_POST[$key] : "";
//проверяем на пустоту и длину поля, при этом т.к. не все поля обязательные добавляем проверку на обязательность
if ( (!isset( $allFields[$key]['value'] ) || empty( $allFields[$key]['value'] )) && $allFields[$key]['require'] == true ) {
//если возникает ошибка то запихиваем ее в массив ошибок
$allFields[$key]['errors'][] = "Пустое поле " . $allFields[$key]['rusName'];
} elseif ( strlen( $allFields[$key]['value'] ) < 2 && $allFields[$key]['checkLen'] == true ) {
$allFields[$key]['errors'][] = "Короткое поле " . $allFields[$key]['rusName'];
}
}
}
//Функция проверки файлов
function checkFiles() {
$errors = array(
"1" => "Размер принятого файла превысил максимально допустимый размер.",
"2" => "Размер загружаемого файла превысил значение.",
"3" => "Загружаемый файл был получен только частично.",
"4" => "Не выбран файл для загрузки.",
"6" => "Отсутствует временная папка.",
"7" => "Не удалось записать файл на диск.",
"8" => "Программа остановилы загрузку файла."
);
if ( $_FILES['upload']['error'] == 0 ) {
for ($i = 0; $i < count($_FILES['file']['name']); $i++) {
if ( $_FILES['file']['size'][$i] < 2097152 ) {
$path_info = pathinfo($_FILES['file']['name'][$i]);
$allows = array('txt','rtf','pdf','doc','docx');
$path_info_name = $path_info['basename'];
if ( in_array($path_info['extension'], $allows) ) {
$hashname = md5(time().rand());
move_uploaded_file(
$_FILES['file']['tmp_name'][$i],
$_SERVER['DOCUMENT_ROOT']."/".$hashname.".".$path_info['extension']
);
?>
<p style="color: green;">
<?php echo "Загружен файл '$path_info_name': "; ?>
</p>
<?php
} else {
?>
<p style="color: red;">
<?php echo "Загружаемый файл '$path_info_name' - не текстовый!!!"; ?>
</p>
<?php
}
} else {
?>
<p style="color: red;">
<?php echo "<br>Превышен лимит загружаемого '$path_info_name' файла!!!"; ?>
</p>
<?php
}
}
} else {
?>
<p style="color: red;">
<?php echo $errors[$_FILES['upload']['error']]; ?>
</p>
<?php
}
}
//Функция добавления классов полей
function addClass($className, &$fieldName) {
$fieldName['class'][] = "$className";
}
//проверяем был ли передан пост и нужно ли вообще запускать валидацию
if ( count( $_POST ) > 0 ) {
//запускаем валидацию
checkAllField( $allFields );
if ( count( $_FILES ) > 0) {
checkFiles();
}
}
?>
<!-- блок для добавления классов -->
<?php
addClass('upper', $allFields['name']);
addClass('lower', $allFields['surname']);
?>
<form method="post" enctype="multipart/form-data">
<?php
// идем по всем полям
foreach ($allFields as $keyField => $valueField)
{
?>
<span><?= $valueField["rusName"] ?></span>
<?php
if ( $allFields[$keyField]['type'] == 'checkbox' ) {
if ( isset($_POST[$keyField]) ) {
?><input type="<?= $valueField["type"] ?>" name = "<?= $keyField ?>" class="<?= $valueField["class"]?>" checked/><?php // checkbox выбран
} else {
?><input type="<?= $valueField["type"] ?>" name = "<?= $keyField ?>" class="<?= $valueField["class"]?>"/><?php // checkbox не выбран
}
} elseif ( $allFields[$keyField]['type'] == 'file' ) {
?><input type="<?= $valueField["type"] ?>" name = "<?= $keyField ?>" class="<?= $valueField["class"]?>" multiple/><?php // формат для всех остальных
} else {
?><input type="<?= $valueField["type"] ?>" value="<?= $valueField["value"] ?>" name = "<?= $keyField ?>" class="<?= $valueField["class"]?>"/><?php // формат для всех остальных
}
?>
<?php
//проверяем ошибки у поля на текущей итерации
if ( count( $valueField["errors"] ) > 0 ) {
?>
<div class="errors" style="color: red">
<?php // implode объеденяет элементы массива в строку, соеденяя их тем что передается в первом параметре ?>
<?= implode( ", ", $valueField["errors"] ) ?>
</div>
<?php
}
}
?>
<input type="submit" value="Отправить">
</form>
Created
August 1, 2017 09:45
-
-
Save deuterium7/3d576df318cbf882948e8e85aba1d5e8 to your computer and use it in GitHub Desktop.
Zabornyi Alex
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment