PHP: валидация формы
Здравствуйте, товарищи!
У меня проблема с валидацией и выводом сообщений в вид. Почему-то не работает простая проверка и сообщения не выводятся, при этом отправка минует валидацию и пишется всё это дело в базу. Вот код контроллера:
public function addAction() {
if (!empty($_POST)) {
$textLen = iconv_strlen($_POST['text']);
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$message = 'Некорректный e-mail';
} else {
if ($textLen < 10 or $textLen > 500) {
$message = 'Текст сообщения может содержать от 10 до 500 знаков';
}
}
$id = $this->model->feedbackAdd($_POST);
if (!$id) {
$message = 'Ошибка запроса';
}
$message = 'Сообщение отправлено!';
}
$this->view->render('Обратная связь', 0, 0, 0, $message);
var_dump($_POST['text']);
var_dump($message);
}
Ну и вид, здесь всё проще простого:
<h1><?= $title ?></h1>
<p><?= $message ?></p>
<form action="/feedback/add" method="post">
<input type="text" name="email" placeholder="E-mail" />
<textarea name="text" placeholder="Message"></textarea>
<input type="submit" value="Send" id="sendMessageButton" />
</form>
Вот я не могу понять, почему не выходит, поможите, пожалуйста!
Ответы (1 шт):
Автор решения: Давид Манжула
→ Ссылка
Лично я бы вынес добавление проверку в другой метод, а ошибку кидал через throw. Вот как-то так, как минимум.
public function addAction() {
if (!empty($_POST)) {
try{
$id = $this->sendFeedback($_POST);
$message = 'Сообщение отправлено!';
} catch (Exception $e) {
$message = $e->getMessage();
}
}
$this->view->render('Обратная связь', 0, 0, 0, $message);
}
private function sendFeedback($details){
if (!filter_var($details['email'], FILTER_VALIDATE_EMAIL)) {
throw new Exception('Некорректный e-mail');
}
$textLen = iconv_strlen($details['text']);
if ($textLen < 10 or $textLen > 500) {
throw new Exception('Текст сообщения может содержать от 10 до 500 знаков');
}
$id = $this->model->feedbackAdd($details);
if (!$id) {
throw new Exception('Ошибка запроса');
}
return $id;
}