Я создал класс «validate» для проверки двух полей, т.е. «firstname» и «lastname». Он не работает нормально, он показывает ошибку, когда поле пуст, но когда я отправляю форму с непустыми полями, ошибка все еще существует. Как это выполнить при отправке формы?
<?php class validation { public $firstName, $lastName, $errorFirstName = '', $errorLastName = ''; function __constructor($fName, $lName){ $this->firstName = $fName; $this->lastName = $lName; } function check(){ if($_SERVER["REQUEST_METHOD"] == "POST"){ if(empty($this->firstName)){ $this->errorFirstName = 'First name is required'; } else { $this->errorFirstName = 'Input is okay'; } if(empty($this->lastName)){ $this->errorLastName = 'Last name is required'; } else { $this->errorLastName = 'Input is okay'; } } } } $obj = new validation($_POST['firstname'], $_POST['lastname']); $obj->check(); $errorF = $obj->errorFirstName; $errorL = $obj->errorLastName; ?> <!DOCTYPE html> <html lang = "en-US" dir = "ltr"> <head> <title>Home</title> <meta charset = "UTF-8"/> </head> <body> <form method = "POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <label>First Name: </label> <input type = "text" name = "firstname" placeholder = "John"/> <p class = "error"><?php echo $errorF;?></p> <label>Last Name: </label> <input type = "text" name = "lastname" placeholder = "Doe"/> <p class = "error"><?php echo $errorL;?></p> <input type="submit"> </form> </body> </html>
Каждый всегда делает «класс базы данных» и «класс проверки». Эх … whaaaaay?
Не используйте класс проверки. Он никогда не работает. Наиболее … emm … устойчивыми параметрами для проверки ввода пользователя являются:
С использованием сущностей для проверки это довольно просто. В вашем случае у вас будет класс Profile
которого есть метод setFirstName(string $name)
. Затем в рамках этого метода вы выполняете проверку и по ошибке генерируете сделанное пользователем исключение , такое как InvalidFirstName
.. или что-то в этом роде.
Использование объектов значений немного сложнее, но это предотвращает дублирование кода. Например, вам необходимо проверить адрес электронной почты. Таким образом, способ, которым вы хотели бы использовать его, выглядел бы примерно так:
try { $profile = new Profile; $profile->setEmail(new EmailAddress($_POST['email'])); } catch (InvalidArgumentException $e){ // validation failed }
Поэтому, чтобы получить это поведение, у вас будет класс, определенный следующим образом:
class EmailAddress { private $email; public function __construct(int $emailId = null, string $email = null) { if (!$this->isValid($email)) { throw new InvalidArgumentException('Not valid email address'); } $this->email = $email; } private function isValid($email) { return filter_var($email, FILTER_VALIDATE_EMAIL) !== false; } public function __toString() { return $this->email; } }
Этот подход намного более выразителен, но он, как правило, становится большим gnarly, когда взаимодействует с уровнем persistence.
На практике лучшим вариантом является использование комбинации этих двух решений: