IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

7. diel - Ners - Výpis článkov v PHP

V minulej lekcii, Ners - Editor článkov v PHP , sme dokončili editor článkov jednoduchého redakčného systému a vytvorili úvodnú stránku. V dnešnom PHP tutoriálu vytvoríme indexovú stránku, ktorá bude články zobrazovať.

Chybová stránka

Pomocou editora článkov si vytvorte článok s URL chyba a uložte ho do databázy. Tento článok sa zobrazí v prípade, keď sa používateľ pokúsi zobraziť článok, ktorá neexistuje.

Článok pre chybu 404 v PHP - Databázy v PHP pre začiatočníkov

Výpis článku

Pre výpis jednotlivých článkov vytvoríme súbor index.php, do ktorého vložíme nasledujúci 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óde opäť používame premennú $ clanek. Tentoraz z nej vypisujeme dáta do HTML hlavičky a obsah článku do tela stránky.

Ako vždy stránku doplníme ešte obslužným PHP blokom, ktorý 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');
}

?>

Kód je extrémne jednoduchý. Po pripojení k databáze sa pozrieme do GETu, či máme v adrese zadanej url článku. Ak áno, nastavíme premennú $ url na túto hodnotu. Ak nie, nastavíme ju na úvodnú stránku.

Podľa URL sa pokúsime načítať daný článok z databázy do premennej $ clanek. Ak sa to nepodarilo, presmerujeme na článok s url chyba. Ak nastala chyba na článku chyba (aj to sa môže stať :) ), Ukončíme beh aplikácie s chybovým hlásením.

To je všetko. Prejdime na index.php:

Zobrazenie článku z databázy v PHP - Databázy v PHP pre začiatočníkov

Vidíme, že sa článok načítal z databázy a vyzerá rovnako, ako sme ho napísali v editore.

Výpis zoznamu článkov

Okrem jedného článku by mal náš systém vedieť vypísať aj zoznam všetkých článkov v databáze, zoradených od najnovších po najstaršie. Ak je prihlásený administrátor, mal by mať možnosť články v zozname editovať a mazať.

Vytvoríme súbor clanky.php s nasledujúcim HTML blokom:

<!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 tu s premennou $ clanky, v ktorej sú uložené jednotlivé články z databázy. Tie vypíšeme pod seba do tabuľky a ak je prihlásený administrátor, pridáme k nim aj odkazy na vymazanie a editáciu. Editáciu samozrejme zabezpečuje skript editor.php, vymazanie vykoná skript clanky.php.

Nad HTML dodajme 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
');

?>

Pokiaľ je v GET parameter "odstrániť" a je prihlásený administrátor, vymažeme článok s ID, ktoré nám prišlo v GETu. Do premennej $ clanky načítame všetky články pomocou jednoduchého SQL dotazu.

Máme hotovo.

Zoznam článkov z databázy v PHP - Databázy v PHP pre začiatočníkov

Teraz môžete písať ľubovoľné množstvo článkov na svoj blog, web firmy, zápisník, skrátka k čomu budete svoj systém používať :)

Ešte raz zopakujem, že účelom tohto kurzu bolo najmä prelomiť ľady a umožniť vyskúšať prácu s databázou úplne všetkým. Určite sa pozrite do sekcie Objektovo orientované programovanie v PHP, kde je krok za krokom vysvetlené ako sa tvorí moderné informačné systémy. Kompletný kód systému Ners je v prílohe k stiahnutiu.

V nasledujúcom kvíze, Záverečný test - Základy práce s databázou v PHP, si vyskúšame nadobudnuté skúsenosti z kurzu.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 3870x (3.39 MB)

 

Predchádzajúci článok
Ners - Editor článkov v PHP
Všetky články v sekcii
Databázy v PHP pre začiatočníkov
Preskočiť článok
(neodporúčame)
Záverečný test - Základy práce s databázou v PHP
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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 sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity