NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

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 naprogramujeme výpis uložených článků z databáze a seznam článků.

Chybová stránka

Pomocí editoru článků si vytvořme článek s URL chyba a uložme 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 – NERS - Databáze v PHP pro začátečníky

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>Honza<span>Bittner</span></h1><small>webdeveloper</small>
        </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>
        <header>
            <h1><?= htmlspecialchars($clanek['titulek']) ?></h1>
        </header>

        <section>
            <?= $clanek['obsah'] ?>
        </section>
    </article>

    <footer>
        Vytvořil &copy; HoBi 2023 pro <a href="https://itnetwork.cz">itnetwork.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. Zatím je proměnná neexistující.

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('Chybový článek nebyl nalezen.');
}
?>

Kód je extrémně jednoduchý. Po připojení k databázi se podíváme do superglobálního pole GET, 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 - Databáze v PHP pro začátečníky

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>Honza<span>Bittner</span></h1><small>webdeveloper</small>
        </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>
        <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>
    </article>

    <footer>
        Vytvořil &copy; HoBi 2023 pro <a href="https://itnetwork.cz">itnetwork.cz</a> | <a href="administrace.php">Administrace</a>
    </footer>
</body>
</html>

Pracujeme zde s proměnnou $clanky, ve které budou 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 superpoli GET parametr odstranit a je přihlášený administrátor, vymažeme článek s ID, které nám přišlo v poli GET. 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 - Databáze v PHP pro začátečníky

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 :) Změnil bych třeba ještě styl odkazu v patičce, ať se dá rozpoznat, že se jedná o odkaz a dále třeba nechtěného volného místa nahoře (kde chybí hlavička) při editování článků, styl pro tlačítka, formulář,... Úpravy jsou už na vás :)

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í.

V následujícím kvízu, Kvíz - Základy práce s databází v PHP, si vyzkoušíme nabyté zkušenosti z kurzu.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

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

Staženo 3868x (3.39 MB)
Aplikace je včetně zdrojových kódů v jazyce PHP

 

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
Přeskočit článek
(nedoporučujeme)
Kvíz - Základy práce s databází v PHP
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
121 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti 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