Názory ke článku Jednoduché stránkování v PHP – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Názory ke článku Jednoduché stránkování v PHP – Programujte.comNázory ke článku Jednoduché stránkování v PHP – Programujte.com

 

Názory ke článku Jednoduché stránkování v PHP

Jiří   NOVÝ
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

wise   NOVÝ
17. 11. 2009

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ů.

Vojtěch Vondra   NOVÝ
17. 11. 2009

V textu máš takový drobný programátorský oxymorón. Konstatní proměnná je rozhodně pozoruhodný výraz.

Crimson   NOVÝ
17. 11. 2009

Reagoval na komentář od uživatele Jakub Kratina : Taky bych uvital OOP reseni.

Anonymní uživatel   NOVÝ
17. 11. 2009

Reagoval na komentář od uživatele Vojtěch Vondra : přeřek :) Ale díky za upozorňení.

Martin Kravec   NOVÝ
17. 11. 2009

Reagoval na komentář od uživatele Jakub Kratina :
Už sa teším na sľúbenú OOP verziu : )..

Anonymní uživatel   NOVÝ
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é ...

z_moravec   NOVÝ
17. 11. 2009

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ů.

wise   NOVÝ
17. 11. 2009

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ě..

vrana   NOVÝ
17. 11. 2009

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 >.

wise   NOVÝ
18. 11. 2009

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.

Curo   NOVÝ
18. 11. 2009

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(*).

fos4   NOVÝ
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.

z_moravec   NOVÝ
18. 11. 2009

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.

vrana   NOVÝ
18. 11. 2009

: ?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

Lordest   NOVÝ
18. 11. 2009

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.

Curo   NOVÝ
18. 11. 2009

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.

wise   NOVÝ
18. 11. 2009

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

Smokie   NOVÝ
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.

fos4   NOVÝ
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 > (>).

tiso   NOVÝ
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!

Curo   NOVÝ
19. 11. 2009

Reagoval na komentář od uživatele fos4 :
Ve výsledku přeci nechceme vypsat "<a href>5</a>" ale "5".

fos4   NOVÝ
19. 11. 2009

Oh, spatne paste, myslel jsem tohle:
echo "<a href='clanky.php/?page=1'><<</a>";
a dalsi..

wise   NOVÝ
19. 11. 2009

Reagoval na komentář od uživatele fos4 : to je lepší :) To udělám.

wise   NOVÝ
19. 11. 2009

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 <

Anonymní uživatel   NOVÝ
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 ...

Anonymní uživatel   NOVÝ
19. 11. 2009

Ano, ale v článku by mělo být tedy &gt; a &lt; ;) komentáře nehaní práci autora, pouze se jí snaží posunout dále ;)

wise   NOVÝ
19. 11. 2009

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.

wise   NOVÝ
20. 11. 2009

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.

Alex Sedron   NOVÝ
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 = "";
}

Sladkovský   NOVÝ
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";

Anonymní uživatel   NOVÝ
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)

3CK   NOVÝ
6. 12. 2009

Spíš mi přijde jakoby si autor článku nechal zkontrolovat svůj vlastní kód od odborníků :-D

Anonymní uživatel   NOVÝ
18. 3. 2011

©©©©

stugent   NOVÝ
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

Row   NOVÝ
10. 10. 2012

upřímně tento článek mě akorat donutil abych to udelal uplne jinak..tot jen muj nazor .. 

mdz   NOVÝ
27. 3. 2013

#35 stugent
Díky za opravu chyb.. hledal jsem kvůli čemu se mi vypisuje pořád pouze první část db!

Godndag   NOVÝ
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 :)

Jalapeno   NOVÝ
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

Přidej svůj názor

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo e-mailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Reaguješ na příspěvek:
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové názory e-mailem (pouze pro přihlášené)
Sleduj názory ke článku a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.



Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý