Stránkování v php

Dobrý den,

Nevědil by jste někdo o nějakém článku o stránkování v php.
Děkuji
<HTML>Zkus do gůglu zadat php stránkování a uvidíš...
http://www.webzdarma.cz/forum/read.php?f=2&i=35844&t=35785
http://www.webzdarma.cz/forum/read.php?f=5&i=6287&t=6268</HTML>
<HTML>Na takove veci neni treba psat clanky, napis jak ukladas data ktera chces pri vypisu strankovat a nejak uz to vymyslime ;)</HTML>
treba ja mam komponentu zobraz tabulku, ale nekdo mne zabije, pac to ma 5k :)

<?php
/*
$tbl = array(
'name' =>"pages",
'tab' =>"pages",
'where1'=>"pages.php",
'where2'=>"pages-edit.php",
'where3'=>"pages.z.php",
'add' =>array('text'=>"Show",'link'=>"index.php?www=")
);
*/
global $lg;
?>

<script type="text/javascript">var Qdelete= "Skutecne radek/radky smazat?";</script>

<form name="fdata" action="<?=$tbl['where2']?>" method="post" enctype="multipart/form-data">
<?php writeSessionInput(); ?>
<input type="hidden" value="edit" name="action"/>

<fieldset>
<legend>
<a href="help/index.htm?help=<?=$tbl['name']?>" title="<?=$lng['help']['title']?>" target="_blank"><img alt="(i)" src="<?=$dir0?>pictures/info.gif" height="18" width="18" border="0"/></a>
<?=$lg['title']?></legend>

<?php
$a = $tbl['name'];
$keysTrue = isset($lng['keys'][$a]) ? 1 : 0;
$showKeys = ($keysTrue===1) ? $lng['keys'][$a] : array();
$a = "orderby";
$x = isset($_GET[$a]) ? $_GET[$a] : (isset($_SESSION[$a]) ? $_SESSION[$a] : 0);
$order = ($x!==0) ? (array_key_exists($x,$showKeys) ? $x : 'id') : 0;
$_SESSION[$a] = $order;
$a = "o2";
$x = isset($_GET[$a]) ? $_GET[$a] : (isset($_SESSION[$a]) ? $_SESSION[$a] : 0);
$order2 = $x>0 ? 1 : 0;
$_SESSION[$a] = $order2;
$orderby = ($order!==0) ? "ORDER BY `$order`" . ($order2===0 ? " ASC" : " DESC") : "";

$where = "";
$a = 'wwwid';
if ($Ulaws2[$a]!==1)
{
if ($tbl['tab']=='www') {$a = 'id';}
if (isset($showKeys[$a])) {$where = "WHERE `$a`='$Uweb'"; unset($showKeys[$a]);}
}

$tab = $tb0.$tbl['tab'];
//if no showKeys
$linkAdd = "";
$linkAdd2 = "";
if ($keysTrue===0)
{
$linkAdd = "table=".urlencode($tbl['tab']);
$linkAdd2= $linkAdd."&";
echo "<b>$tab</b>";
}
$dotaz1 = "FROM $tab $where";
$dotaz = "SELECT COUNT(*) $dotaz1";
//echo "<hr>dotaz1 = $dotaz";
$vysl = mysql_query($dotaz) or die("<hr>Err ".$tbl['name']."1: $dotaz<hr>".mysql_error());
$found = mysql_result($vysl,0);
$found = isset($found) ? $found : 0;

$a = 'count'; $count = isset($_GET[$a]) ? $_GET[$a]*1 : 0;
if (!in_array($count,$sett[$a])) {$count = $sett[$a][1];}
$a = 'from'; $from = isset($_GET[$a]) ? $_GET[$a]*1-1 : 0;
if ($from>$found) {$from = $found-$count;}
if ($from <0) {$from = 0;}
$count2 = ($found>$count) ? $count : $found;

