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
edhel
Člen
Avatar
edhel:17.1.2014 15:23

Ahojte, začínám a zápasím s PDO a dostal jsem do fáze, se kterou potřebuji poradit. (Snažil jsem se postupovat podle zdejších seriálů, ale vždycky se dostanu ze stavu "chápe" do stavu "tupě přepisuje".)
Mám v MySQL tabulce obsah stránek (adresu, název, obsah...) a nedaří se mi je vytáhnout do šablony pro stránku tak, jak bych chtěl. Tu jsou tři funkce ze třídy "db", které k tomu používám:

        private static function dotazStranka($sql, $parametry = array()){
                $dotaz = self::$spojeni->prepare($sql);
                $dotaz->execute($parametry);
                return $dotaz->fetch(PDO::FETCH_ASSOC);
        }

        public function nactiStranku()
        {
                $vysledek = self::dotazStranka("
                SELECT `url_eng`, `menu_eng`, `data_eng`
                FROM `pages`
                WHERE url_eng='presentation'
                ");
                return $vysledek;
        }

        public function prezvykejStranku()
        {
                $vypln = $this->nactiStranku();
/*              echo ('<h1>Titulek: ' . $vypln['menu_eng']);
                echo ($vypln['data_eng']);
                echo ('<p>Cesta sem: eng/' . $vypln['url_eng']); */
        }

Rád bych data z ní vytažená dostal do šablony stranka.php, kterou bych rád měl velice pěknou a přehlednou podobně jako v seriálu o MVC. Tedy něco takového:

<?php
$obsah = new db();
$obsah->nactiStranku();
$obsah->prezvykejStranku();
?>
<h1>Titulek: <?= $obsah['menu_eng'] ?></h1>...

Ale háže to chybovou hlášku "Cannot use object of type db as array". Můžete mi tedy někdo, prosím, poradit, jak to zařídit, aby se objektu typu db stalo pole, ze kterého můžu pohodlně tahat potřebná data? Dopředu díky.
P.S.: Okomentovaná část ve funkci prezvykejStranku po odkomentování potřebná data vypisujesprávně, ale mám pocit, že to není dobré řešení.

 
Odpovědět
17.1.2014 15:23
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na edhel
Petr Nymsa:17.1.2014 15:35

jelikož na objektu $obsah, který by se správně měl jmenovat například instanceDatabáze (zkráceně např. db) voláš sice metody kteér ti mají vrátit výsledek z DB ale nikam je neukládáš. Tj

$db = new db();
$data = $db->nactiStranku();

....
<h1>Titulek: <?= $data['menu_eng'] ?></h1>

Každopádně celá třída DB by šla napsat lépe, podívej se na zdejší tutoriály o PHP

Editováno 17.1.2014 15:37
Nahoru Odpovědět
17.1.2014 15:35
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
edhel
Člen
Avatar
Odpovídá na Petr Nymsa
edhel:17.1.2014 16:54

Aha, a já pořád hledal nějaké chyby v té funkci:) Díky moc, tak už se zase můžu hnout z místa.
Samozřejmě, celá třída a mnoho z mého kódu by šlo napsat lépe a pořád na něm dělám. Tohle je rozpracovaná verze někde uprostřed dotazu, doufám, že na konci to bude vypadat mnohem pěkněji.

 
Nahoru Odpovědět
17.1.2014 16:54
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 3 zpráv z 3.