NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Zobrazovanie článku

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Patrik Strišovský:16.7.2017 2:34

Zdravím, nedávno som si vytvoril web a pridal som si tam administráciu rzp. editor článkov podľa tutorialu Databáze v PHP pro začátečníky a všetko mi ide akurát keď pridám viac článkov tak mi zobrazí len jeden a to ten s url uvod a neviem ako spraviť aby mi vypísalo na web všetky články, máte nejaké návrhy ako to spraviť.. za odpoveď vopred ďakujem.
Tu je kód

<?php

require('Db.php');
Db::connect('', '', '', '');

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

?>
html časť
      <article>
      <header>
      <h4><?= htmlspecialchars($clanek['titulek']) ?></h4>
      </header>
      <section>
       <?= $clanek['obsah'] ?>
      </section>
      <div class="cistic"></div>
      </article>
Odpovědět
16.7.2017 2:34
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Odpovídá na Patrik Strišovský
Michal Štěpánek:16.7.2017 10:22

Když budeš mít v tom dotazu podmínku

$clanek = Db::queryOne('
        SELECT *
        FROM clanky
        WHERE url=?
', $url);

která ti výsledek dotazu omezí jen na ten článek s "tím" URL, tak se ti jiné články zobrazit nemohou.

Nahoru Odpovědět
16.7.2017 10:22
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Patrik Strišovský:16.7.2017 13:03

Aha takže stačí keď tu podmienku zmažem takto ako to mám tu ? lebo keď som to skúsil takto tak sa mi žiadny článok nezobrazil.. vedel by si mi poradiť ako to správne zapísať.. za odpoveď ďakujem

<?php

require('Db.php');
Db::connect('', '', '', '');

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

?>
Nahoru Odpovědět
16.7.2017 13:03
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Odpovídá na Patrik Strišovský
Michal Štěpánek:16.7.2017 13:26

Podmínka je jen to

WHERE url =?
Nahoru Odpovědět
16.7.2017 13:26
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Patrik Strišovský:16.7.2017 20:11

aha no ale keď odstránim "WHERE url=?" tak mi to zas vypíše že chybový článok nebol nájdený.. nemohol by si mi to prosím napísať presne ten kód ako na to fakt si neviem s tým rady..
momentálne to mám takto

<?php

require('Db.php');
Db::connect('', '', '', '');

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

$clanek = Db::queryOne('
        SELECT *
        FROM clanky
', $url);
if (!$clanek)
{
        if ($url != 'chyba')
        {
                header('Location: index.php?clanek=chyba');
                exit();
        }
        else
                die('Nebyl nalezen chybovy clanek');
}

?>
Nahoru Odpovědět
16.7.2017 20:11
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Lukáš Hornych
Tvůrce
Avatar
Odpovídá na Patrik Strišovský
Lukáš Hornych:16.7.2017 22:09

Pokud sis projel celý seriál jak píšeš, určitě si narazil na článek, který je věnovaný právě výpisu článků -> https://www.itnetwork.cz/…php-tutorial

Editováno 16.7.2017 22:09
 
Nahoru Odpovědět
16.7.2017 22:09
Avatar
Odpovídá na Lukáš Hornych
Patrik Strišovský:16.7.2017 22:47

No na tento som narazil ale neviem ako spraviť aby sa mi vypisovali všetky články a to som už toho skúsil dosť veľa fakt neviem čo mám spraviť aby mi to šlo.. skúsil som ešte niečo také ale to tiež nejde..

$clanky = Db::queryAll('
        SELECT *
        FROM clanky
        ORDER BY clanky_id DESC
');
?>
HTML
<article>
                                <header>
                                        <h1><?= htmlspecialchars($clanek['titulek']) ?></h1>
                                </header>

                                <section>
                                        <?= $clanek['obsah'] ?>
                                </section>
                                <div class="cistic"></div>
                </article>
Nahoru Odpovědět
16.7.2017 22:47
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Lukáš Hornych
Tvůrce
Avatar
Odpovídá na Patrik Strišovský
Lukáš Hornych:16.7.2017 22:53

Když si ten článek projdeš ještě jednou, tak zjistíš, že na výpis všech článků potřebuješ použít funkci foreach, která ti projde pole se všemi články a každý zvlášť vypíše. Navíc v tomto kódu ani nepracuješ s tou příslušnou proměnou clanky.

 
Nahoru Odpovědět
16.7.2017 22:53
Avatar
Odpovídá na Lukáš Hornych
Patrik Strišovský:16.7.2017 23:20

Tak už som to viac menej vyriešil už sa mi vypisujú všetky články, ale problém je v tom že sú v jednom bloku respektíve chcem aby každý mal svoj rám "section" aj aby mali svoj titul..

<article>
      <header>
 <?php
                                        foreach ( $clanky as $clanek ) {
echo ''.$clanek['titulek'];
}
                                ?>
      </header>
      <section>
<?php
                                        foreach ( $clanky as $clanek ) {
echo ''.$clanek['obsah'];
}
                                ?>
      </section>
      <div class="cistic"></div>
      </article>
Nahoru Odpovědět
16.7.2017 23:20
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Patrik Strišovský:16.7.2017 23:56

Teda chcem aby sa každý vypísal tak ako si písal ty "zvlášť " a nie takto ako na screene..

Nahoru Odpovědět
16.7.2017 23:56
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Patrik Strišovský
Jan Lupčík:17.7.2017 10:34

Tak uprav ten předchozí kód, ne? :)

<?php foreach ($clanky as $clanek) : ?>
        <article>
                <header><?= $clanek['titulek'] ?></header>
                <section><?= $clanek['obsah'] ?></section>
                <div class="cistic"></div>
        </article>
<?php endforeach ?>
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
17.7.2017 10:34
TruckersMP vývojář
Avatar
Odpovídá na Jan Lupčík
Patrik Strišovský:17.7.2017 15:23

Okej tak už mi to ide ako som chcel veľmi pekne ti ďakujem :)

Nahoru Odpovědět
17.7.2017 15:23
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Patrik Strišovský
Jan Lupčík:17.7.2017 15:28

Není zač, snad všemu rozumíš. :)

