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)."'>&laquo;</a></li>";
        }
        else {
            $html .= "<li class='p_no_active'>&laquo;</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'>&hellip;</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'>&hellip;</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)."'>&raquo;</a></li>";
        }
        else {
            $html .= "<li class='p_no_active'>&laquo;</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
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)."'>&laquo;</a></li>";
        }
        else {
            $html .= "<li class='p_no_active'>&laquo;</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'>&hellip;</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'>&hellip;</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)."'>&raquo;</a></li>";
        }
        else {
            $html .= "<li class='p_no_active'>&laquo;</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
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
Vilak:
To ovšem zbytečně vytváří další spojení do databáze. Což může být obrovský zabiják výkonu.
Vilak
Profil
Ok, děkuji. Přepíšu to tedy.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: