Diskuze: Zobrazovanie článku
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 22 zpráv z 22.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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'];
?>
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');
}
?>
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
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>
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.
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>
Teda chcem aby sa každý vypísal tak ako si písal ty "zvlášť " a nie takto ako na screene..
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 ?>
Okej tak už mi to ide ako som chcel veľmi pekne ti ďakujem
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.
Pokud je autor součástí článku stejně jako titulek a obsah článku tak jednoduše
<?= $clanek['autor'] ?>
Ď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
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 />
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_name"]
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.
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.
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
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.
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í.
Zobrazeno 22 zpráv z 22.