| 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 112Toto 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:
„ globalTakto 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: 9 let
|
|||
0