Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jan Václavík:7.10.2018 8:26

Ahoj, zkouším přijít na to jak by měla vypadat taková funkce addPost() v OOP. Něco jsem napsal ale nefunguje to. Mohl by mě prosím někdo správně nasměrovat a říct kde dělám chybu ? Děkuju :-)

Zkusil jsem: Class Post:

<?php

class Posts
{

    public $id;
    public $author;
    public $title;
    public $text;
    public $message;

    public function addPost($author, $title, $text)
    {
        $this->$author = htmlspecialchars($_POST['author']);
        $this->$title = htmlspecialchars($_POST['title']);
        $this->$text = htmlspecialchars($_POST['text']);

        if(!empty($this->author))
        {
            $message[] = "Pole autor je prázdný.";
            exit;
        } else {
            echo('Kontrola 1 ok.');
        }

        if(!empty($this->title))
        {
            $message[] = "Pole titulek je prázdný.";
            exit;
        } else {
            echo('Kontrola 2 ok.');
        }

        if(!empty($this->title))
        {
            $message[] = "Pole text je prázdný.";
            exit;
        } else {
            echo('Kontrola 3 ok.');
        }

        echo('Kontroly jsou OK teď jdeme na přidání příspěvku do SQL');

        $sql = "INSERT INTO posts (author, title, text) VALUES ($this->author, $this->title, $this->text)";

        if($conn->query($sql) === TRUE){
            echo('Zápis proběhl úspěšně.');
        } else {
            echo('Zápis nebyl úspěšný.');
            echo(' Error: ' . $sql . '<br />' . $conn->error);
        }
    }

}

Index:

<?php
session_start();

require_once ('class/Posts.php');

// MySQL Connection

$servername = "127.0.0.1";
$username = "root";
$password = "xxx";

$conn = new mysqli($servername,$username,$password);

if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
} else {
    echo('Připojeno');
}

// END MySQL Connection


?>
<meta charset="UTF-8">
<form method="post" action="index.php">
    Author: <select name="author">
        <option value="xxx">xxx</option>
    </select><br />
    Titulek: <input type="text" name="title"><br />
    Text: <br /><textarea name="text" cols="50" rows="15">

    </textarea>
    <input type="submit" value="Odeslat" >
</form>

Chci docílit: Snažím se vytvořit stránku kde bude jednoduché přidávání příspěvků od jednoho autora. Chci to udělat v OOP abych se to troch naučil.

 
Odpovědět
7.10.2018 8:26
Avatar
Samuel Kodytek
Tvůrce
Avatar
Samuel Kodytek:7.10.2018 9:00

Ahoj,

Tvůj problém je v tom, že nevytváříš instanci po // END MySQL Connection Jinak si myslím, že by to mělo fungovat. Neco jako:

$posts = new Posts();
$posts->addPost("Franta", "Můj titulek", "Text");

Dále bych asi doporučil se kouknout na SQL injekce, momentálně je nepoužíváš a někdo by ti mohl smazat celou databázi tím.

Nevím jak daleko jsi v OOP, ale doporučoval bych trošku jiný náhled na problematiku... Udělal bych si třídu Post, která by měla atributy něco jako $title, $author, $text. Pak nějakou třídu Posts, která by měla tu metodu addPosts(Post $post) a brala by a vstupu objekt typu Post. Třída Posts by se jenom starala o věci jako přidávání a mazání příspěvků.

Taky bych se pokoušel použít konstruktory, aspoň v tý třídě Post.

Doufám, že jsem pomohl, když tak piš :)

Editováno 7.10.2018 9:01
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
7.10.2018 9:00
There is more than one way to screw it
Avatar
Samuel Kodytek
Tvůrce
Avatar
Samuel Kodytek:7.10.2018 9:13

Přikládám ještě strukturu tříd, jak bych to udělal osobně já (protože chápu, že v té hromádce textu se špatně orientuje):

//Tahle třída bude pouze obsluhovat moje články
class Posts {
    function addPosts(Post $post) {}

    //Další implementace např. jako removePosts()?
}

//Tahle třída reprezentuje článek
class Post {
    private $author;
    private $title;
    private $text;