$dotaz = "SELECT * $dotaz1 $orderby LIMIT $from , $count2";
//echo "<hr>dotaz2 = $dotaz";
$vysl = mysql_query($dotaz) or die("<hr>Err ".$tbl['name'].": $dotaz<hr>".mysql_error());
$pocet = mysql_num_rows($vysl);
if ($pocet>0)
{
echo "\n<input type=\"hidden\" value=\"$count2\" name=\"count\"/>";
if ($keysTrue===0) {
echo "\n<input type=\"hidden\" value=\"".$tbl['tab']."\" name=\"table\"/>";}

$nav = PPnav1($tbl['where1'],$from,$count,$found,$linkAdd);
echo $nav;

//rows
$tablebody = "";
$row = array();
for ($i=0;$i<$pocet;$i++)
{
$row = mysql_fetch_array($vysl);
$tablerow = "\n<tr>\t<td><input type=\"checkbox\" value=\"".$row["id"]."\" name=\"ch$i\"/></td>";
$tablerow.= "\n\t<td>".PPlink($tbl['where2'],$lng['tab']['edit'],"",$linkAdd2."action=edit&id=".$row["id"])."</td>";
$tablerow.= "\n\t<td>".PPlink($tbl['where3'],$lng['tab']['del'] ,"",$linkAdd2."action=del&id=".$row["id"],"return confirm(Qdelete)")."</td>";
foreach ($row as $key => $value)
{
if (($keysTrue===1 && array_key_exists($key,$showKeys)) || ($keysTrue===0 && !is_int($key)))
{
$value = str_replace(" "," ",$value);
$tablerow.= "\n\t<td>$value</td>";
}
}
if (isset($tbl['add']))
{
$value ="<a href=\"".$tbl['add']['link'].$row['id']."\" target=\"_blank\">".$tbl['add']['text']."</a>";
$tablerow.= "\n\t<td>$value</td>";
}
$tablerow.= "</tr>";
$tablebody.= $tablerow;
}
//head
$tablehead = "\t<td><input type=\"checkbox\" onclick=\"selInvert(this,$count2)\" title=\"".$lng['tab']['selectall']."\"/></td>\n\t<td> </td>\n\t<td> </td>";
foreach ($row as $key => $value)
{if (($keysTrue===1 && array_key_exists($key,$showKeys)) || ($keysTrue===0 && !is_int($key)))
{
$o3 = ($key===$order) ? ($order2==0?1:0) : 0;
$tablehead.= "\n\t<td><b".($key===$order?" class=\"sel\"":"").">".PPlink($tbl['where1'],(($keysTrue===1)?$showKeys[$key]:$key),"",$linkAdd2."orderby=$key&o2=$o3")."</b></td>";
}
}
if (isset($tbl['add']))
{$tablehead.= "\n\t<td> </td>";}

$t = ""
."\n<table class=\"tab\" cellspacing=\"0\">"
."\n<thead>\n<tr>"
.$tablehead
."\n</tr>\n</thead>"
."\n<tbody valign=\"top\">"
.$tablebody
."\n</tbody>"
."\n<tfoot><tr>"
.$tablehead
."\n</tr></tfoot>"
."\n</table>";
echo $t;

echo $nav;

$t = ""
."\n<p align=\"center\">"
."\n<input type=\"submit\" value=\"".$lng['tab']['add']." / ".$lng['tab']['edit']."\" class=\"butt\"/>"
."\n<input type=\"button\" value=\"".$lng['tab']['del']."\" onclick=\"formDel('".$tbl['where3']."')\" class=\"butt\"/>"
."\n</p>";
echo $t;
}
else {
pp_err("find0");
$t = ""
."\n<p align=\"center\">"
."\n<input type=\"submit\" value=\"".$lng['tab']['add']."\" class=\"butt\"/>"
."\n</p>";
echo $t;
}

?>

</fieldset>
</form>

---------


function PPlink($Xfile,$Xtext,$Xtitle,$a,$Xclick="",$Xtarget="")
{
global $sesny0;
if ($a!="" || $sesny0!="") {$Xfile.="?";}
if ($a!="" && $sesny0!="") {$a.="&";}
$url=$Xfile.$a.$sesny0;
$Xtitle = ($Xtitle!=="") ? " title=\"$Xtitle\"" : "";
$Xclick = ($Xclick!=="") ? " onclick=\"$Xclick\"" : "";
$Xtarget= ($Xtarget!=="")? " target=\"$Xtarget\"" : "";
return "<a href=\"$url\"".$Xtitle.$Xclick.$Xtarget.">$Xtext</a>";
}

