From 16b0a3d5fbc78837014385652a5c58b5a6c5d937 Mon Sep 17 00:00:00 2001 From: polo Date: Sun, 26 Jul 2026 14:30:36 +0200 Subject: =?UTF-8?q?erreurs=20retourn=C3=A9es,=20retour=20imm=C3=A9diat=20e?= =?UTF-8?q?n=20cas=20d'erreur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/ContactFormController.php | 4 +- src/controller/UserController.php | 8 +-- src/service/FormValidation.php | 93 +++++++++++++++++++------------- 3 files changed, 61 insertions(+), 44 deletions(-) diff --git a/src/controller/ContactFormController.php b/src/controller/ContactFormController.php index e078af2..82e9b17 100644 --- a/src/controller/ContactFormController.php +++ b/src/controller/ContactFormController.php @@ -38,7 +38,7 @@ class ContactFormController return new JsonResponse(['success' => true]); } else{ - return new JsonResponse(['success' => false, 'error' => $form->getErrors()[0]]); // la 1ère erreur sera affichée + return new JsonResponse(['success' => false, 'error' => $form->getError()]); } } @@ -60,7 +60,7 @@ class ContactFormController } } else{ - $error = $form->getErrors()[0]; // la 1ère erreur sera affichée + $error = $form->getError(); } if(empty($error)){ diff --git a/src/controller/UserController.php b/src/controller/UserController.php index 750b01b..b68421f 100644 --- a/src/controller/UserController.php +++ b/src/controller/UserController.php @@ -36,7 +36,7 @@ class UserController $entityManager->flush(); } else{ - $error = $form->getErrors()[0]; // la 1ère erreur sera affichée + $error = $form->getError(); } if(!empty($error)){ @@ -96,7 +96,7 @@ class UserController $entityManager->flush(); } else{ - $error = $form->getErrors()[0]; // la 1ère erreur sera affichée + $error = $form->getError(); } if(!empty($error)){ @@ -154,7 +154,7 @@ class UserController } } else{ - $error = $form->getErrors()[0]; // la 1ère erreur sera affichée + $error = $form->getError(); } if(!empty($error)){ @@ -193,7 +193,7 @@ class UserController } } else{ - $error = $form->getErrors()[0]; // la 1ère erreur sera affichée + $error = $form->getError(); } if(!empty($error)){ diff --git a/src/service/FormValidation.php b/src/service/FormValidation.php index 9646a6b..9d0b838 100644 --- a/src/service/FormValidation.php +++ b/src/service/FormValidation.php @@ -19,7 +19,7 @@ enum ValidationStrategy { public function method(): string { return match($this){ - self::EmailSend => 'emailStrategy', + self::EmailSend => 'emailSendStrategy', self::EmailParam => 'emailParamStrategy', self::CreateUser => 'createUserStrategy', self::Connection => 'connectionStrategy', @@ -33,7 +33,7 @@ class FormValidation { private array $data; // tableau associatif (probablement $_POST) private Closure $callStrategy; - private array $errors; + private ?string $error; public function __construct(array $data, ValidationStrategy $strategy){ $this->data = $data; @@ -43,14 +43,13 @@ class FormValidation public function validate(): bool { - $this->errors = []; - ($this->callStrategy)(); // appel de la callback + $this->error = ($this->callStrategy)(); // appel de la callback return empty($this->errors); } - public function getErrors(): array + public function getError(): string { - return $this->errors; + return $this->error; } public function getField(string $field): string @@ -59,7 +58,7 @@ class FormValidation } // méthodes de validation - private function captchaValidate(bool $clean_session = true): void + private function captchaValidate(bool $clean_session = true): ?string { $captcha_solution = (isset($_SESSION['captcha']) && is_int($_SESSION['captcha'])) ? $_SESSION['captcha'] : 0; $captcha_try = isset($this->data['captcha']) ? Captcha::controlInput($this->data['captcha']) : 0; @@ -68,14 +67,15 @@ class FormValidation } if($captcha_try == 0){ - $this->errors[] = 'error_non_valid_captcha'; + return 'error_non_valid_captcha'; } elseif($captcha_solution == 0){ // ne peut pas arriver, si? - $this->errors[] = 'captcha_server_error'; + return 'captcha_server_error'; } elseif($captcha_try !== $captcha_solution){ - $this->errors[] = 'bad_solution_captcha'; + return 'bad_solution_captcha'; } + return null; } // erreurs à la création des mots de passe @@ -87,111 +87,128 @@ class FormValidation // stratégies - private function emailStrategy(): void + private function emailSendStrategy(): ?string { - $this->captchaValidate(false); + if($error = $this->captchaValidate(false)){ + return $error; + } if(empty($this->data['name']) || empty($this->data['email']) || empty($this->data['message']) || !isset($this->data['hidden']) || !empty($this->data['hidden'])){ - $this->errors[] = 'missing_fields'; + return 'missing_fields'; } elseif(!filter_var(trim($this->data['email']), FILTER_VALIDATE_EMAIL)){ - $this->errors[] = 'bad_email_address'; + return 'bad_email_address'; } $this->data['name'] = htmlspecialchars(trim($this->data['name'])); $this->data['email'] = htmlspecialchars(trim($this->data['email'])); $this->data['message'] = htmlspecialchars($this->data['message']); + + return null; } - private function emailParamStrategy(): void + private function emailParamStrategy(): ?string { if(empty($this->data['id']) || empty($this->data['what_param']) || empty($this->data['value']) || !isset($this->data['hidden']) || !empty($this->data['hidden'])){ - $this->errors[] = 'missing_fields'; + return 'missing_fields'; } if(!in_array($this->data['what_param'], ['smtp_host', 'smtp_secure', 'smtp_username', 'smtp_password', 'email_dest'])){ - $this->errors[] = 'unknown_parameter'; + return 'unknown_parameter'; } elseif($this->data['what_param'] === 'smtp_username' || $this->data['what_param'] === 'email_dest'){ if(!filter_var($this->data['value'], FILTER_VALIDATE_EMAIL)){ - $this->errors[] = 'invalide_email_address'; + return 'invalide_email_address'; } } + return null; } - private function createUserStrategy(): void + private function createUserStrategy(): ?string { - $this->captchaValidate(); + if($error = $this->captchaValidate()){ + return $error; + } // test mauvais paramètres if(empty($this->data['login']) || empty($this->data['password']) || empty($this->data['password_confirmation']) || !isset($this->data['create_user_hidden']) || !empty($this->data['create_user_hidden'])) { - $this->errors[] = 'bad_login_or_password'; + return 'bad_login_or_password'; } if($this->data['password'] !== $this->data['password_confirmation']){ - $this->errors[] = 'different_passwords'; + return 'different_passwords'; } if($this->data['login'] !== self::removeSpacesTabsCRLF(htmlspecialchars($this->data['login'])) || $this->data['password'] !== self::removeSpacesTabsCRLF(htmlspecialchars($this->data['password']))){ - $this->errors[] = 'forbidden_characters'; + return 'forbidden_characters'; } + return null; } - private function connectionStrategy(): void + private function connectionStrategy(): ?string { - $this->captchaValidate(); + if($error = $this->captchaValidate()){ + return $error; + } if(empty($this->data['login']) || empty($this->data['password']) || !isset($this->data['connection_hidden']) || !empty($this->data['connection_hidden'])) { - $this->errors[] = 'bad_login_or_password'; + return 'bad_login_or_password'; } + return null; } - private function usernameUpdateStrategy(): void + private function usernameUpdateStrategy(): ?string { - $this->captchaValidate(); + if($error = $this->captchaValidate()){ + return $error; + } if(empty($this->data['login']) || empty($this->data['password']) || empty($this->data['new_login']) || !isset($this->data['modify_username_hidden']) || !empty($this->data['modify_username_hidden'])) { - $this->errors[] = 'bad_login_or_password'; + return 'bad_login_or_password'; } $new_login = self::removeSpacesTabsCRLF(htmlspecialchars($this->data['new_login'])); if($new_login !== $this->data['new_login']){ - $this->errors[] = 'forbidden_characters'; + return 'forbidden_characters'; } if($this->data['login'] !== $_SESSION['user']['username']){ - $this->errors[] = 'bad_login_or_password'; + return 'bad_login_or_password'; } if($this->data['login'] === $new_login){ - $this->errors[] = 'same_username_as_before'; + return 'same_username_as_before'; } + return null; } - private function passwordUpdateStrategy(): void + private function passwordUpdateStrategy(): ?string { - $this->captchaValidate(); + if($error = $this->captchaValidate()){ + return $error; + } if(empty($this->data['login']) || empty($this->data['password']) || empty($this->data['new_password']) || !isset($this->data['modify_password_hidden']) || !empty($this->data['modify_password_hidden'])) { - $this->errors[] = 'bad_login_or_password'; + return 'bad_login_or_password'; } $new_password = self::removeSpacesTabsCRLF(htmlspecialchars($this->data['new_password'])); if($new_password !== $this->data['new_password']){ - $this->errors[] = 'forbidden_characters'; + return 'forbidden_characters'; } if($this->data['login'] !== $_SESSION['user']['username']){ - $this->errors[] = 'bad_login_or_password'; + return 'bad_login_or_password'; } if($this->data['password'] === $new_password){ - $this->errors[] = 'same_password_as_before'; + return 'same_password_as_before'; } + return null; } } \ No newline at end of file -- cgit v1.2.3