    // Další implementace jako kontruktor, gettery, settery atd.
}

*Samozřejmě je na to víc způsobu pohledů, ale tenhle mi příjde nejmíň zmatený, odděluješ tak nějak práci s databází a samotný model (tedy Post). *

Editováno 7.10.2018 9:15
Nahoru Odpovědět
7.10.2018 9:13
There is more than one way to screw it
Avatar
Jan Václavík:7.10.2018 15:46

Mockrát děkuju za radu. V OOP i v PHP jsem úplný začátečník takže se zatím učím základy. S tou instancí jsem trochu zapomněl jak tyhle funkce ve třídách fungují :)

Teď mám ale ještě jeden problém a to sice to že následující kód mi nezapíše do databáze nic.

U všech kontrol to napíše že jsou ok ale pole přitom nemají žádnou hodnotu.

Index:

<?php
session_start();

require_once ('class/Posts.php');

// MySQL Connection

$servername = "127.0.0.1";
$username = "root";
$password = "xxx";
$dbname = "xxx";

$conn = new mysqli($servername,$username,$password,$dbname);

if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
} else {
    echo('Připojeno');
}

// END MySQL Connection
if(isset($_POST['sub'])){
    $post = new Posts();
    $post->addPost(htmlspecialchars($_POST['author']),htmlspecialchars($_POST['title']),htmlspecialchars($_POST['text']));
}


?>
    <meta charset="UTF-8">
    <form method="post" action="index.php">
        Author: <select name="author">
            <option value="xxx">xxx</option>
        </select><br />
        Titulek: <input type="text" name="title"><br />
        Text: <br /><textarea name="text" cols="50" rows="15">

    </textarea>
        <input type="submit" value="Odeslat" name="sub">
    </form>

Třída:

<?php

class Posts
{

    public $id;
    public $author;
    public $title;
    public $text;
    public $message;

    public function addPost($author, $title, $text)
    {

        $servername = "127.0.0.1";
        $username = "root";
        $password = "xx";
        $dbname = "xx";

        $conn = new mysqli($servername,$username,$password, $dbname);

        if(empty($this->author))
        {
            $message[] = "Pole autor je prázdný.";
            exit;
        } else {
            echo('Kontrola 1 ok.');
        }

        if(empty($this->title))
        {
            $message[] = "Pole titulek je prázdný.";
            exit;
        } else {
            echo('Kontrola 2 ok.');
        }

        if(empty($this->title))
        {
            $message[] = "Pole text je prázdný.";
            exit;
        } else {
            echo('Kontrola 3 ok.');
        }

        echo('Kontroly jsou OK teď jdeme na přidání příspěvku do SQL');

        $sql = "INSERT INTO posts (author, title, text) VALUES ('" . $this->author . "','" . $this->title . "','" . $this->text ."')";

        if($conn->query($sql) === TRUE){
            echo('Zápis proběhl úspěšně.');
        } else {
            echo('Zápis nebyl úspěšný.');
            echo(' Error: ' . $sql . '<br />' . $conn->error);
        }
    }

}
 
Nahoru Odpovědět
7.10.2018 15:46
Avatar
Lu Kiss
Člen
Avatar
Odpovídá na Jan Václavík
Lu Kiss:7.10.2018 16:12

Určitě nepoužívej mysqli, ale alespoň PDO. Takhle ti tam vzniká sql injection. AddPost() by neměl mít v sobě mneměl vytvářet db, spojení. To by měla dostávat třída už někde výše, např. v kosntrukturu. Pokud budeš chtít dělat nabuduce deletePost(), budeš mít dost identitcký kód, což je zhlediska OOP špatně. Exitu bych se taky vyhnul, užil bych try/catch a chytat si vyjímku, v tém případě pro začátek stačí ta bázová ale do budoucna by jsi měl být schopen detekovat všechny vyjímky jaké ti můžou nastat. Funkce by neměl mít v sobě žádná echa, měl by jsi tam returnovat. V tomto případě a opět pro tvé začátečničké účely stačí vracet null v případě chyby a nebo id toho nově vytvořeného článku. V nějakém kontroleru by jsi měl pak volat tuhle fci a na základě posílat textové hlášky do view. Doporučiji jít podle zdejších tutoriálů, je tam vše napsané jak postupovat. Celkově se nedá říct, že by ta třída splňopvala OOP, už jenom ty public atributy jsou bijící do očí, ale nechci tě tady hejtit, každá snaha se cení, ale opravdu doporučuji přečíst si zdejší články.

