ddimonn8080
@ddimonn8080

Как правильно делать проверку данных из формы?

Здравствуйте. Правильно ли я сделал проверку поля <input type="text" name="name">?
Проверять надо $_POST['name'] или сначала обработать htmlspecialchars() и trim()?
Видел в сети оба варианта, но ведь если обработать сначала с помощью htmlspecialchars() то при проверке на длину она будет не корректной.
if (isset($_POST['name']) && !empty($_POST['name'])) {
    if ( strlen($_POST['name']) < 2 ) {
        $errorValidation['nameShort'] = '<label id="name-error" class="error" for="name">Имя не должно содержать меньше 2 символов</label>';
    } else if ( strlen($_POST['name']) > 20 ) {
        $errorValidation['nameLong'] = '<label id="name-error" class="error" for="name">Имя не должно содержать больше 20 символов</label>';
    } else {
        $name = htmlspecialchars(trim($_POST['name']), ENT_QUOTES);
    }
	
} else if (empty($_POST['name'])) {
    $errorValidation['nameEmpty'] = '<label id="name-error" class="error" for="name">Поле обязательное для заполнения</label>';
}
  • Вопрос задан
  • 291 просмотр
Решения вопроса 2
ewgenio
@ewgenio
Всё по чуть чуть
По вашему примеру:
Сначала вы естественно проверяете пришла ли вообще переменная isset.
потом лучше убрать пробелы trim чтобы правильно проверить strlen, а после уже преобразуете строку как вам нужно htmlspecialchars

То есть по сути все правильно кроме того что trim желательно сделать до strlen

...
здесь написал неправильное условие и сам убрал
Ответ написан
Комментировать
gromdron
@gromdron
Работаю с Bitrix24
Вот уж не знаю насколько правильно, но я бы например делал так:

if ( isset($_POST['name']) ) {
	$name = trim($_POST['name']);

	if ( !empty($name) ) {
		$length = strlen($name);
		if ( $length < 2 ) {
			$errorValidation['nameShort'] = 'Имя не должно содержать меньше 2 символов';
		} elseif ( $length >= 20 ) {
			$errorValidation['nameLong'] = 'Имя не должно содержать больше 20 символов';
		} else {
			$name = strip_tags($name);
			$name = mysql_real_escape_string($name);
		}
	} else {
		$errorValidation['nameEmpty'] = 'Поле обязательное для заполнения';
	}
} else if (empty($_POST['name'])) {
	$errorValidation['nameEmpty'] = 'Поле обязательное для заполнения';
}


А уже тег добавлял при выводе
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы