Pouze tento týden sleva až 80 % na e-learning týkající se Javy. A zároveň využij akce až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme koordinátorku kurzů a programátora, 100% home office, 100% flexibilní. Prozkoumej aktuální pozice
discount week 30 - hiring

Lekce 7 - NERS - Výpis článků v PHP

V minulé lekci, NERS - Editor článků v PHP, jsme dokončili administrační stránku jednoduchého redakčního systému.

V dnešním PHP tutoriálu vytvoříme indexovou stránku, která bude zobrazovat články.

Chybová stránka

Pomocí editoru článků si vytvořte článek s URL chyba a uložte ho do databáze. Tento článek se zobrazí v případě, když se uživatel pokusí zobrazit článek, která neexistuje.

Článek pro chybu 404 v PHP

Výpis článku

Pro výpis jednotlivých článků vytvoříme soubor index.php, do kterého vložíme následující HTML blok:

<!DOCTYPE html>
<html lang="cs-cz">

    <head>
        <meta charset="utf-8" />
        <meta name="description" content="<?= htmlspecialchars($clanek['popisek']) ?>" />
        <meta name="keywords" content="<?= htmlspecialchars($clanek['klicova_slova']) ?>" />
        <link rel="shortcut icon" href="obrazky/ikona.ico" />
        <link rel="stylesheet" href="styl.css" type="text/css" />
        <title><?= htmlspecialchars($clanek['titulek']) ?></title>
    </head>

    <body>
        <header>
            <div id="logo"><h1>HoBi</h1></div>
            <nav>
                <ul>
                    <li><a href="index.php?clanek=uvod">Domů</a></li>
                    <li><a href="clanky.php">Články</a></li>
                    <li><a href="index.php?clanek=kontakt">Kontakt</a></li>
                </ul>
            </nav>
        </header>

        <article>
            <div id="centrovac">
                <header>
                    <h1><?= htmlspecialchars($clanek['titulek']) ?></h1>
                </header>

                <section>
                    <?= $clanek['obsah'] ?>
                </section>
                <div class="cistic"></div>
            </div>
        </article>

        <footer>
            Vytvořil &copy;HoBi 2013 pro <a href="http://devbook.cz">DEVBOOK.CZ</a>
            <a href="administrace.php">Administrace</a>
        </footer>
    </body>
</html>

V kódu opět používáme proměnnou $clanek. Tentokrát z ní vypisujeme data do HTML hlavičky a obsah článku do těla stránky.

Jako vždy stránku doplníme ještě obslužným PHP blokem, který vložíme nad HTML blok:

<?php

require('Db.php');
Db::connect('127.0.0.1', 'ners_db', 'root', '');

if (isset($_GET['clanek']))
    $url = $_GET['clanek'];
else
    $url = 'uvod';

$clanek = Db::queryOne('
    SELECT *
    FROM clanky
    WHERE url=?
', $url);
if (!$clanek)
{
    if ($url != 'chyba')
    {
        header('Location: index.php?clanek=chyba');
        exit();
    }
    else
        die('Nebyl nalezen chybovy clanek');
}

?>
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Kód je extrémně jednoduchý. Po připojení k databázi se podíváme do GETu, zda máme v adrese zadané url článku. Pokud ano, nastavíme proměnnou $url na tuto hodnotu. Pokud ne, nastavíme ji na úvodní stránku.

Podle URL se pokusíme načíst daný článek z databáze do proměnné $clanek. Pokud se to nepovedlo, přesměrujeme na článek s url chyba. Pokud nastala chyba na článku chyba (i to se může stát :) ), ukončíme běh aplikace s chybovou hláškou.

To je vše. Přejděme na index.php:

Zobrazení článku z databáze v PHP

Vidíme, že se článek načetl z databáze a vypadá stejně, jako jsme ho napsali v editoru.

Výpis seznamu článků

Kromě jednoho článku by měl náš systém umět vypsat i seznam všech článků v databázi, seřazených od nejnovějších po nejstarší. Pokud je přihlášený administrátor, měl by mít možnost články v seznamu editovat a mazat.

Vytvoříme soubor clanky.php s následujícím HTML blokem:

<!DOCTYPE html>
<html lang="cs-cz">