Editováno 7.10.2018 16:13
 
Nahoru Odpovědět
7.10.2018 16:12
Avatar
Jan Václavík:7.10.2018 21:56

Děkuju moc za rady. To o čem tu píšeš (kontroler a view) je asi MVC. Jak jsem už psal jsem začátečník PHP a snažím se to učit i s OOP ale MVC jsem ještě úplně nezkoumal. Taky ještě nevím jak se přesně používá try a catch. Velice rád si vyslechnu co dělám špatně a co bych měl změnit, případně jestli něco nechápu úplně špatně. Třeba co s těmi public atributy ? Chápu jejich používání špatně ?

Trochu jsem se to snažil přepsat dle vašich rad. Opět mi to ale nefunguje a nevím kde je chyba. Nejsem si jistý zda to $pdo mám správně. Chyby to žádné neukazuje ale do databáze to řádek taky nezapíše. Nevidíte v tom nějakou chybu?

Post.php

<?php

class Post
{
    public $title;
    public $text;
    public $datetime;
    public $conn;

    function __construct($title, $text, $datetime, $pdo)
    {
        $this->title = $title;
        $this->text = $text;
        $this->datetime = $datetime;
        $this->conn = $pdo;

    }

    public function addPost()
    {

        if(empty($author)) {
            $error_messages['title'] = "Pole titulek je prázdný.";
        }

        if(empty($text)){
            $error_messages['text'] = "Pole text je prázdný.";
        }

        if(empty($datetime)){
            $error_messages['datetime'] = "Datum příspěvku nebylo nastaveno.";
        }

        if(!$error_messages){
            return $this->conn->query("INSERT INTO sofi (title, text, datetime) VALUES ('" . $this->title . "', '" . $this->text . "', '" . $this->datetime . "')");
        }
    }

}

index.php

<?php
session_start();

require_once('class/Post.php');
require_once('mysql.php');

if (isset($_POST['submit'])) {
    $title = htmlspecialchars($_POST['title']);
    $text = htmlspecialchars($_POST['text']);
    $datetime = date("d,m,Y H:i");

    $post = new Post($title, $text, $datetime, $pdo);
    $post->addPost($title, $text, $datetime, $pdo);

}


?>
<meta charset="UTF-8">
<form method="post" action="index.php">
    Titulek: <input type="text" name="title"><br/>
    Text: <br/><textarea name="text" cols="50" rows="15">

    </textarea>
    <input type="submit" value="Odeslat" name="submit">
</form>

mysql.php

<?php

define('SQL_HOST', '127.0.0.1');
define('SQL_DBNAME', 'sofi');
define('SQL_USERNAME', 'root');
define('SQL_PASSWORD', 'xxxx');

$dsn = 'mysql:dbname' . SQL_DBNAME . ';host=' . SQL_DBNAME . '';
$user = SQL_USERNAME;
$password = SQL_PASSWORD;

try {
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die('Connection failed: ' . $e->getMessage());
}
 
Nahoru Odpovědět
7.10.2018 21:56
Avatar
Samuel Kodytek
Tvůrce
Avatar
Odpovídá na Jan Václavík
Samuel Kodytek:7.10.2018 22:39

Na prvni pohled v tom chybu nevidim, pripominam, ze tam furt mas SQL injekci ale to asi ted momentalne neni tvuj hlavni problem... zkusil bych zavolat ten querry pri nacteni stranky at vis kde je problem. Pokud se ti prida radek s hodnotama do db, tak mas asi chybu v tech ifech, pokud ne tak je problem u PDO...

Praci s PDO jsi nazpamet nepamatuji jak se s nim pracuje... bohuzel nejsem na pocitaci abych nejak mohl googlit...

Editováno 7.10.2018 22:41
Nahoru Odpovědět
7.10.2018 22:39
There is more than one way to screw it
Avatar
Odpovídá na Jan Václavík
Dominik Gavrecký:7.10.2018 23:15

