Cześć! Zrobiłem walidację formularza rejestracji za pomocą wyjątków i walidacja działa poprawnie. Tylko jest jeden problem. Nie wiem jak sprawić aby wstawić dane do bazy danych jeśli walidacje przejdzie poprawnie. Próbowałem już różnych pomysłów ale nieskutecznie.
class FormRegisterValidation
{
public function __construct(
private $data,
private $database,
){}
public function LoginValidation():string
{
$val = $this->data['login'];
if(empty($val))
{
throw new ValidationException("Podaj login");
}
elseif(!preg_match('/^[a-zA-Z-0-9]{4,12}$/', $val))
{
throw new ValidationException("Niepoprawny login");
}else
{
$sql = $this->database->ConnectDatabase()->prepare("SELECT * FROM user where login = :login");
$sql->bindParam(':login', $login, PDO::PARAM_STR);
$sql->execute();
if($sql->rowCount())
{
throw new ValidationException("Podany login już istnieje");
}
}
return $val;
}
public function PasswordValidation():string
{
$val = $this->data['password'];
if(empty($val))
{
throw new ValidationException("Podaj hasło");
}
elseif(!empty($val) && !preg_match('/^[A-Za-z][A-Za-z0-9]{5,31}$/', $val))
{
throw new ValidationException("PoHasło musi zawierać przynajmniej 6 znaków i zaczynać się od litery");
}
return $val;
}
public function PasswordRepeatValidation():string
{
$val = $this->data['password_repeat']);
$vala = $this->data['password']);
if(empty($val))
{
throw new ValidationException("Pole nie może być puste");
}
elseif($val!=$vala)
{
throw new ValidationException("Hasła nie są identyczne");
}
return $val;
}
class Insert
{
public function __construct(
private $data,
private $database,
){}
public function hash_password(): string
{
$field = $this->data['password'];
return $hash = password_hash($field, PASSWORD_DEFAULT);
}
public function InsertUser(): void
{
$login = $this->data['login'];
$hash = $this->hash_password();
if(empty($avatar))
{
$avatar = 'avatar.jpg';
}
$query = $this->database->ConnectDatabase()->prepare("INSERT INTO user(`login`, `password`) VALUES(:login, :password)");
$query->bindParam(':login', $login, PDO::PARAM_STR);
$query->bindParam(':password',$hash, PDO::PARAM_STR);
$query->execute();
}
}
<form action="registration.php" method="post" id="formularz">
<div class="row d-flex">
<div class="form-group col-xl-12 text-light" id="inputWithIcon inputIconBg">
<input type="text" name="login" class="form-control border border-dark" placeholder="Login...">
<span class="error">
<?php
if(isset($_POST['submit']))
{
try{
$FormRegisterValidation->LoginValidation();
}catch(ValidationException $exception)
{
echo $errorMessage = $exception->getMessage();
}
}
?>
</span>
</div>
</div>
<div class="row">
<div class="form-group col-xl-12 text-light" id="inputWithIcon inputIconBg">
<input type="password" name="password" class="form-control border border-dark" placeholder="Hasło...">
<span class="error">
<?php
if(isset($_POST['submit']))
{
try{
$FormRegisterValidation->PasswordValidation();
}catch(ValidationException $exception)
{
echo $errorMessage = $exception->getMessage();
}
}
?>
</span>
</div>
</div>
<div class="row">
<div class="form-group col-xl-12 text-light" id="inputWithIcon inputIconBg">
<input type="password" name="password_repeat" class="form-control border border-dark" placeholder="Powtórz hasło...">
<span class="error">
<?php
if(isset($_POST['submit']))
{
try{
$FormRegisterValidation->PasswordRepeatValidation();
}catch(ValidationException $exception)
{
echo $errorMessage = $exception->getMessage();
}
}
?>
</span>
</div>
</div>