Nahoru Odpovědět
17.7.2017 15:28
TruckersMP vývojář
Avatar
Odpovídá na Jan Lupčík
Patrik Strišovský:18.7.2017 1:20

No dá sa povedať že áno, a ešte mám jednu otázku ako spravím že mi bude ukazovať autora článku, za odpoveď ďakujem.

Nahoru Odpovědět
18.7.2017 1:20
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
dez1nd
Člen
Avatar
Odpovídá na Patrik Strišovský
dez1nd:18.7.2017 6:55

Pokud je autor součástí článku stejně jako titulek a obsah článku tak jednoduše

<?= $clanek['autor'] ?>
Editováno 18.7.2017 6:56
 
Nahoru Odpovědět
18.7.2017 6:55
Avatar
Odpovídá na dez1nd
Patrik Strišovský:18.7.2017 16:32

Ďakujem veľmi mi to pomohlo keďže som začiatočník v php tak neviem čo a ako, a ešte by som mal takú otázku že ako spravím aby sa autor nemusel podpisovať ale že by to automatiky vložilo autora podľa toho aký má nick.. za odpoveď ďakujem :)

Nahoru Odpovědět
18.7.2017 16:32
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Patrik Strišovský:18.7.2017 18:46

Tak už som to vyriešil a to tak že som danému riadku nastavil vlastnosť "hidden" a do value som napísal

<input type="hidden" name="autor" value="<?= htmlspecialchars($_SESSION['uzivatel_jmeno']) ?><?= htmlspecialchars($clanek['autor']) ?>" /><br />
Nahoru Odpovědět
18.7.2017 18:46
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
jakubho
Člen
Avatar
Odpovídá na Patrik Strišovský
jakubho:26.7.2017 19:14

Nevím, jak máš postavený zbytek webu, ale nedávno jsem řešil také systém článků a vyřešil jsem to způsobem, že mám databázi, ve které je titulek, článek samotný, bla bla bla a mimo jiné se tam uloží také jméno přihlášeného autora, který ten článek uložil (ten tahám ze SESSION, autor se musí přihlásit).

Jak vidím nahoře, tak to máš přes skrytý input, což mi nepřipadá úplně ideální... Určitě tam máš nějaký kód, který vezme vstup z inputů a uloží jej do do databáze, něco jako:

INSERT INTO tvojedatabáze (obsah, autor, datum) VALUES (?, ?, ?)

S tím, že obsah těch otazníků taháš z toho formuláře na webu pomocí něčeho jako $_POST["obsah"]. Pokud máš ale uživatele přihlášeného (což evidentně asi máš), nemusíš používat jen proměnné POST a GET, ale také můžeš otazník dosadit ze session, něco jako $_SESSION["user_na­me"]

Tvůj postup není ideální z toho důvodu, že i skryté inputy lze ve vývojářských nástrojích zobrazit a upravovat, a dalo by se to zneužít, prostě to není dobrá metoda, co jsem zatím tak pochytil. Ale nejsem žádný dobrý programátor, tak mě když tak někdo opravte, jestli se pletu.

Nahoru Odpovědět
26.7.2017 19:14
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Patrik Strišovský:2.8.2017 3:24

Zdravím, za tvou odpověď děkuji a máš tedy pravdu že to není ideální způsob jsem si to sám zkusil přepsat jméno v vývojářských nástrojích a fakt se to dá zneužít a třeba nevím jak bych to vyřešil jak si psal že to máš udělané ty, ale zatím mi to stačí mám to jen tak pro zábavu a také jsem začátečník v php takže nevím co a jak dělat nejlépe a za upozornění určitě děkuji.

Nahoru Odpovědět
2.8.2017 3:24
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
jakubho
Člen
Avatar
Odpovídá na Patrik Strišovský
jakubho:2.8.2017 15:18

Nemáš zač :) Možná by jsi měl zkusit to opravit, chápu že ti to přijde ze začátku složité, ale to opravdu není. Prostě do toho SQL dotazu vlož proměnnou rovnou ze SESSION a zbytečně ji nescpi do POST nebo GET. Kdyby sis nevěděl rady sám a se strejdou Googlem, tak napiš a podíváme se na to ;-)

Nahoru Odpovědět
2.8.2017 15:18
Chyba-Jediná jistota v životě programátora.
Avatar
Odpovídá na jakubho
Patrik Strišovský:8.8.2017 3:53

No jako teď jsem dlouho nepracoval s php, takže jsem se v tom nějak ztratil, a nevím, jak by to mělo zhruba vypadat, co píšeš, když budeš tak hodný tak vlož zde kod, jak to má alespoň přibližně vypadat, za odpověď děkuji.

Nahoru Odpovědět
8.8.2017 3:53
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Odpovídá na jakubho
Patrik Strišovský:24.8.2017 3:46

Zdravím, už jsem to vyřešil, ani jsem nevěděl, že je to také snadné, stačilo přepsat z kodu

$_POST['titulek']
na
$_SESSION['uzivatel_jmeno']

a všechno jde tak, jak jsem chtěl, a děkuji moc za varování. :)

Nahoru Odpovědět
24.8.2017 3:46
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
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 22 zpráv z 22.