Vydumpuj si conn a a tú query a hoď mi sem výsledok

Nahoru Odpovědět
7.10.2018 23:15
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Jan Václavík:8.10.2018 10:07

Zkoušel jsem to dumpnout jako var_dump ale nic moc to neukázalo. Trochu jsem to zkoumal, opravil chyby a už to funguje jenže kód není takový jak by měl vypadat.

Mám proměnnou $error_messages v Post.php kterou když definuji úplně nahoře v souboru tak mi to hází chybu že není definována. Nevím co s tím sql injection. Jestli je řešení toto

$sql = $pdo->prepare("INSERT into uzivatele (title, text, datetime) VALUES(?, ?, ?)");
$result = $sql->execute(array(
  $title,
  $text,
  $datetime
));

tak jak to udělat v té třídě Post když nemohu vytvářet další proměnné ve funkci [nebo můžu ? a jak ?]

Post.php

<?php

class Post
{
    public $title;
    public $text;
    public $datetime;
    public $conn;
    public $error_messages = [];

    function __construct($title, $text, $datetime, $pdo)
    {

        $this->title = $title;
        $this->text = $text;
        $this->datetime = $datetime;
        $this->conn = $pdo;

    }

    public function addPost($title, $text, $datetime)
    {
        $error_messages = [];
        if(empty($title)) {
            $error_messages['title'] = "Pole titulek je prázdný.";
        }

        if(empty($text)){
            $error_messages['text'] = "Pole text je prázdný.";
        }

        if(empty($datetime)){
            $error_messages['datetime'] = "Datum příspěvku nebylo nastaveno.";
        }

        if(!$error_messages){
            return $this->conn->query("INSERT INTO posts (title, text, datetime) VALUES ('" . $this->title . "', '" . $this->text . "', '" . $this->datetime . "')");
        } else {
            echo(implode($error_messages));
        }
    }

}

index.php

<?php
session_start();

require_once('class/Post.php');
require_once('mysql.php');

if (isset($_POST['submit'])) {
    $title = htmlspecialchars($_POST['title']);
    $text = htmlspecialchars($_POST['text']);
    $datetime = date("d.m.Y H:i");

    $post = new Post($title, $text, $datetime, $pdo);// <--- neměli by atributy být jen na jednom řádku ?
    $post->addPost($title, $text, $datetime);

}


?>
<meta charset="UTF-8">
<form method="post" action="index.php">
    Titulek: <input type="text" name="title"><br/>
    Text: <br/><textarea name="text" cols="50" rows="15">

    </textarea>
    <input type="submit" value="Odeslat" name="submit">
</form>

mysql.php

<?php

define('SQL_HOST', '127.0.0.1');
define('SQL_DBNAME', 'sofi');
define('SQL_USERNAME', 'root');
define('SQL_PASSWORD', 'xxx');

$dsn = 'mysql:dbname=' . SQL_DBNAME . ';host=' . SQL_HOST . '';
$user = SQL_USERNAME;
$password = SQL_PASSWORD;

try {
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die('Connection failed: ' . $e->getMessage());
}
 
Nahoru Odpovědět
8.10.2018 10:07
Avatar
Odpovídá na Jan Václavík
Martin Konečný (pavelco1998):8.10.2018 11:02

Ahoj, základní chyba je v tom, že v té metodě addPost() používáš proměnné jako $title, která tam neexistuje, a tedy se ti neprovede pak ten dotaz (splní se ti podmínky if (empty())). K atributům třídy se přistupuje přes proměnnou $this, tedy např. $this->title.

Nahoru Odpovědět
8.10.2018 11:02
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Jan Václavík:8.10.2018 12:19

Takže takhle by to mělo být správně ?

<?php

class Post
{
    public $title;
    public $text;
    public $datetime;
    public $conn;
    public $error_messages = [];

    function __construct($title, $text, $datetime, $pdo)
    {

        $this->title = $title;
        $this->text = $text;
        $this->datetime = $datetime;
        $this->conn = $pdo;

    }