<head>
    <meta charset="utf-8" />
    <link rel="shortcut icon" href="obrazky/ikona.ico" />
    <link rel="stylesheet" href="styl.css" type="text/css" />
    <title>Seznam článků</title>
</head>

<body>
    <header>
        <div id="logo"><h1>HoBi</h1></div>
        <nav>
            <ul>
                <li><a href="index.php?clanek=uvod">Domů</a></li>
                <li><a href="clanky.php">Články</a></li>
                <li><a href="index.php?clanek=kontakt">Kontakt</a></li>
            </ul>
        </nav>
    </header>

    <article>
        <div id="centrovac">
            <header>
                <h1>Seznam článků</h1>
            </header>

            <section>
                <table>
                <?php
                    foreach ($clanky as $clanek)
                    {
                        echo('<tr><td><h2>
                                <a href="index.php?clanek=' . htmlspecialchars($clanek['url']) . '">
                                ' . htmlspecialchars($clanek['titulek']) . '</a>
                            </h2>' . htmlspecialchars($clanek['popisek']));
                            if (!empty($_SESSION['uzivatel_admin']))
                                echo(' <a href="editor.php?url=' . htmlspecialchars($clanek['url']) . '">Editovat</a>
                                       <a href="clanky.php?odstranit=' . htmlspecialchars($clanek['clanky_id']) . '">Odstranit</a>
                                ');
                        echo('</td></tr>');
                    }
                ?>
                </table>
            </section>
            <div class="cistic"></div>
        </div>
    </article>

    <footer>
        Vytvořil &copy;HoBi 2013 pro <a href="http://devbook.cz">DEVBOOK.CZ</a>
        <a href="administrace.php">Administrace</a>
    </footer>
    </body>
</html>

Pracujeme zde s proměnnou $clanky, ve které jsou uložené jednotlivé články z databáze. Ty vypíšeme pod sebe do tabulky a pokud je přihlášený administrátor, přidáme k nim i odkazy na vymazání a editaci. Editaci samozřejmě zajišťuje skript editor.php, vymazání provede skript clanky.php.

Nad HTML dodejme náš poslední PHP blok:

<?php
session_start();

require('Db.php');
Db::connect('127.0.0.1', 'ners_db', 'root', '');

if (isset($_GET['odstranit']) && !empty($_SESSION['uzivatel_admin']))
{
    Db::query('
        DELETE FROM clanky
        WHERE clanky_id=?
    ', $_GET['odstranit']);
    header('Location: clanky.php');
    exit();
}

$clanky = Db::queryAll('
    SELECT *
    FROM clanky
    ORDER BY clanky_id DESC
');

?>

Pokud je v GET parametr "odstranit" a je přihlášený administrátor, vymažeme článek s ID, které nám přišlo v GETu. Do proměnné $clanky načteme všechny články pomocí jednoduchého SQL dotazu.

Máme hotovo.

Seznam článků z databáze v PHP

Nyní můžete psát libovolné množství článků na svůj blog, web firmy, zápisník, zkrátka k čemu budete svůj systém používat :)

Ještě jednou zopakuji, že účelem tohoto kurzu bylo zejména prolomit ledy a umožnit vyzkoušet práci s databází úplně všem. Určitě se podívejte do sekce Objektově orientované programování v PHP, kde je krok za krokem vysvětleno jak se tvoří moderní informační systémy. Kompletní kód systému NERS je v příloze ke stažení.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 3450x (1.1 MB)

 

Předchozí článek
NERS - Editor článků v PHP
Všechny články v sekci
Databáze v PHP pro začátečníky
Článek pro vás napsal David Čápka
Avatar
Uživatelské hodnocení:
49 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 13 let. Má rád Nirvanu, sushi a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity

 

 

Komentáře
Zobrazit starší komentáře (111)

Avatar
Kristián Lörincz:27.1.2021 20:32

Ahoj, tutoriály na ITnetwork jsou prostě pecka. DÍKY!!!

 
Odpovědět
27.1.2021 20:32
Avatar
Pavel Kubalík:10.2.2021 13:59

Dobrý den
Tak jsem to absolvoval, a výsledek se mi líbí. Není to sice úplně to, co bych si představoval, ale je to zatím nejlepší, s čím jsem se setkal. Pochopitelně se těším na něco v OOP, už jsem asi ve třetině kurzu základů.
Zde jsem musel dodělat na navigační lištu volby registrace a přihlášení. Buď jsem nepozorně četl, nebo to byl záměr, nevím. Jestli to mělo přijít někam jinam, nebo jsem na něco zapomněl, tak se nechám poučit.
Pochopitelně se v tom budu stále probírat, ale mám vážné problémy s rozdělením času na všechny moje aktivity, tak nevím.
Děkuji PK

 
Odpovědět
10.2.2021 13:59
Avatar
Odpovídá na Pavel Kubalík
Dušan Kovářík:14.7.2021 22:02

Ahoj, tento kurz byl vytvořený s cílem, aby projekt NERS byl co nejjednodušší, takže přihlášení v navigaci skutečně není. V patičce stránky je odkaz na administraci, která nepřihlášeného uživatele ihned přesměruje na přihlášení. Je to trochu krkolomné, ale jednoduché a funkční.

 
Odpovědět
14.7.2021 22:02
Avatar
Dušan Kovářík:14.7.2021 22:14

Díky za skvělý seriál. Díky tomu, že zdrojové kódy nejsou dlouhé a není jich moc, se mi spousta věcí spojuje v hlavě už jen tím, když si je prohlížím a přemýšlím, co se v aplikaci děje. Až na pár detailů jsem všechno pobral. V rámci opakování se k projektu za nějaký čas vrátím (jakmile se naučím něco z OOP a další věci ohledně databází) a jsem zvědavý, zda a nakolik pro mě bude všechno ještě srozumitelnější. A teď už jdu na to OOP, na které se moc těším!

 
Odpovědět
14.7.2021 22:14
Avatar
Odpovídá na Dušan Kovářík
Pavel Kubalík:16.7.2021 15:00

Ahoj Dušane
Děkuji za reakci na můj příspěvek, příležitostně se k tomu vrátím.
Nyní již mám za sebou Redakční systém v MVC, kterému jsem s věnoval mnohem důkladněji,
Ještě jednou děkuji
Pavel

 
Odpovědět
16.7.2021 15:00
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Pavel Kubalík
Dušan Kovářík:16.7.2021 19:21

Ahoj Pavle,
wow, tak to jsi opravdu daleko - klobouk dolů! Mám radost, že jsi udělal takový pokrok - lidé jako ty jsou pro mě vzorem i motivací. Těším se, až toho také budu umět víc.
Přeju, ať se Ti daří!
Dušan

 
Odpovědět
16.7.2021 19:21
Avatar
Vincent
Člen
Avatar
Vincent:13.8.2021 23:55

Jako fakt super ale mám ze sebe špatný pocit, že jen kopíruju Váš kod...jsem trochu na pochybách jestli to v budoucnu celé dám, chci udělat celý kurz PHP

 
Odpovědět
13.8.2021 23:55
Avatar
Odpovídá na Vincent
Martin Libich:5.10.2021 15:05

Ahon Vincente, mám stejný pocit. Jistě by si to zasloužilo podrobnější popis alespoň částí/bloků kódů. V současné podobě je to jen stručný popis pod celým kódem. Chtělo by to vycucnout třeba 3,4,5,6 řádků kódu (v závislosti na složitosti) a popsat co se tam děje.

Odpovědět
5.10.2021 15:05
Pokud se ráno probudím, je vše v pořádku
Avatar
Jan Hnilica
Člen
Avatar
Jan Hnilica:24.11.2021 19:26

Ahoj, nerozumím jedné věci - Db je statická třída, má privátní proměnnou $connection, která je nastavená metodou connect. Ta metoda se volá hned v index.php, tak proč je potřeba se v každém skriptu znovu připojovat? Tak jak já to chápu je třída Db společná a dostupná pro všechny ostaní komponnety, není potřeba z ní vytvářet instance, takže po prvním připojení k databázi v index.php by mělo být připojeno, $connection nastaveno, a ostatní skripty už můžou jen psát dotazy...

 
Odpovědět
24.11.2021 19:26
Avatar
Michal Gros
Redaktor
Avatar
Michal Gros :10. ledna 22:03

Davide super kurz:)
děkuji

Odpovědět
10. ledna 22:03
Jestli jste dobří nahrnou na Vás spoustu práce. Jestli jste sakra dobří, tak se jí dokážete zbavit.
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 10 zpráv z 121. Zobrazit vše