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

PHP Databáze pro začátečníky NERS - Výpis článků v PHP American English version English version

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, NERS - Editor článků v PHP, jsme dokončili editor článků jednoduchého redakčního systému a vytvořili úvodní stránku. V dnešním PHP tutoriálu vytvoříme indexovou stránku, která bude články zobrazovat.

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');
}

?>

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ženo 2020x (1.1 MB)

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
30 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Miniatura
Předchozí článek
NERS - Editor článků v PHP
Miniatura
Všechny články v sekci
Databáze v PHP pro začátečníky
Aktivity (5)

 

 

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

Avatar
mkores.mk
Člen
Avatar
mkores.mk:25.1.2017 23:28

Ahoj,
mám takový problém ohledně diakritiky - už tu psal kolega přede mnou, že mu stačilo přepsat v souboru Dp.php kodovani z utf8 na cp1250. Nevím přesně, kde se to v tom souboru nachází - našel jsem pouze jeden řádek, kde je napsáno utf8, nicméně když ho přepíšu na cp1250, tak mi to stejně píše místo háčků a čárek nějaké patvary (jedná se konkrétně o řádek PDO::MYSQL_AT­TR_INIT_COMMAND => "SET NAMES cp1250"). Může mě prosím někdo navigovat?

A ještě na jednu věc bych se rád zeptal - šlo by nějakým způsobem vždy na stránce (například na index.php) vypsat všechny články, které mají jako url "uvod"? Mě se tam vždy teď napíše pouze jeden - ten první vytvořený.

Díky

 
Odpovědět 25.1.2017 23:28
Avatar
Odpovídá na mkores.mk
Filip (animátor/programator):1.4.2017 11:38

Asi ne URL je totiž unikátna adresa pre čokoľvek, ak máš viac článkov s jednou URL bere to ten najnovší ..

Odpovědět 1.4.2017 11:38
Nikdy sa nevzdávaj a choď si za svojim snom.......
Avatar
Lukáš Svoboda:28.10.2017 12:23

Ahoj,
nevíte někdo, jak nastavit, aby se ve výpisu článků zobrazily např. 4 poslední (nejnovější)?
Díky

 
Odpovědět 28.10.2017 12:23
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Lukáš Svoboda
David Čápka:28.10.2017 12:38

Ptáš se na úplný začátek práce s databázi, přečti si příslušný kurz - https://www.itnetwork.cz/mysql

Odpovědět  +1 28.10.2017 12:38
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Lukáš Svoboda:28.10.2017 18:27

Měl jsi pravdu.
Byl jsem líný to číst, ale už jsem to našel, a vypadá, že funguje

 
Odpovědět  -1 28.10.2017 18:27
Avatar
Stepan
Člen
Avatar
Stepan:18.12.2017 21:50

Ahoj, asi mám někde chybu - když dám adresu index.php, vždy mi hodí /index.php?cla­nek=chyba. Můžete mi prosím poradit kde mám chybu?

 
Odpovědět 18.12.2017 21:50
Avatar
paliko
Člen
Avatar
paliko:22. března 10:56

Ahoj,
snazim se vypsat url z databaze, ale do linku pred url se mi vlozi jete localhost.

foreach ($vypisObecne as $obecne2)
{
$link = $obecne2['obec­ne_url'];
echo "".$link."";
}

Nazev linku se vypise spravne, napr. www.google.com, ale kdyz na link kliknu presmeruje se to na localhost: http://localhost:8012/…w.google.com

Muzete mi poradit, jak to mam udelat nebo nastavit, aby se pred adresu nevkladal localhost.
Diky

 
Odpovědět 22. března 10:56
Avatar
IT Man
Redaktor
Avatar
Odpovídá na paliko
IT Man:22. března 11:00

Ahoj,

musíš vytvořit něco podobného, poté by to mělo fungovat. :)

echo "http://" . $link;
Odpovědět 22. března 11:00
Cokoliv a kdokoliv může jednou uspět.
Avatar
Jonáš Židek:20. dubna 16:29

Zdravím, jak prosím udělám to, že se mi na stránce zobrazí třeba 10 článků a na další zbytek? Předem děkuji.

 
Odpovědět 20. dubna 16:29
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jonáš Židek
David Čápka:20. dubna 21:06

Jak se pracuje s databází vysvětluje tento kurz - https://www.itnetwork.cz/mysql

Odpovědět 20. dubna 21:06
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
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 95. Zobrazit vše