za4me
@za4me
Человек

Почему проходит проверку?

Добрый день.

Имеется регистрация по адресу example.com/reg
Полученные данные обрабатывает example.com/reg/done

Если не заполнить поля отведенные для регистрации на странице /reg, и перейти далее на страницу /reg/done (кликнув по кнопке регистрации) то выйдет уведомление (первая проверка) о том что форма заполнена некорректно.

Но, если перейти напрямую на страницу /reg/done то первая проверка пройдет успешно и выйдет ошибка о неверном e-mail.

Вопрос, почему проходит первая проверка при переходе напрямую на страницу example.com/reg/done?
Ведь никакие данные заполнены небыли.

// Код первой проверки
class Filled
{
	static function filled_out($form_vars)
	{
		foreach ($form_vars as $key => $value) {
			if (empty($value)||!preg_match("/^[-a-zA-Z0-9_\.@]*$/", $value)) {
				return false;
			}
		}
		return true;
	}
}

// код регистрации
$email = Clear::clear_data($_POST['email']);
$name = Clear::clear_data($_POST['name']);
$pass = Clear::clear_data($_POST['pass']);
$pass2 = Clear::clear_data($_POST['pass2']);

try {
	// проверка, заполнены ли поля формы
	if (!Filled::filled_out($_POST)) {
		throw new Exception("Вы не заполнили корректно форму.", 1);
	}

	// проверка корректного email
	if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
		throw new Exception("Недопустимый адрес электронной почты.", 1);
	}

/* дальнейшие проверки */
  • Вопрос задан
  • 129 просмотров
Решения вопроса 2
EnterSandman
@EnterSandman
Эникей
Потому что у вас всегда возвращается true - $_POST же пустой и foreach не обрабатывается
Ответ написан
alsopub
@alsopub
Ваша форма передается методом POST, а если вы открываете прямую ссылку - это метод GET.
Но дело не в этом, дело в вашем алгоритме.
При прямом открытии ссылки массив $_POST пуст, соответственно filled_out сообщает что "все в порядке", так как в нем нет некорректных данных.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы