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:
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 © 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
:
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 © 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:
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