    public function addPost($title, $text, $datetime)
    {
        $error_messages = [];
        if(empty($this->title)) {
            $error_messages['title'] = "Pole titulek je prázdný.";
        }

        if(empty($this->text)){
            $error_messages['text'] = "Pole text je prázdný.";
        }

        if(empty($this->datetime)){
            $error_messages['datetime'] = "Datum příspěvku nebylo nastaveno.";
        }

        if(!$error_messages){
            return $this->conn->query("INSERT INTO posts (title, text, datetime) VALUES ('" . $this->title . "', '" . $this->text . "', '" . $this->datetime . "')");
        } else {
            echo(implode($error_messages));
        }
    }

}

a co mohu dělat s tou proměnnou $error_messages? Co s těmi atributy v tom indexu při vytváření instance ? Jsou tam správně ?

 
Nahoru Odpovědět
8.10.2018 12:19
Avatar
Michal Novák:8.10.2018 12:48

V metodě addPost nepoužívej parametry, však je posíláš už v konstruktoru, takže to je zbytečné a určitě používej prepared stm, ať se zbavíš té zranitelnosti SQL injection.

Nicméně hlavní chyba bude v tom, že nemáš ve formuláři prvek "submit", takže podmínka isset($_POST['sub­mit']) nebude splněna ani po odeslání formuláře a tudíž se nic neuloží...

Edit:
Aha, tak už jsem si všiml, že v aktualizovaném kódu "submit" již je, tak mrkni do error logu web serveru.

Editováno 8.10.2018 12:50
 
Nahoru Odpovědět
8.10.2018 12:48
Avatar
Michal Novák:8.10.2018 12:54

Jo a nepřiřazuj ten sql do proměnné result.

$result = $sql->execute
Editováno 8.10.2018 12:56
 
Nahoru Odpovědět
8.10.2018 12:54
Avatar
Michal Novák:8.10.2018 13:03

A ještě jsem si všiml té proměnné datetime. Jak máš vytvořenou tabulku v databázi? Je sloupec datetime jako varchar? Protože jinak ti to takhle nevezme, špatný formát.

Datetime doporučuji z php kódu úplně odstranit a nadefinovat přímo v DB, aby se vkládal automaticky při vložení nového řádku.

 
Nahoru Odpovědět
8.10.2018 13:03
Avatar
Jan Václavík:8.10.2018 14:21

Jak to mohu dál používat aniž by to bylo v podmínce ? Datetime jsem měl původně jako INT což jsem po chvíli poznal že to vlasně INT není a proto to byl jeden z důvodů proč to nezapisovalo do DB. Díky za radu s tím datetime v db někde se na to podívám jak na to. Parametry v addPost jsem odstranil. Ale co bych pořád mohl udělat s tou proměnou $error_messages ? A jak můžu poslat echo někam třeba v proměnné z class do indexu ?

 
Nahoru Odpovědět
8.10.2018 14:21
Avatar
Odpovídá na Jan Václavík
Martin Konečný (pavelco1998):11.10.2018 14:43

Ahoj, používej prosím tlačítko "Odpovědět", jinak člověku nepřijde upozornění :D

V první řadě je potřeba si uvědomit, o co v OOP jde. V OOP se zjednodušeně řečeno snažíš napodobit reálný svět, tedy kód by měl vypadat tak, aby dával logicky smysl. Ve tvém případě, kdy třída Post přidává nový příspěvek, je otázkou, zda:

  1. Post představuje nějaký konkrétní příspěvek - a tedy příspěvek přidává sám sebe, což nedává smysl
  2. Post představuje nějakého "správce" příspěvků - a tedy zde nemají smysl ty atributy, protože ty se vztahují až ke konkrétnímu příspěvku

Tedy máš dvě možnosti - buď mít možnost b) s tím, že vyhodíš ty atributy a informace o novém příspěvku budeš předávat parametrem metodě addPost(). Třída Post bude představovat nějakého "správce" příspěvků, který příspěvky umí přidávat (což je logicky OK), a tedy má v sobě instanci databázového připojení (předáš konstruktorem, až se podíváš na PDO - to je taky logicky OK).

