Hledáme fulltime PHP programátora do ITnetwork týmu - 100% homeoffice, 100% časově flexibilní #bezdeadlinu Mám zájem!
Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij slevové akce 50% výuky zdarma!
Discount week 50

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ženo 3130x (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
Jak se ti líbí článek?
40 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 (9)

 

 

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

Avatar
Tomáš Pilný:5.12.2019 14:35

Jak si výsledek prohlédnu, nebo připojím na web

 
Odpovědět
5.12.2019 14:35
Avatar
Matěj Přerovský:18.1.2020 20:55

Ahoj,
mám problém. V tabulce clanky mám úroveň autor_id. Do ní zapíšu při odeslání článku autora. Chci ale udělat, že když uživatel je admin 1, tak může mazat a upravovat pouze své články. Mám ještě jednu úroveň, admin 2. Ta může mazat či editovat cokoli od jakéhokoli autora. To mi funguje.

Problém je v tom, že mi nefunguje podmínka

if(($_SESSION['uzivatel_admin'] != 2) || ($_SESSION['uzivatel_id'] != $autor_id))

.
Celé php

<?php
session_start();
require('Db.php');
Db::connect('xxx', 'xxx', 'xxx', xxx');

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

else
        $url = '404';
$clanek = Db::queryOne('
        SELECT *
        FROM clanky
        WHERE url=?
', $url);
$autor_id=$clanek['autor_id'];
if (isset($_GET['odstranit']))
{
    if(($_SESSION['uzivatel_admin'] != 2) || ($_SESSION['uzivatel_id'] != $autor_id)){
        die("$autor_id");

    }
    else{
        Db::query('
                DELETE FROM clanky
                WHERE clanky_id=?
        ', $_GET['odstranit']);
        header('Location: clanky.php');
        exit();
    }
}
if (!$clanek)
{
        if ($url != 'chyba')
        {
                header('Location: clanek.php?clanek=404');
                exit();
        }
        else
                die('Nebyl nalezen chybovy clanek');
}

?>

Díky moc za všechny odpovědi, M :)

Odpovědět
18.1.2020 20:55
42
Avatar
Odpovídá na Matěj Přerovský
Matěj Přerovský:18.1.2020 21:03

Vlastně mně to vypíše kdo vytvořil článek 404

Odpovědět
18.1.2020 21:03
42
Avatar
Jaroslav Strmiska:19.6.2020 18:30

Kladně hodnotím zde uváděné kurzy, ale chybí jim jedna podstatná věc, výuka tiskových výstupů. Bez tiskových výstupů je využitelnost zde vytvořených aplikací poloviční.

 
Odpovědět
19.6.2020 18:30
Avatar
Ivory
Člen
Avatar
Ivory:28.7.2020 13:49

Ahoj, děkuji za velmi přínosný tutoriál.

 
Odpovědět
28.7.2020 13:49
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Petr Albrecht:4.9.2020 11:37

Děkuji za kurz.

Odpovědět
4.9.2020 11:37
Nikdy neříkej, že něco nejde, protože může přijít nějaký blbec, který neví, že to nejde a udělá to.
Avatar
Michal Dolíhal:28.10.2020 10:38

Ahoj, chci se zeptat, kde je lekce pro Db.php

 
Odpovědět
28.10.2020 10:38
Avatar
Petr Kudrnovský:28.10.2020 16:49

Děkuji za kurz :) všechno bylo dobře a srozumitelně vysvětlené. Rozhodně budu ve studiu PHP pokračovat.

 
Odpovědět
28.10.2020 16:49
Avatar
Kristián Lörincz:27. ledna 20:32

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

 
Odpovědět
27. ledna 20:32
Avatar
Pavel Kubalík:10. února 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. února 13:59
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 113. Zobrazit vše