Názory ke článku Jednoduché stránkování v PHP
17. 11. 2009
Pokud by to nebyl problém byl bych moc vděčný za verzi v OOP.
Minimálně pro studijní účely by to bylo super.
Díky za poučný článek
Reagoval na komentář od uživatele Jiří : Dobře, připravím stránkování v OOP. Z důvodu časové vytíženosti tu bude tak do 2 týdnů.
17. 11. 2009
V textu máš takový drobný programátorský oxymorón. Konstatní proměnná je rozhodně pozoruhodný výraz.
17. 11. 2009
Reagoval na komentář od uživatele Jakub Kratina : Taky bych uvital OOP reseni.
17. 11. 2009
Reagoval na komentář od uživatele Vojtěch Vondra : přeřek :) Ale díky za upozorňení.
17. 11. 2009
Reagoval na komentář od uživatele Jakub Kratina :
Už sa teším na sľúbenú OOP verziu : )..
17. 11. 2009
Pokud píšete něco se záměrem alespoň částečného studijního materiálu, ošetřujte základní chyby, vstupy, aj. SQL Injection, XSS, CSRF aj. jak vyšité ...
Pokud napíšeš i tu OOP verzi, tak by možná nebylo od věci aspoň zmínit využití sql_calc_found_rows pro získání celkového počtu příspěvků.
Reagoval na komentář od uživatele Anonymní uživatel : moc dobře nevím, které vstupy bych zde měl ošetřovat. Jediná věc, co se týče zranitelnosti, je $page v URL, které můžete předhodit libovolný parametry. Ale jelikož se $page nedává přímo do sql dotazu, ale díky ní se vypočítá jiná hodnota, není proč ošetřovat proti SQL injection.
Ani žádný formulář zde není či něco jiného, kde by se dalo aplikovat CSFR. Pokud se mílím, tak mě opravte...
dle mě to co píšete pravda není..ne v tomto případě..
SELECT COUNT(*) řádek vždy vrátí. Pokud v tabulce nejsou záznamy, vrátí na řádku nulu. Test na $countQ->num_rows je tedy zbytečný.
Konstanty se v PHP řetězcích nedají přímo používat, zápis LIMIT ON_PAGE je špatně.
Stránka předaná v URL parametru se vypisuje neošetřená. Jde tedy o XSS.
Znak < má v HTML speciální význam, měl by se tedy zapisovat jako <. Zvykem je také > zapisovat jako >.
Reagoval na komentář od uživatele Jakub Vrána : díky za připomínky.
Jen by mě zajímalo, jak zde použít XSS. Díky za ukázku.
Reagoval na komentář od uživatele Zdeněk Moravec :
sql_calc_found_rows není dobré mnohdy použít, výkonově je to někdy mnohem náročnější, než-li další dotaz count(*).
18. 11. 2009
Lukáš Churý píše:
Reagoval na komentář od uživatele Zdeněk Moravec :
sql_calc_found_rows není dobré mnohdy použít, výkonově je to někdy mnohem náročnější, než-li další dotaz count(*).
Vetsinou kdyz vypisuji nejaky vypis z DB tak jen z ridka se stava ze bych nemel podminky, vetsinou se jich celkem dost nabali a pak nic jineho nez sql_found_rows udelat nejde - prehlednost.
Reagoval na komentář od uživatele Lukáš Churý :
No to nevím, já to používám velmi často i na dost složité dotazy a žádné zpomalení jsem zatím nezaznamenal. Jestli budu mít ěkdy trochu času, tak to zkusím proměřit.
: ?page=%3Cscript%3E%3C%2Fscript%3E
Možnosti zneužití závisí na tom, kde se stránkování použije. Obecně se dá říct, že XSS znamená možnost získat všechna data přihlášeného uživatele z celého serveru, za určitých okolností jeho identitu (tedy možnost se za něj vydávat) a za určitých okolností i login a heslo nepřihlášeného uživatele.
: SQL_CALC_FOUND_ROWS bohužel pomalejší typicky opravdu je. Jde o to, že při jeho použití se navazují data z připojených tabulek i u řádků, které se pak do výsledku nedostanou. Při separátním dotazu na COUNT(*) jde tyto tabulky často úplně vynechat. Viz také http://php.vrana.cz/ziskani-poctu-radek.php#d-8992
Prepáč no musím súhlasiť s ostatnými
- pár krát zlé vyjadrovanie ( nehovorím, že som na tom o niečo lepšie, ale zhľadiska čitateľa to viem posúdiť + nepíšem články :) )
- ako chceš aby PHP zistilo v príkaze konštantu? Ty tam musíš dosadiť jej hodnotu, nie jej názov :D (dúfam, že vieš čo myslím)
- neošetrené ( opakujem ľudí nadomnou ), atď
btw.: prečo tie veci neopravíš, deň po pridaní kritiky? čo som si to dnes čítal, stále sú tam tie chyby
k tej diskusii ohľadom získania počtu:
Ja to riešim cez výber napríklad ID, a potom to hodím do mysql_num_rows ..
neviem či je to práve najsprávnejšie no zatiaľ som sa nestretol s nejakými negatívami.
Reagoval na komentář od uživatele Lordest :
Právě mě odrovnala hláška: "Třeba jen trénuje Brailovo písmo - vzala makovej rohlík a opisuje ho sem."
Špatné řešení, místo select ID dávej count(*), počty řádků jsou totiž u tabulky vedeny.
Reagoval na komentář od uživatele Lordest : opravil jsem kód. Většinou se jednalo o překlepy. Viz. konstantní proměnná nebo dosazení stringu místo hodnoty.
Dále jsem přidal funkci na ochranu proti XSS.
Snad jsem tam nenasekal další :D
19. 11. 2009
Reagoval na komentář od uživatele Jakub Kratina :Mam pocit, ze plno ludi sa tu iba hraje na chytrych :) Ta funkcia na ochranu proti XSS, tu ani imho nebolo treba pridavat. Stacilo na vhodnom mieste urobit (int) $page a vec je vyriesena :) Skript sa premeni na cislo a utocnik si moze ist piskat.
19. 11. 2009
Jeste bych upravil vypisovani spicatych zavorek.
[code echo "<a href='clanky.php/?page=".($page-$i)."'>".($page-$i)."</a>";
- tohle urcite neni dobré.
Spicate zavorky se zapisuji jako < (<) a > (>).
19. 11. 2009
Reagoval na komentář od uživatele fos4 :
Ale iba v prípade, že chceš, aby sa ako špicaté zátvorky zobrazili vo výstupnom HTML!
Reagoval na komentář od uživatele fos4 :
Ve výsledku přeci nechceme vypsat "<a href>5</a>" ale "5".
19. 11. 2009
Oh, spatne paste, myslel jsem tohle:
echo "<a href='clanky.php/?page=1'><<</a>";
a dalsi..
Reagoval na komentář od uživatele fos4 :Reagoval na komentář od uživatele Lukáš Churý : tak v administraci článku je všechno jako > a <
19. 11. 2009
Ano, ale tato v tomto případě jediná správná ochrana chyběla/chybí. Nemluvě o případném testu proměnné, zda neobsahuje čísla <= 0 - poté je snad jasné, co by se mělo dít ...
19. 11. 2009
Ano, ale v článku by mělo být tedy > a < ;) komentáře nehaní práci autora, pouze se jí snaží posunout dále ;)
Reagoval na komentář od uživatele Anonymní uživatel : nepochopil jsem k čemu se toto váže..
Reagoval na komentář od uživatele Anonymní uživatel : napsal jsem, něco ve smyslu, že nejsem kamarád se zdejším editorem, pracuje na tom Curo.
Reagoval na komentář od uživatele Anonymní uživatel : konečně se mi to (za pomoci Cura) podařilo udělat tak, jak jsem chtěl. Už je to ok.
21. 11. 2009
$pocetzaznamu = mysql_result(mysql_query("SELECT COUNT(*) FROM tabulka "), 0);
if ($pocetzaznamu > $limit)
{
if (!isset($_POST["zaznam_pocet"])) $od_zaznamu = 0;
if (isset($_POST["zaznam_pocet"]))
{
$od_zaznamu = $_POST["zaznam_pocet"] - 1;
}
$a_pocet = 1;
$zaznamy_cesta = "<div class=\"zaznamy_cesta\"><form method=\"post\">";
while ($a_pocet < ($pocetzaznamu + 1))
{
if (($od_zaznamu + 1) != $a_pocet) $zaznamy_cesta .= "<input type=\"submit\" name=\"zaznam_pocet\" value=\"$a_pocet\">";
else $zaznamy_cesta .= "<input class=\"button\" type=\"button\" value=\"$a_pocet\">";
$a_pocet = $a_pocet + $limit;
}
$zaznamy_cesta .= "</form></div>";
}
else
{
$od_zaznamu = 0;
$zaznamy_cesta = "";
}
24. 11. 2009
if (@!$_GET['stranka']){
$zac=0;
}else {
$zac=$_GET['stranka']*10;
if ($zac==10){
$zac=0;
}
}
$kon=$zac+10;
$sql="SELECT * FROM `forum` order by `kdy` DESC LIMIT $zac,$kon";
24. 11. 2009
Reagoval na komentář od uživatele Sladkovský :
??? a to jako budeš mít na první stránce výpisů, 10 záznamů, a na cca sté stránce výpisů budeš mít 110záznamů?
Zajímavé řešení... :o)
6. 12. 2009
Spíš mi přijde jakoby si autor článku nechal zkontrolovat svůj vlastní kód od odborníků :-D
24. 3. 2011
Děkuji za článek! Je to první návod, pomocí kterého jsem rozchodil stránkování na webu. V kódu jsou však chyby, které jsem musel najít a opravit.
1) celý kód začíná if(ON_PAGE < $max) {, avšak if už není na závěr zakončen }
2) Výpis odkazu na poslední stránku - konstanta ON_PAGE zapsána jako proměnná, odkaz se tak vůbec nezobrazí. Správně to má být echo "<a href='?page=".ceil($max / ON_PAGE)."'> Poslední </a>";
3) Stejný problém u výpočtu proměnné by! Konstanta zapsána s dolarem, "by" mělo tedy stále nulovou hodnotu a na všech stránkách se vypisuje pouze první část databáze! Správně $by = (ON_PAGE * ($page - 1));
4) u odkazů nepsat a href='clanky.php/?page=, ale pouze a href='?page=, odkazy by jinak směřovaly na clanky.php/clanky.php a stránkování by se zacyklilo
10. 10. 2012
upřímně tento článek mě akorat donutil abych to udelal uplne jinak..tot jen muj nazor ..
27. 3. 2013
#35 stugent
Díky za opravu chyb.. hledal jsem kvůli čemu se mi vypisuje pořád pouze první část db!
26. 5. 2013
Díky konečně něco co jsem pochopil a funguje perfektně:)
Akorát nevím jestli jsem to nějak přehlídl, ale najednou začneš místo ON_PAGE používat $on_page, což mě trochu zmátlo, ale stačilo pod definice funkce ON_PAGE akorát napsat $on_page= ON_PAGE a bylo po problému. Díky moc :)
15. 3. 2015
Děkuju autorovi za článek, ale musím se k tomu taky vyjádřit.
PHP se nějak dalece nezabývám a proto když kodím tak musím hledat všemožnou pomoc na internetu. Script je to pohodový, ale je v něm spousta chyb a nevím proč, ale některé částí mi přijdou nesmyslně zdvojené. Možná jsem špatně kopíroval, ale jak je ten kód celý rozsekaný na různé části tak se v něm ztrácím.
A navíc (to je moje osbní "úchylka" ) nesnáším if, for apod. bez těchhle závorek '{' nechápu jak se v tom někdo pak může vyznat.
Jinač dík ;)
Hodně zdaru