Nebo půjdeš bodem a), ale v takovém případě třída Post bude představovat nějaký konkrétní příspěvek - bude mít ty atributy, ale nebude mít metodu addPost() - protože aby příspěvek uměl přidat sám sebe (a nebo jiný příspěvek) je nesmysl. Tedy bude sloužit jako taková "obálka" nad daty (zapamatuj si slovo "entita", může se ti později hodit) a uděláš si ještě jednu třídu, třeba PostManager, který bude ty příspěvky umět přidávat (jako v možnosti výše).
A jelikož jsme v objektovém světě, je logicky správné, aby si ty objekty přes parametry předávaly jiné objekty. Tedy můžeš mít takovýto kód:

<?php

class PostManager
{

        private $pdo;

        public function __construct($pdo)
        {
                $this->pdo = $pdo;
        }


        public function addPost(Post $post)
        {
                $query = $this->pdo->prepare("INSERT INTO post (title, text, datetime) VALUES (?, ?, NOW())");
                $query->execute(array($post->getTitle(), $post->getText()));
        }

}

class Post
{

        private $title;
        private $text;

        public function __construct($title, $text)
        {
                $this->title = $title;
                $this->text = $text;
        }


        public function getTitle()
        {
                return $this->title;
        }


        public function getText()
        {
                return $this->text;
        }

}

// použití pak
$pdo = new PDO("DB login údaje");
$postManager = new PostManager($pdo);

$post = new Post("nadpis", "obsah");
$postManager->addPost($post);

Je ale samozřejmě možné nemít tuto třídu Post a parametrem metodě addPost() předávat ty proměnné $title, $text atd. To jen pro ukázku, jak to v OOP logicky funguje.

Co se týká toho kódu - v té třídě by nemělo být žádné echo, tedy místo něj něco vracej a nebo vyhoď výjimku. U výjimky je to zde složitější, protože u výjimky se zpráva ($message, předávána prvním parametrem) nepoužívá pro uživatele, ale pro programátory. Tedy neměly by být použity ve smyslu

throw new Exception("Pole 'nadpis' nebylo vyplněno");

Více o typech výjimek zde: https://www.youtube.com/watch?…

Jelikož se v tomto případě použití výjimek příliš nehodí a zároveň tam echo nemá co dělat, zbývá ti asi poslední možnost - "něco" vracet. A to "něco" může být právě třeba to pole chyb, resp. $error_messages. To stačí pouze potom otestovat, zda je nebo není prázdné

<?php

$errors = $postManager->addPost("nadpis", "obsah");

if (!empty($errors)) {
        echo "OK, povedlo se";
} else {
        echo "Byly zjištěny následující chyby: " . implode(",", $errors);
}

Obvykle ale nedává logicky příliš smysl, aby výsledek nějaké operace byl seznam chyb, ale zároveň ten seznam chceš znát, abys je mohl vypsat uživateli :D V tomto případě je to asi nejsnazší řešení, ale kdybys chtěl ještě "víc OOP", tak ta metoda může vracet objekt, který ti bude představovat výsledek nějaké validace.

<?php

class ValidationResult
{

        private $errors = array();

        public function setErrors(array $errors)
        {
                $this->errors = $errors;
        }


        public function getErrors()
        {
                return $this->errors;
        }


        public function isValid())
        {
                return empty($this->errors);
        }

}


// použití
$result = $postManager->addPost("nadpis", "obsah");

if ($result->isValid()) {
        echo "OK, povedlo se";
} else {
        echo "Byly zjištěny následující chyby: " . implode(",", $result->getErrors());
}

Jelikož patrně neděláš "nic velkého", volil bych možnost, která je logicky OK a zároveň není tolik pracná. Tedy bych na tvém místě šel způsobem b), který jsem popisoval výše, a to tak, že třída Post bude představovat "správce" příspěvků, které je bude umět přidávat - tedy nebude mít ty atributy, bude mít metodu addPost(), které v parametrech předáš $title, $content atd. A ta metoda ti bude vracet seznam chyb (tzn. return $error_messages). To se mi zdá jako nejlepší kompromis mezi "logicky OK" a jednoduchostí.

Jen taková drobnost - zvykem je psát proměnné notací camel case, tedy ne $error_messages, ale $errorMessages.

Nahoru Odpovědět
11.10.2018 14:43
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.