Это тоже не до конца ООП, но вам бы стоило пробовать двигаться от вашего кода в сторону соблюдения условий: "одна функция - одно действие" и "повторное использование".
Посмотрите, я переписал.
<?php
class SomeClass
{
private string $title = '';
private string $content = '';
private array $error = [];
public function create(): void
{
if (empty($this->error)) {
$this->add();
}
echo $this->getStatus();
}
private function add(): void
{
$query = "insert into posts set title = :title, content = :content, created = now()";
$stmt = $this->conn->prepare($query);
$stmt->bindParam(":title", $this->title);
$stmt->bindParam(":content", $this->content);
if (!$stmt->execute()) {
$this->error[] = 'Запись в базу не прошла!';
}
}
public function setTitle(string $string): void
{
if (empty($string)) {
$this->error[] = 'Поле title не заполнено!';
} elseif (strlen($string) <= 5) {
$this->error[] = 'Поле title меньше 5 символов!';
} else {
$this->title = htmlspecialchars(strip_tags($string));
}
}
public function setContent(string $string): void
{
if (empty($string)) {
$this->error[] = 'Поле content не заполнено!';
} else {
$this->content = htmlspecialchars(strip_tags($string));
}
}
private function getStatus(): string
{
if (empty($this->error)) {
return '<div class="alert alert-success">Успешно!</div>';
}
$string = '';
foreach ($this->error as $error) {
$string .= "<li>$error</li>";
}
return "<div class=\"alert alert-danger\"><ol>$string</ol></div>";
}
}
И в коде вызов, например:
...
if (isset($_GET['title']) && isset($_GET['text'])) {
$c = new SomeClass();
$c->setTitle($_GET['title']);
$c->setContent($_GET['text']);
$c->create;
}
...