function PPnav1($where,$Xfrom,$Xcount,$Xfound,$add)
{if ($Xfound>0) {
// global $sesny0;
// |< << < 4/20 > >> >|
// a b c x y d e f
$d = array();
$title = array();
$hide = array();
$zn = array("","|<","<<","<",">",">>",">|");
$x = floor($Xfrom / $Xcount);
$y = ceil($Xfound / $Xcount); //ne++
$a=1; $d[$a] = 1; $hide[$a] = $y<=1 ? 1 : 0; //ne++
$a=6; $d[$a] = $y; $hide[$a] = $y<=1 ? 1 : 0; //ne++
$n = ceil($y/10)<<1;
$a=3; $d[$a] = $x-1; $hide[$a] = $d[$a]<$d[1]-1 ? 1 : 0;
$a=2; $d[$a] = $d[3]-$n;$hide[$a] = $d[$a]<$d[1]-1 ? 1 : 0;
$a=4; $d[$a] = $x+1; $hide[$a] = $d[$a]>=$d[6]-1 ? 1 : 0;
$a=5; $d[$a] = $d[4]+$n;$hide[$a] = $d[$a]>=$d[6]-1 ? 1 : 0;
$a=1; $d[$a]--;
$a=6; $d[$a]--;
ksort($hide);
//ksort($d);print_r($d);

$t1=$where;
$t2=$add.($add!==""?"&":"").'count='.$Xcount.'&from=';
$t ="\n<p align=\"center\" class=\"arrownav\">";
$a=0;
foreach($hide as $key => $value)
{
$a+=$value;
$z = HTMLSpecialChars($zn[$key]);
if ($value===1) {$t.="\n<span>$z</span>";}
else {$t.="\n".PPlink($t1,$z,$d[$key]+1,$t2.(($d[$key]*$Xcount)+1));}
if ($key==3) {$t.="\n".($x+1)." / $y";}
}
$t.="\n</p>";
if ($a==6) {$t="";}
return $t;
}}
<HTML>peta: nejseš to náhodou ty, kdo stále propaguje, že dlouhé zdrojáky by se měly dát do souboru a do fóra jen odkaz na ten soubor?</HTML>
<HTML>co to je za silenost proboha?</HTML>
Bože! Péťo, složiťějc to nejde?

jen tak z hlavy v rychlosti obecný zápis:
<?php

$naStranu = 5;
$stran = ceil($vysledku/$naStranu);
for($i=1;$i<=$stran;$i++) {
echo $vysledek[($i*$strana-$strana)]."\n";
}
?>
Thalia (moderátor)
Richard (moderátor)
sory, je to tak, sypu si popel na hlavu, obvykle to tak delam. Napadlo mne to az po odeslani. Zbrklost.

Tom (manual.wz.cz)
nn, slozite to nejde. Jestli mas nejaky jednoduchy zpusob, jak prenaset pocet zprav, od jake zpravy, kolik jich ma zobrazit a k tomu vygenerovat navigacni sipky, sem s nim, rad to zjednodusim, i ja to povazuji za brutalne velke.
Jinak je to vse v souboru table-edit.php
http://www.volny.cz/peter.mlich/programs/mracekCMS/mracekCMS.rar
(vicemene to mam v takove predkonecne fazi, jeste resim editaci jakekoliv tabulky ala PHPmyadmin v sqltable.php)
Richard (moderátor)

Nejsem moc dobrej programátor ale data ukládám do mysql databáze do tabulky "hra" mam tam sloupce:
id, adresa, meno, zanr, platforma, velikost.
hrykestazeni.unas.cz (hrykestazeni.unas.cz)
v tom CMS ten 5k script pouzivam pro zobrazovani tabulky a jeji editaci a tak...
nechce se mi to upravovat zvlast pro tvuj pripad. Ono je to totiz min 3k kodu, ktery tam musis mit z tech 5k.
hrykestazeni.unas.cz: jo aha.
Tak to by mohlo jít nějak takhle:

SELECT `sloupec`,`sloupec`,`sloupec`FROM `table` WHERE `podminky` LIMIT $odkud, $kolik;

Kde $odkud je číslo udávající začátek (pokud chceš mít 10 řádků na stránce a máš 2. stránku, bude to 11) a $kolik je číslo udávající, kolik má být vráceno.
Tohle je fajn, jenže nevíš kolik je celkem sloupců, takže nemůžeš udělat smysluplné stránkování bez dalšího selectu nebo úpravy dotazu.
<HTML><i>Nejsem moc dobrej programátor ale data ukládám do mysql databáze do tabulky "hra" mam tam sloupce:
id, adresa, meno, zanr, platforma, velikost.</i>


Moznosti je vic, ale uvedu zakladni 2.
1) nactes vsechny radky do pole a pracujes s polem
2) vyberes jen potrebne radky a pracujes s nimi

Prvni je snadnejsi ale pri vetsi databazi dost narocna, takze sepisem tu druhou...

