Autor | Zpráva | ||
---|---|---|---|
Kos112567 Profil |
Ahoj,
předem se omlouvám, že ještě otravuji. Nicméně narazil jsem zase na chybu a úplně nevím co s tím... Mám tuto stránku - index.php <?php session_start(); require('Db.php'); require('paginace.php'); $spojeni = Db::connect('127.0.0.1', 'sokolmilicincz1', 'root', ''); //pripojeni k db if (isset($_GET['clanek'])) //zobrazeni clanku $url = $_GET['clanek']; else $url = 'uvod'; $clanek = Db::queryOne(' SELECT * FROM clanky WHERE url=? ', $url); if (!$clanek) //pokud se nenalezne clanek, tak 404 { if ($url != 'chyba') { header('Location: index.php?clanek=chyba.php'); exit(); } else //pokud se ani 404 nenalezne die('Nebyl nalezen chybovy clanek'); } if (isset($_GET['odhlasit'])) //odhlaseni ze stranky { session_destroy(); header('Location: index.php'); exit(); } function zabezpec($retezec) { return Db::quote($retezec); } ?> <!--Oznámení o webové stránce--> <!DOCTYPE html> <html lang="cs-cz"> <!--Připojené styly a javascripty--> <head> <meta charset="utf-8" /> <meta name="description" content="<?= htmlspecialchars($clanek['popisek']) ?>" /> <meta name="keywords" content="<?= htmlspecialchars($clanek['klicova_slova']) ?>" /> <link href="styl.css" rel="stylesheet" type="text/css"> <link href="style_blue.css" rel="alternate stylesheet" type="text/css" title="alternate"> <link rel=stylesheet href="print.css" media="print"> <title><?= htmlspecialchars($clanek['titulek']) ?></title> <script src="js/checkform.js"></script> <script src="js/changeCSS.js" type="text/javascript"></script> </head> <body> <header> <div id="logo"><img src="obrazky/sokolMale.png" alt="logo"></div> <!-- Navigační menu--> <nav> <ul> <li class="aktivni"><a href="index.php">Domů</a></li> <li><a href="sport.php">Sport</a></li> <li><a href="kultura.php">Kultura</a></li> <li><a href="fotogalerie.php">Fotogalerie</a></li> <li><a href="dokumenty.php">Dokumenty</a></li> <li><a href="historie.php">Historie</a></li> <!-- Bud se zobrazí tlačítko nebo jmeno uzivatele--> <?php if (!isset($_SESSION['id'])) { echo '<li class="login"><a href="prihlaseni.php">Přihlášení</a></li>'; } else { echo '<li class="login"><a href="index.php?odhlasit">Odhlásit</a></li>'; echo '<li class="login"><a>'.htmlspecialchars($_SESSION['uzivatel_jmeno']).'</a></li>'; } ?> </ul> </nav> </header> <!-- Zajištuje vycentrování articlu--> <div id="centrovac"> <article> <header> <!-- Nadpis se zjištuje podle aktualního článku--> <h1><?= htmlspecialchars($clanek['titulek']) ?></h1> </header> <section> <h2><?= htmlspecialchars($clanek['titulek']) ?></h2> <!-- Výpis článku, který se bere z databáze--> <?= $clanek['obsah'] ?> </section> <div class="cistic"></div> </article> </div> <!-- Nastavení pro komentářové prvky--> <div id="komentare"> <?php function vratKomentare($strana, $naStranu){ //vrací komentáře na základě aktuální stránky a počtu komentářů na stranu return Db::queryAll('SELECT autor, datumvlozeni, obsah FROM nkniha WHERE id_clanku_FK=? ORDER BY id DESC LIMIT ?, ?', $clanek['clanky_id'] ($strana - 1) * $naStranu, $naStranu); } function vratPocetKomentaru(){ //vrací celkový počet komentářů return Db::queryOne('SELECT COUNT(*) FROM nkniha'); } if (isset($_GET['strana'])) $strana = $_GET['strana']; else $strana = 1; $naStranu = 15; $komentare = vratKomentare($strana, $naStranu); $stran = ceil(vratPocetKomentaru() / $naStranu); ?> <?php if (!isset($_SESSION['id'])) { echo 'Pro komentování článků se prosím <a href="prihlaseni.php">přihlašte</a>'; } else { echo '<form action="zpracovani.php" method="post" name="formular"> Vaše jméno: ';echo $clanek['clanky_id']; echo htmlspecialchars($_SESSION['uzivatel_jmeno']).'<br> <input type=hidden name="autor" value='. htmlspecialchars($_SESSION['uzivatel_jmeno']).' ><br>'; echo 'Váš vzkaz:<br> <textarea name="obsah" rows="7" cols="50" wrap="soft" required></textarea><br> <input type="submit" value="Odeslat"> <input type=hidden name="clanky_id" value='. htmlspecialchars($clanek['clanky_id']). ' ><br>'; '</form>'; } foreach ($komentare as $komentar) { echo '<p><b>Autor: </b>'. $komentar['autor']; echo ' Datum: '. date('j.n. Y', strtotime ($komentar['datumvlozeni'])); echo '<p><b>Text: </b>'. $komentar['obsah']; } ?> </div> <footer> <!--Volání skriptu chooseStyle(s platnosti na 9999 dní)--> <a href="javascript:chooseStyle('none', 9999)">Červený styl</a> <a href="javascript:chooseStyle('alternate', 9999)">Modrý styl</a> <a href="prihlaseni.php">Administrace</a> </footer> </body> </html> A v sekci komentářové prvky si úplně nevím rady s těmito věcmi - a) IDE mi vynadává, že nezná proměnnou $clanek, který ale přitom vytvářím hned na začátku (a poté s ní pracuji úplně v pořádku). b) vyhazuje mi to tuto chybu: vratKomentare(1, 15) #1 {main} thrown in... (což možná bude souviset s tou první) Ještě k tomu mám takový připojený soubor paginace.php Který vypadá takto: <?php function urlStrany($url, $strana) //vraci url s aktualnim strankovanim { return str_replace('{strana}', $strana, $url); } function paginace($strana, $stran, $url) //vygeneruje kód navigační lišty a to podle aktuální stranky a počtu stránek { $polomer = 5; // Poloměr oblasti kolem aktuální stránky(kolik jich chceme ukazovat) $html = '<nav class="centrovany"><ul class="paginace">'; // Šipka vlevo if ($strana > 1) $html .= '<li><a href="' . urlStrany($url, $strana - 1) . '">«</a></li>'; else $html .= '<li class="neaktivni">«</li>'; $left = $strana - $polomer >= 1 ? $strana - $polomer : 1; $right = $strana + $polomer <= $stran ? $strana + $polomer : $stran; // Umístění jedničky if ($left > 1) $html .= '<li><a href="' . urlStrany($url, 1) . '">1</a></li>'; // Tečky vlevo if ($left > 2) $html .= '<li class="neaktivni">…</li>'; // Stránky v radiusu for ($i = $left; $i <= $right; $i++) { if ($i == $strana) // Aktivní stránka $html .= '<li class="aktivni">' . $i . '</li>'; else $html .= '<li><a href="' . urlStrany($url, $i) . '">' . $i . '</a></li>'; } // Tečky vpravo if ($right < $stran - 1) $html .= '<li class="neaktivni">' . '…' . '</li>'; // Umístění poslední stránky if ($right < $stran) $html .= '<li><a href="' . urlStrany($url, $stran) . '">' . $stran . '</a></li>'; // Šipka vpravo if ($strana < $stran) $html .= '<li><a href="' . urlStrany($url, $strana + 1) . '">»</a></li>'; else $html .= '<li class="neaktivni">«</li>'; $html .= '</ul></nav>'; return $html; } A co je mým cílem? Abych pod články měl sekci komentáře, které se budou stránkovat</br>a co je mým cílem? abych pod články měl sekci komentáře, které se budou stránkovany |
||
Lonanek Profil |
Kos112567:
„a) IDE mi vynadává, že nezná proměnnou $clanek, který ale přitom vytvářím hned na začátku (a poté s ní pracuji úplně v pořádku).“ možná to bude tím, že nemáte oddělené parametry v dotazu, chybí tam čárka mezi $clanek['clanky_id'], ($strana - 1) * $naStranu function vratKomentare($strana, $naStranu){ //vrací komentáře na základě aktuální stránky a počtu komentářů na stranu return Db::queryAll('SELECT autor, datumvlozeni, obsah FROM nkniha WHERE id_clanku_FK=? ORDER BY id DESC LIMIT ?, ?', $clanek['clanky_id'], ($strana - 1) * $naStranu, $naStranu); } |
||
Kos112567 Profil |
#3 · Zasláno: 31. 1. 2017, 18:42:32
To jsem teď opravil a bohužel stále mi to píše, že nezná tu proměnnou
|
||
Lonanek Profil |
#4 · Zasláno: 31. 1. 2017, 18:51:01
Na kterém konkrétním řádku je chyba?
|
||
Kos112567 Profil |
Notice: Undefined variable: clanek in C:\xampp\htdocs\web\index.php on line 100 Fatal error: Uncaught Error: Unsupported operand types in C:\xampp\htdocs\web\index.php:112 Stack trace: #0 {main} thrown in C:\xampp\htdocs\zwa - project\index.php on line 112 Toto mi to píše na webu - řádek 100 je tento return Db::queryAll('SELECT autor, datumvlozeni, obsah FROM nkniha WHERE id_clanku_FK=? ORDER BY id DESC LIMIT ?, ?', $clanek['clanky_id'], ($strana - 1) * $naStranu, $naStranu); A řádek 112 tento $stran = ceil(vratPocetKomentaru() / $naStranu); //celkovy pocet, zaokrouhlíme nahoru, pokud je to např. 1,5 strany (ceil) |
||
Lonanek Profil |
#6 · Zasláno: 31. 1. 2017, 18:57:17
Funkce vratKomentare $clanek[] nezná, protože jej této funkci nepředáváte.
|
||
juriad_ Profil * |
#7 · Zasláno: 31. 1. 2017, 18:59:28
řádek 110: Ve funkci se můžeš odkazovat jen na proměnné, které jí předáš jako parametry (a globální proměnné). Proměnná článek z toho důvodu není uvnitř funkce
vratKomentare dostupná.
řádek 112: Nejspíš funkce vratPocetKomentaru vrací něco jiného než číslo. Vypiš si co vrací pomocí var_dump; nejspíš to bude pole.
|
||
Kos112567 Profil |
#8 · Zasláno: 31. 1. 2017, 19:07:29
řádek 110: aha, a jakým způsobem jí můžu tu funkci předat?
řádek 112: máš pravdu, vrací mi to toto - array(1) { ["COUNT(*)"]=> int(20) } |
||
Lonanek Profil |
#9 · Zasláno: 31. 1. 2017, 19:19:53
Kos112567:
„aha, a jakým způsobem jí můžu tu funkci předat?“ buď jako parametr, nebo ve funkci global
|
||
Keeehi Profil |
#10 · Zasláno: 31. 1. 2017, 19:23:14
Lonanek:
„ global Takto je to správně. Slovo global můžeš zapomenout a nikdy jsi o něm neslyšel ;) |
||
Kos112567 Profil |
#11 · Zasláno: 31. 1. 2017, 19:30:00
Teď tedy nevím, jestli tam mám dát ten apresand nebo ne...?
function vratKomentare($strana, $naStranu, &$clanek) - takto? |
||
Keeehi Profil |
#12 · Zasláno: 31. 1. 2017, 19:31:41
Kos112567:
Ampersand není třeba. Spíš by mohl způsobit problémy než cokoli jiného. |
||
Kos112567 Profil |
#13 · Zasláno: 31. 1. 2017, 19:31:51
Ok, takže už to funguje :)
Ještě nevím co mám dělat s tím polem... |
||
Keeehi Profil |
#14 · Zasláno: 31. 1. 2017, 19:38:37
Tohle by mohlo fungovat (záleží na verzi PHP)
function vratPocetKomentaru(){ //vrací celkový počet komentářů return Db::queryOne('SELECT COUNT(*) AS pocet FROM nkniha')['pocet']; } |
||
Kos112567 Profil |
#15 · Zasláno: 31. 1. 2017, 19:47:35
Ano, už je to v pořádku a žádná chyba nevyskakuje, nicméně pořád to nefunguje tak jak má nevidíte tam ještě nějakou chybu?
Vůbec mi to nestránkuje - pouze jsou tam čísla, které se dají přepínat, ale příspěvky jsou tam pořád všechny viditelné... |
||
Kos112567 Profil |
#16 · Zasláno: 31. 1. 2017, 21:02:34
Už to funguje, měl jsem tam jenom takovou blbou chybu :)
|
||
Časová prodleva: 6 let
|
0