Autor | Zpráva | ||
---|---|---|---|
Vilak Profil |
Zdarec borci. Zkouším dělat stránkování a mám s ním krapet problém. Jedu podle návodu: www.itnetwork.cz/php/ostatni/tutorial-dokonceni-paginace-strankovani-v-php
Vypisuje mi to tuto chybu: Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\esport\counter-strike-global-offensive.php on line 76 A neukazuje se mi stránkování. paginace.php: <?php function url_page($url, $page) { return str_replace('{page}', $page, $url); } function paginace($page, $pages, $url) { $radius = 3; $html = "<nav class='p_centered'><ul class='p_paginace'>"; //left arrow if ($page > 1) { $html .= "<li><a href='".url_page($url, $page - 1)."'>«</a></li>"; } else { $html .= "<li class='p_no_active'>«</li>"; $left = $page - $radius >= 1 ? $page - $radius : 1; $right = $page + $radius <= $pages ? $page + $radius : $pages; } if ($left > 1) { $html .= "<li><a href='". url_page($url, 1)."'>1</a></li>"; } if ($left > 2) { $html .="<li class='p_no_active'>…</li>"; } for ($i = $left; $i <= $right; $i++) { if ($i == $page) { $html .= "<li class'p_active'>".$i."</li>"; } else { $html .= "<li><a href='".url_page($url, $i)."'>".$i."</a></li>"; } } if ($right < $pages - 1) { $html .= "<li class='p_no_active'>…</li>"; } if ($page < $pages) { $html .= "<li><a href='".url_page($url, $pages)."'>".$pages."</a></li>"; } if ($page < $pages) { $html .= "<li><a href='".url_page($url, $page + 1)."'>»</a></li>"; } else { $html .= "<li class='p_no_active'>«</li>"; } $html .= "<ul></nav>"; return $html; } ?> counter-strike-global-offensive.php: <!-- tělo stránky --> <div id="content"> <?php $stmt = $conn->prepare("SELECT * FROM `articles`"); $stmt->execute(); $count = $stmt->rowCount(); if (isset($_GET['strana'])) { $page = $_GET['strana']; } else { $page = 1; } include "include/scripts/paginace.php"; function articles($page, $topage) { $page1 = ($page)*$topage; return mysql_query("SELECT * FROM `articles` ORDER BY `date` DESC LIMIT $page1, $topage"); } $topage = 5; var_dump($page, $topage); $articles = articles($page, $topage); var_dump($articles); $pages = ceil($count/$topage); //výpis foreach ($articles as $article) { // ŘÁDEK 76!!!!!!!!!!!!!!!!!!!!! echo $article['id']."<br>"; echo $article['game']."<br>"; echo $article['headline']."<br>"; echo $article['text']."<br>"; echo $article['author']."<br>"; echo $article['date']."<br>"; } paginace($page, $pages, "?strana={strana}") ?> </div> <!-- tělo stránky --> var_dump mi vrací tyto hodnoty: int(1) int(5) bool(false) Kdyby měl někdo dotaz, ptejte se. Budu rád za každou radu. |
||
Keeehi Profil |
Máš špatně MySQL dotaz. Proto mysql_query vrací false. Vypiš si chybu
echo mysql_error(); |
||
Vilak Profil |
Toto: bool(false)
Nebudu mět náhodou chybu return mysql_query("SELECT * FROM `articles` ORDER BY `date` DESC LIMIT $page1, $topage"); , když jsem zbytek dělal pomocí PDO? Jak přepíšu to mysql_query do příkazu v PDO?
Jasně... mysql_error(); vypisuje: No database selected Jak tento příkaz přepíšu do PDO? |
||
lionel messi Profil |
#4 · Zasláno: 4. 6. 2016, 14:58:37
Vilak:
„Jak přepíšu to mysql_query do příkazu v PDO?“ //príprava $dotaz = $conn->prepare("SELECT * FROM `articles` ORDER BY `date` DESC LIMIT ?, ?"); //vykonanie dotazu $dotaz = $dotaz->execute(array($page1, $topage)); //vrátenie výsledku $vysledek = $dotaz->fetchAll(); Netestované, dúfam, že bez chýb. |
||
Vilak Profil |
Funguje mi to, nová funkce:
function articles($page, $topage) { include "include/db/db.php"; $page1 = ($page - 1)*$topage; $stmt = $conn->prepare("SELECT * FROM `articles` ORDER BY `date` DESC LIMIT $page1, $topage"); $stmt->execute(); return $stmt; } Jinak mám problém ještě s tím stránkováním. Vypisuje mi to takovýto seznam: "« 1 2 3 3 »" Prostě mi to poslední stránku vypíše 2x a nevím, proč. To platí jen za podmínek, že jsme na straně 1 nebo 2. ________________________________________________________________ MÁM TO, přikládám konečnou verzi, pro ostatní paginace.php: <?php function url_page($url, $page) { return str_replace('{strana}', $page, $url); } function paginace($page, $pages, $url) { $radius = 3; $html = "<nav class='p_centered'><ul class='p_paginace'>"; if (isset($_GET['strana'])) { $page = $_GET['strana']; } else { $page = 1; } //left arrow if ($page > 1) { $html .= "<li><a href='".url_page($url, $page - 1)."'>«</a></li>"; } else { $html .= "<li class='p_no_active'>«</li>"; } $left = $page - $radius >= 1 ? $page - $radius : 1; $right = $page + $radius <= $pages ? $page + $radius : $pages; if ($left > 1) { $html .= "<li><a href='". url_page($url, 1)."'>1</a></li>"; } if ($left > 2) { $html .="<li class='p_no_active'>…</li>"; } for ($i = $left; $i <= $right; $i++) { if ($i == $page) { $html .= "<li class'p_active'>".$i."</li>"; } else { $html .= "<li><a href='".url_page($url, $i)."'>".$i."</a></li>"; } } if ($right < $pages - 1) { $html .= "<li class='p_no_active'>…</li>"; } if ($page < $pages) { //$html .= "<li><a href='".url_page($url, $pages)."'>".$pages."</a></li>"; } if ($page < $pages) { $html .= "<li><a href='".url_page($url, $page + 1)."'>»</a></li>"; } else { $html .= "<li class='p_no_active'>«</li>"; } $html .= "<ul></nav>"; return $html; } ?> counter-strike-global-offensive.php: <div id="content"> <?php $stmt = $conn->prepare("SELECT * FROM `articles`"); $stmt->execute(); $count = $stmt->rowCount(); if (isset($_GET['strana'])) { $page = $_GET['strana']; } else { $page = 1; } include "include/scripts/paginace.php"; function articles($page, $topage) { include "include/db/db.php"; $page1 = ($page - 1)*$topage; $stmt = $conn->prepare("SELECT * FROM `articles` ORDER BY `date` DESC LIMIT $page1, $topage"); $stmt->execute(); return $stmt; } $topage = 1; $articles = articles($page, $topage); $pages = ceil($count/$topage); //výpis foreach ($articles as $article) { echo $article['id']."<br>"; echo $article['game']."<br>"; echo $article['headline']."<br>"; echo $article['text']."<br>"; echo $article['author']."<br>"; echo $article['date']."<br>"; echo "<hr><hr>"; } echo paginace($page, $pages, "?strana={strana}") ?> </div> Děkuju vám moc! |
||
Keeehi Profil |
$conn->prepare() ve funkci by neměl fungovat, protože proměnnou $conn si tam nepředáváš.
function articles($page, $topage, $databaseConnection) { include "include/db/db.php"; $page1 = ($page - 1)*$topage; $stmt = $databaseConnection->prepare("SELECT * FROM `articles` ORDER BY `date` DESC LIMIT $page1, $topage"); $stmt->execute(); return $stmt; } $topage = 1; $articles = articles($page, $topage, $conn); |
||
Vilak Profil |
#7 · Zasláno: 4. 6. 2016, 15:45:50
Zprvu mi to nefungovalo, a tak jsem si kvůli tomu do funkce vložil db.php. Vše jsem to už otestoval (můj skript), funguje to.
|
||
Keeehi Profil |
#8 · Zasláno: 4. 6. 2016, 17:02:48
Vilak:
To ovšem zbytečně vytváří další spojení do databáze. Což může být obrovský zabiják výkonu. |
||
Vilak Profil |
#9 · Zasláno: 5. 6. 2016, 10:56:32
Ok, děkuji. Přepíšu to tedy.
|
||
Časová prodleva: 8 let
|
0