@epyson

Изучаю ООП, как лучше обрабатывать форму?

public $err = "<div class='alert alert-danger'>";
public $_err = "</div>";

public $succ = "<div class='alert alert-success'>";
public $_succ = "</div>";

public function create()
	{
		$query = "INSERT INTO posts SET title=:title, content=:content, created=:created";
		$stmt = $this->conn->prepare($query);

		$this->title = htmlspecialchars(strip_tags($this->title));
		$this->content = htmlspecialchars(strip_tags($this->content));
		$this->date = date("Y-m-d H:i:s");

		if (empty($this->title) || empty($this->content)) {
			echo $this->err . "заполните все поля" . $this->_err;
			return false;
		} else if (strlen($this->title) <= 5) {
			echo $this->err . "меньше 5 символов" . $this->_err;
			return false;
		} 
		else {
			echo $this->succ . "Успешно!" . $this->_succ;
		}

		$stmt->bindParam(":title", $this->title);
		$stmt->bindParam(":content", $this->content);
		$stmt->bindParam(":created", $this->date);

		if ($stmt->execute()) {
			return true;
		} else {
			return false;
		}
}
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ответы на вопрос 3
Lopar
@Lopar
системный администратор
Это тоже не до конца ООП, но вам бы стоило пробовать двигаться от вашего кода в сторону соблюдения условий: "одна функция - одно действие" и "повторное использование".

Посмотрите, я переписал.
<?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;
}
...
Ответ написан
Комментировать
lenk0belk0
@lenk0belk0
программироваю
Что касается данного примера и ООП, тут не выполнена декомпозиция, смешана работа с базой данных, отрисовка формы, заполнение полей, валидация. Каждую из этих задач должен выполнять отдельный класс со своей областью ответсвенности.
Ответ написан
Комментировать
toxa82
@toxa82
С помощью фреймворка. Изучите какой-нибудь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы