Starší komentáře ke článku: Listování v tabulce pomocí skriptu PHP
Zpět na článek | Úvodní stránka Interval.cz
Datum vložení: 12.3.2002 18:06:55
<I>$vysledek_celk = Mysql_query("SELECT id FROM jmeno_tabulky");</I>
Pokud ma dotaz co nejmene zatizit databazi pak je dobre pouzit misto tohoto zpusobu dotaz "SELECT Count(*) FROM jmeno_tabulky", s kodem jaky je v clanku by se s rostouci databazi zbytecne prenaseli/ukladali data a zatezovalo by to vice server.
Dale pouziti promenne $zaznam, kterou predavame jako parametr v SQL dotazu aniz bysme ji predtim otestovali na pritomnost alespon mezery je prinejmensim riskantni. Mozna by stalo za to dat pred to nejakej ERegI s vyctem znaku jako mezery a uvozovky kterej by v pripade vyskytu SQL dotaz neprovadel.
Jinak toto tema bych spise ocekaval jako soucast jineho clanku ...
Datum vložení: 12.3.2002 23:06:07
Dobry den,
s tim SELECT COUNT(*) ... mate pravdu, takhle se to da vyresit lepe.
Pokud se tyka osetreni promenne $zaznam, predpokladam, ze ji skript ziska z elementu formulare SELECT (jak je v clanku i uvedeno), kde si samozrejme navolim pevne hodnoty jednotlivych OPTION, ktere potom predavam v dotazu SQL databazi. Od uzivatele potom zadani nebezpecnych znaku nehrozi.
Tematika listovani tabulkou pomoci PHP je spise takova tresnicka (ne vsak neuzitecna), bohuzel pomerne narocna a obsahla na vysvetlovani, proto o ni pojednavam v samostatnem clanku.
S pozdravem
Ondra Marek
Datum vložení: 13.3.2002 6:55:21
"Pokud se tyka osetreni promenne $zaznam, predpokladam, ze ji skript ziska z elementu formulare SELECT (jak je v clanku i uvedeno), kde si samozrejme navolim pevne hodnoty jednotlivych OPTION, ktere potom predavam v dotazu SQL databazi. Od uzivatele potom zadani nebezpecnych znaku nehrozi."
Ale no tak, takhle se pristupuje k bezpecnosti? Uzivatel prece uplne klidne muze zadat tu promennou jako GET parametr, kdyz uz nebude chtit spustit Telnet a pozadat si o to rucne. Pritom by stacilo doplnit neco ve stylu:
$zaznam = (int) $zaznam;
Datum vložení: 13.3.2002 8:27:41
Nebo je mozne pouzit funkci addslashes...
Pokud uzivatel bude umyslne jako parametr pro promennou $zaznam zadavat vlastni znaky, samozrejme tim riskuje, ze mu skript fungovat nebude. Neresil jsem ani odstineni uzivatele od poruch v komunikaci s databazi. Aby clanek nenabyl obludnych rozmeru, soustredil jsem se vylucne na popis principu listovani v tabulce.
Tematice bezpecnosti skriptu PHP v komunikaci s databazi se snad venuji nejake konkretne zamerene clanky na Intervalu, pokud ne, zkuste treba nejaky napsat Vy.
S pozdravem
Ondra Marek
Datum vložení: 17.3.2002 22:18:15
toto je typicky argument autoru clanku na intervalu. to ale prece neni pravda. tyto skripty z 99% procent vyuzivaji uzivatele, kteri o bezpecnosti nemaji ani zdani a nikdy je nenapadne (ani to neumeji) osetrit si takove chyby. osetreni dulezitych chyb je stabni kultura a melo by to tak byt.
nemate pravdu, ze staci pouzit jen addslashes. v nekterych pripadech se da udelat neco jako $HTTP_GET_VARS["id"] = "1 OR ...". to plati v pripade int promennych, ktere nekteri lide zapominaji dat do '', stringy v nich uz byt musi.
mela by se pouzit nejaka funkce jako:
function sanitize($input)
{
$output = (int) $input;
if ($input != $output) {
return false;
}
return true;
}
zkracene tusim return ($input != (int) $output ? true : false);
Datum vložení: 18.3.2002 8:57:02
Zdravim Vas,
ale to se opravdu jedna o pomerne slozitou a komplexni problematiku - pokud chcete jit jeste za pouziti funkce addslashes(). Odkazal bych Vas napr. na <a href='http://www.php.net/manual/en/security.registerglobals.php' target='_blank'>http://www.php.net/manual/en/security.registerglobals.php</a>, kde je popsana prace s php pri vypnuti direktivy register globals. Mimochodem, od Php verze 4.1.0 se misto $HTTP_Get_Vars doporucuje pouzivat $_Get, ktera ma tu samou funkci, avsak je autoglobalni.
Znovu opakuji, myslim si, ze tato problematika by vystacila na samostatny clanek, ktery bych osobne na Intervalu velice uvital.
Datum vložení: 18.3.2002 14:34:27
nechapu Vase odkazovani na praci s globals vars. ja ji chapu, vy pravdepodobne take. $HTTP_GET_VARS["id"] jsem chtel naznacit, ze jde o promennou ziskanou z url
pokud by mel interval.cz o temto clanek zajem, myslim, ze se muzeme domluvit na nejake spolupraci / vytvoreni skupiny, ktera by sepsala nejdulezitejsi problemy a pote je popsala
Datum vložení: 24.3.2002 9:44:12
No, je sice hezké, jak tady debatujete o bezpečnosti avšak já, jako zelenáč, tedy skoro zelenáč, jsem to ani nerozchodil, natož abych uvažoval o bezbečnostních problémech. Možná kdyby mi někdo mohl poslat ten kód, slepený dohromady, byl bych mu VELICE VDĚČEN.
Děkuji, Michal R
P.S. Omlouvám se za případné gramatické chyby.
Datum vložení: 16.7.2002 12:56:49
no tak celej ten script sem nejak pochopil listovat v tabulce bych teda zvladnul ale asi mi nebo nekomu co psal tenhle clanek jedna vec trsku usla a listovat muzu ale nic se mi nezobrazi zkousel sem tam dat while($print = mysql_fetch_array($vysledek)): ale nefunguje to nechapu proc takze ten script je pak k nicemu gdyz listuju v nicem please help
Datum vložení: 17.7.2002 17:51:11
nekde jste musel udelat chybu, skript je overeny a funguje - poslete mi prip. Vas skript i s dumpingem dtb, zkusim Vam poradit
Datum vložení: 24.9.2006 13:01:52
Dobry den, ten skript se mi libi, po nejake dobe maturovani sem rozchodil aspon vypisovani radku bez chyb. Muj problem spociva v tom , ze skript spocita kolik bude stranek a pod nej mi vypise cely Mysql dotaz, v mem pripade tedy cca 730 zaznamu, bez toho aniz by je limitoval po 30ks. Nasledne odkazy na dalsi stranky jsou nefunkcni , dokazete mi prosim poradit? Mnohokrate diky.
Datum vložení: 10.5.2003 18:54:34
Stránkování funguje bez problémů, ale nezobrazuje se mi nic, krom odkazů na jednotlivé stránky. Nemůžu přijít na způsob, aby se mi zobrazovala data z jiných sloupců tabulky společně se stránkováním. Předem děkuji za pomoc
Datum vložení: 10.7.2005 11:27:51
Prosim nemohli by ste zprovoznit odkaz pro stažení skriptu? předem děkuju :-)
Datum vložení: 10.7.2005 22:14:40
Děkuji za upozornění, došlo k malé chybičce ve skriptech. Vše je již napraveno ;-)
Datum vložení: 25.9.2007 14:43:51
Funguje ako tak len ze zobrati císla a akože refreshne stranku ale vsetky zaznami v tabulke su na kazdej stranke ci ich dam ikazovat po 10 alebo po 5 stale ich tam mam vsetky t.j. u mna 20
Datum vložení: 25.9.2007 14:48:46
To znamena ze pre normalneho pouzivatela ktory nema skusenosti s programovanim scriptov je tento vas clanok sice pekny a chudakom zaberie kopec casu kym pridu na to ze to jednoducho asi nepojde a este ich aj navnadi ze budu mat na svoju stranku mozno nieco super. A tu sa mozno niekto raduje ako niekomu ubral zbytocne cas, ze? Autor by sa mal zamysliet nad sebou, ze ked uz nieco chcem uverejnit a akoze je to funkcne tak by to aj v takom stave malo byt. V kazdom pripade je tam vela bla, bla, bla a nic z toho.
Datum vložení: 22.10.2007 11:46:15
po uprave s class.mysql.php
/* připojím se k databázi */
$zaznam= $_GET[zaznam];
$c_listu= $_GET[c_listu];
$pocet=5;//po kolika stranach posunovat
if (!IsSet($zaznam))
$zaznam = 0;
if (!IsSet($c_listu))
$c_listu = 1;
/* inicializace proměnných $zaznam a $c_listu */
////////$vysledek_celk = mysql_query("SELECT id FROM clanky");
$povel = 'SELECT COUNT(id) FROM clanky';
$sql -> query("rowws", $povel);
IF ($rowws = $sql->fetch_assoc("rowws"))
{
$vysledek_celk = $rowws["COUNT(name)"];
}
$sql-> free_result('rowws');
/* do proměnné $vysledek_celk uloľím daný dotaz na databázi mySQL neobsahující omezující
příkaz LIMIT. Za jméno pole dosadím pokud moľno pole tabulky obsahující index,
aby dotaz co nejméně zatíľil databázi. Dotaz mohu obohatit i daląími kritérii,
např. WHERE $podminka nebo ORDER BY $seskupit, potřebné proměnné mohu získat opět z formuláře
definice dotazu */
//$vysledek = mysql_query("SELECT * FROM clanky LIMIT $zaznam, $pocet");
$povel ='SELECT id,nadpis,hlava FROM clanky WHERE view="1" LIMIT '.$zaznam.', '.$pocet;
$sql -> query("rowws", $povel);
WHILE ($rowws = $sql->fetch_assoc("rowws")) {
echo '<h2><a href=index.php?k=1&zaznam='.$zaznam.'&c_listu='.$c_list.'&detail='.$rowws[id].'>'.$rowws[nadpis].'</h2>
'.$rowws[hlava].'</a>
';
}
$sql-> free_result('rowws');
/* do proměnné $vysledek uloľím daný dotaz na databázi mySQL obsahující navíc omezující
příkaz LIMIT. */
//query_result('SELECT COUNT(id) FROM kniha')
///$pocet_listu = mysql_num_rows($vysledek_celk)/$pocet;
$pocet_listu =$vysledek_celk/$pocet;
$pocet_vysl=Ceil($pocet_listu);