<code><span style="color: #000000">
<span style="color: #0000BB"><?php
    $items </span><span style="color: #007700">= </span><span style="color: #0000BB">30</span><span style="color: #007700">; </span><span style="color: #FF8000">// pocet polozek na list     
    </span><span style="color: #0000BB">$page </span><span style="color: #007700">= (isset(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'list'</span><span style="color: #007700">])) ? </span><span style="color: #0000BB">intval</span><span style="color: #007700">(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'list'</span><span style="color: #007700">]) : </span><span style="color: #0000BB">0</span><span style="color: #007700">;

    </span><span style="color: #0000BB">$data </span><span style="color: #007700">= array();
    </span><span style="color: #0000BB">$res </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_unbuffered_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT * FROM hry LIMIT "</span><span style="color: #007700">.(</span><span style="color: #0000BB">$page</span><span style="color: #007700">*</span><span style="color: #0000BB">$items</span><span style="color: #007700">).</span><span style="color: #DD0000">","</span><span style="color: #007700">.(</span><span style="color: #0000BB">$items</span><span style="color: #007700">+</span><span style="color: #0000BB">1</span><span style="color: #007700">));

    while (</span><span style="color: #0000BB">$data</span><span style="color: #007700">[] = </span><span style="color: #0000BB">mysql_fetch_assoc</span><span style="color: #007700">(</span><span style="color: #0000BB">$res</span><span style="color: #007700">));

    for(</span><span style="color: #0000BB">$i </span><span style="color: #007700">= </span><span style="color: #0000BB">0</span><span style="color: #007700">; </span><span style="color: #0000BB">$i </span><span style="color: #007700">< </span><span style="color: #0000BB">$items</span><span style="color: #007700">; </span><span style="color: #0000BB">$i</span><span style="color: #007700">++) {

      </span><span style="color: #FF8000">// ...
      // vypiseme data ... echo $data[$i]['sloupec'];
      // ...      
    </span><span style="color: #007700">}  

    if (</span><span style="color: #0000BB">$page </span><span style="color: #007700">> </span><span style="color: #0000BB">0</span><span style="color: #007700">) echo </span><span style="color: #DD0000">'<a href="?list='</span><span style="color: #007700">.(</span><span style="color: #0000BB">$page</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">).</span><span style="color: #DD0000">'">Predchozi strana</a>'</span><span style="color: #007700">;
    if (</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">)-</span><span style="color: #0000BB">1 </span><span style="color: #007700">> </span><span style="color: #0000BB">$items</span><span style="color: #007700">) echo </span><span style="color: #DD0000">'<a href="?list='</span><span style="color: #007700">.(</span><span style="color: #0000BB">$page</span><span style="color: #007700">+</span><span style="color: #0000BB">1</span><span style="color: #007700">).</span><span style="color: #DD0000">'">Nasledujici strana</a>'</span><span style="color: #007700">;

</span><span style="color: #0000BB">?>
</span>
</span>
</code></HTML>
Richard:
Aha, chápu. Takže proč to dělat jednoduše, když to jde složitě.
Prosím, ukaž mi, kde používám nějaké "nestandardní" funkce:
<?php
$pocet = 5; // na stranku
if(!$_GET['page']) $begin = 0; else $begin = $_GET['page']*$pocet+1;
$query = MySQL_Query('SELECT * FROM `table` LIMIT '.$begin.','.($pocet+1));
while($q = MySQL_Fetch_Array($query, MYSQL_ASSOC)) {
// cokoliv, třeba
print_r($q);
// --------------
}
if($_GET['page']) echo '<a href="?page='.($_GET['page']-1).'">< Předchozí</a>';
if(MySQL_Num_Rows($query) > $pocet) echo '<a href="?page='.($_GET['page']+1).'">Další ></a>';
?>

BTW: jen tak rychle z hlavy upravuji ten tvůj kód. Není tam žádná ochrana proti útokům atd ...
... je to heský, ale jak to dostanu do tý databáze? :-)
nesro (nesro.wz.cz)
?
jak se dostanu do databaze?
to myslis jako jak?
do databaze se dostanes PHP prikazy
viz
http://www.volny.cz/peter.mlich/www.htm#msub13
# peter-mlich.wz.cz PHP+MySQL minichat (5k 1 soubor) (POST,SESSION)
# www.volny.cz/peter.mlich (zdroj: minichat.txt)
# www.volny.cz/peter.mlich (zdroj: minichat.sql)
5k neni tak slozite na pochopeni...

jak dostanes do SQL data?
wz.cz - podpora - mysql
v pripade toho chatu spustis phpmyadmina (wz.cz - login - administrace - phpmyadmin), kliknes na SQL zalozku, zkopirujes tam obsah souboru.sql, kliknes na proved.
To ti vytvori tabulku do databaze a pak uz chat pobezi (staci prejmenovat .txt na .php , opravit nastaveni pro pripojeni k sql a spustit minichat.php)
ALE
take viz podpora, nejdriv, pokud nemas, je treba si SQL databazi aktivovat. Bez toho nemas heslo do SQL a phpadmin te bez sqlhesla nikam nepusti