Stránkování (rozdělení tabulky na více stránek) – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Stránkování (rozdělení tabulky na více stránek) – PHP – Fórum – Programujte.comStránkování (rozdělení tabulky na více stránek) – PHP – Fórum – Programujte.com

 

divady
~ Anonymní uživatel
21 příspěvků
20. 1. 2014   #1
-
0
-

Dobrý den, potřeboval bych poradít. chtěl bych rozdělit seznam aby se zobrazoval na více stránek. 
ten seznam  tvořenej ze zobrazení několika položek. tady je adresa .. http://www.srovnejokna.cz/poptavky 

jsou to dvě tabulky a pro každou existuje jinej SQL dotaz.

a já bych potřeboval aby se třeba na jednej stránce ukazovalo z každej tabulky 10 položek a dalších 10 položek na další a td..

tady jsem se pokoušel to vyřešit přes limit

<?
   $pocet=10;
if ($_GET[stranka]) $stranka=$_GET[stranka];
else $stranka=1;
$page=($stranka-1)*$pocet;
const pzn=33;
                
$sql=new mysql();
 
 
$c_arr = array();
$c_buf = '';
 
$c_zak = $sql->arrays("SELECT * from vz WHERE vlozeno > DATE(NOW()) ORDER BY ID DESC LIMIT $page,$pocet");
$c_pop = $sql->arrays("SELECT * from poptavky WHERE zalozeno > DATE(NOW()) ORDER BY ID DESC LIMIT $page,$pocet");
 
 
if ($c_zak) {
    $c_format = '%s, za %s&nbspKÄŤ - %s';
 
    foreach ($c_zak as $key => $value) {
        array_push($c_arr,
            sprintf($c_format, c_strip_str_len($value[nazev], pzn),
                c_nf($value[cena]),
                $value[mesto]
            )
        );
    }
 
    
}
 
if ($c_pop) {
    $c_format = '%s, za %s&nbspKÄŤ';
 
    foreach ($c_pop as $key => $value) {
        array_push($c_arr,
            sprintf($c_format, c_strip_str_len($value[label], pzn),
                c_nf($value[cena])
            )
        );
    }
}
 
shuffle($c_arr);
 
$c_format = '<a href="/poptavky/">%s...</a>&nbsp;&nbsp;';
 
foreach ($c_arr as $key => $value) {
        $c_buf .= sprintf($c_format, $value);
}
 
$fce[c_banner_poptavky] = $c_buf;
 
// BANNER ---
 
//$q=$sql->arrays("SELECT * from vz ORDER BY ID DESC LIMIT $page,$pocet");
$q=$sql->arrays("SELECT * from vz WHERE vlozeno < DATE(NOW()) ORDER BY ID DESC LIMIT $page,$pocet");
if ($q) foreach ($q as $res){
 
if (date ("d.m.Y")==date("d.m.Y",strtotime("$res[vlozeno]"))) $dat="dnes";
 elseif (date ("d.m.Y", strtotime("-1 day"))==date("d.m.Y",strtotime("$res[vlozeno]"))) $dat="vÄŤera";
 else $dat=date("d.m.Y", strtotime("$res[vlozeno]")); 
 
 if (strlen($res[nazev]) > pzn) $nazev=substr($res[nazev],0,pzn).'...'; else $nazev=$res[nazev];
 
$c_format = '%s, za %s&nbspKÄŤ - %s';
$anw.="<TR ROWSPAN=\"2\"><TD class=\"podtrh\"><A HREF = \"/poptavky/\">".
c_strip_str_len(sprintf($c_format, $res[nazev], c_nf($res[cena]), $res[mesto]), 120, '...')
."</A><TD class=\"datum\">$dat</TR>";
}
$fce[zakazky]=$anw;
 
$anw="";
 
 
 
$q=$sql->arrays("SELECT * from vz WHERE vlozeno > DATE_SUB(NOW(), INTERVAL 120 DAY) ORDER BY ID DESC LIMIT $page,$pocet");
if ($q) foreach ($q as $res){
 
if (date ("d.m.Y")==date("d.m.Y",strtotime("$res[vlozeno]"))) $dat="dnes";
 elseif (date ("d.m.Y", strtotime("-1 day"))==date("d.m.Y",strtotime("$res[vlozeno]"))) $dat="vÄŤera";
 else $dat=date("d.m.Y", strtotime("$res[vlozeno]")); 
 
$anw.="<TR><TD class=\"podtrh\"><A HREF = \"/zakazka-detail-$res[ID]/\">$res[nazev], za ".c_nf($res[cena])."&nbspKÄŤ<BR>$res[mesto]</A><TD class=\"datum\">$dat</TR>";
}
$fce[zakazky2]=$anw;
 
// ZAKÁZKY ---
 
 
$q=$sql->arrays("SELECT * from poptavky WHERE zalozeno > DATE_SUB(NOW(), INTERVAL 120 DAY) ORDER BY ID DESC LIMIT $page,$pocet");
if ($q) foreach ($q as $res){
 
 if (date ("d.m.Y")==date("d.m.Y",strtotime("$res[zalozeno]"))) $dat="dnes";
 elseif (date ("d.m.Y", strtotime("-1 day"))==date("d.m.Y",strtotime("$res[zalozeno]"))) $dat="vÄŤera";
 else $dat=date("d.m.Y", strtotime("$res[zalozeno]")); 
 if ($res[cena]=="0") $cena = "";
  else $cena = ", za ".c_nf($res[cena])."&nbspKÄŤ";
 
 $pop.="<TR><TD class=\"datum\">$dat<TD class=\"podtrh\"><A HREF = \"/poptavka-detail-$res[ID]/\">$res[label]$cena</A></TR>";
}
 
$fce[poptavky2]=$pop;
 
$pop="";
 
//$q=$sql->arrays("SELECT * from poptavky ORDER BY ID DESC LIMIT $page,$pocet");
$q=$sql->arrays("SELECT * from poptavky WHERE zalozeno < DATE(NOW()) ORDER BY ID DESC LIMIT $page,$pocet");
if ($q) foreach ($q as $res){
 
 if (date ("d.m.Y")==date("d.m.Y",strtotime("$res[zalozeno]"))) $dat="dnes";
 elseif (date ("d.m.Y", strtotime("-1 day"))==date("d.m.Y",strtotime("$res[zalozeno]"))) $dat="vÄŤera";
 else $dat=date("d.m.Y", strtotime("$res[zalozeno]")); 
  if ($res[cena]=="0") $cena = "";
  else $cena = ", za ".c_nf($res[cena])."&nbspKÄŤ";
 
if (strlen($res[label]) > pzn) $nazev=substr($res[label],0,pzn).'...'; else $nazev=$res[label];
 
$c_format = '%s%s';
 $pop.="<TR><TD class=\"datum\">$dat<TD class=\"podtrh\"><A HREF = \"/poptavky/\">".
c_strip_str_len(sprintf($c_format, $nazev, $cena), 120, '...')
 ."</A></TR>";
}
 
return $pop;
 
 
 
// POPTÁVKY ----
 
 
 
?>

ale ted nevim kam bych mněl vložit stránkování 

$qp = new pager("SELECT * FROM poptavky ORDER BY ID DESC",'stranka',$this->sql->sql_connect);
$qp->PageSize = $pocet; 
$qp->PagerAlign = "center";
$qp->DataBind();
echo $qp->DrawPager();

ale kamkoliv to pak v ložím tak stránka už nejde vubec načíst.

stránka se pak skláda tady

       <div class="full-scale">
       <div id="last-poptavky">
       <h3>nejnovější poptávky</h3>
        <table>
{@poptavky2}
        
        
        
        </table>
        
        </div>
       <div id="ver-zakazky">
       <h3>veřejné zakázky</h3>
       <table>
       {@zakazky2}
       </TABLE>
       </div>        
       </div>

už jsem bezradnej nevím jak dál.

Nahlásit jako SPAM
IP: 88.100.146.–
Ericsko+3
Stálý člen
20. 1. 2014   #2
-
0
-

#1 divady
Co pouzivas na vyrenderovanie pageru?
Co je to za trieda "pager"?

Nahlásit jako SPAM
IP: 88.212.34.–
divady
~ Anonymní uživatel
21 příspěvků
20. 1. 2014   #3
-
0
-

to pager mnělo bejt aktualní stránka na který se nacházíte

Nahlásit jako SPAM
IP: 88.100.146.–
Ericsko+3
Stálý člen
20. 1. 2014   #4
-
0
-

#3 divady
Ok, ale kde je ta trieda definovana?

nieco ako:

class pager {

}
 

Nahlásit jako SPAM
IP: 88.212.34.–
divady
~ Anonymní uživatel
21 příspěvků
20. 1. 2014   #5
-
0
-

to bohužel nevím jak se udělá, jsem začatečník, ještě se v tom strácím

Nahlásit jako SPAM
IP: 88.100.146.–
peter
~ Anonymní uživatel
3981 příspěvků
21. 1. 2014   #6
-
0
-

mnělo - mě? | strácím - z? ... Katastrofa, ten pravopis, jako :)

Kdyz nevis, co ten kod dela, tak si napis vlastni.
V zasade potrebujes 2 sql dotazy, v tom kodu je jich miliony. Jednim zjistis pocet vsech polozek pro listovani, druhym vytahns tech 10 vybranych pro zobrazeni. Funkci pro zobrazeni pageru pak predas 3 cisla: aktualni stranka, pocet zaznamu na stranku, pocet polozek.

SELECT COUNT(*) FROM poptavky -- tim zjistujes jen pocet, jedno cislo
SELECT * FROM poptavky LIMIT 20,10 -- od dvacateho zaznamu, deset polozek

K tomu samozrejme spravne pridat WHERE pro oba dotazy a pro druhy ORDER BY, protoze pro prvni nema smysl jedno cislo nejak serazovat, ze jo :)
 

Nahlásit jako SPAM
IP: 2001:718:2601:400:0:5efe:...–
divady
~ Anonymní uživatel
21 příspěvků
21. 1. 2014   #7
-
0
-

Děkuji, podívám se na to a dám Vám vědět.

ještě bych se chtěl omluvit za pravopis, jsem dyzlektik a spěchal jsem, přečetl jsem si to posobě až když jsem to odesla a už to nešlo editovat. tak se vám omlouvám

Nahlásit jako SPAM
IP: 88.100.146.–
Ericsko+3
Stálý člen
21. 1. 2014   #8
-
0
-

#6 peter
Nie celkom tak. On chce zobrazit zaznamy z 2 tabuliek vedla seba.

Tu bude potrebne trosku ine riesenie. Mozu mat rozny celkovy pocet zaznamov, takze treba zistit, ktory recordset ma viac a pager prisposobit podla neho. 

Logicky postup:

  • count(A), count(B)
  • $count = vacsie cislo z count(A), count(B)
  • $page = ceil($count / $limit)
  • new pager($page, $limit, $count)
  • $recordsetA = query(A).limit($page, $limit)
  • $recordsetB = query(B).limit($page, $limit)

Potrebujes to prepisat do php? ;)

Na samotne zobrazenie pagera moze pomoct nejake trieda, ktora ti vyrenderuje html podla danych parametrov ($page = poradove cislo stranky, $limit = pocet zaznamov na stranku, $count = celkovy pocet zaznamov)

Mozes skusit napr. tuto: https://code.google.com/p/spaceshipcollaborative/wiki/PHPagination

Nahlásit jako SPAM
IP: 88.212.34.–
divady
~ Anonymní uživatel
21 příspěvků
22. 1. 2014   #9
-
0
-

mockrát děkuji, bohužel jsem neměl ještě čas se na to pořádně kouknout.

ale ještě se celkem ztrácím v příkazech do mysql a jak jsem ke všemu nesestavoval já, tak mi vždycky trvá než na to přijdu.

dokázal jsem rozchodit stránku, kde byla jenom jedna tabulka, ale jak jsou tu dvě, tak jsem ztracený.

Nahlásit jako SPAM
IP: 88.100.146.–
Ericsko+3
Stálý člen
22. 1. 2014   #10
-
0
-

#9 divady
Wow. Ty si bud v inom casovom pasme, alebo mas fakt starosti ;)

(podla casu tvojho prispevku)

Nahlásit jako SPAM
IP: 88.212.34.–
divady
~ Anonymní uživatel
21 příspěvků
26. 1. 2014   #11
-
0
-

omlouvám se že odpovídám tak pozdě, ale mam tedkon zkouškové období. až zkončí, tak se pokusim podle návodu tady dodělat tu stránku tak aby to fungovalo a dám vám vědět, jak to dopadlo

Nahlásit jako SPAM
IP: 78.128.148.–
peter
~ Anonymní uživatel
3981 příspěvků
27. 1. 2014   #12
-
0
-

Ericsko - Aha, to by se dalo resis pomoci UNION. Pridat tam sloupec tabulka (1,2) a vybrat tim dotazem prislusna data. A nebo proste dat vedle sebe dva samostatne formulare. Udaje pro listovani bych asi ukladal do session.

Nahlásit jako SPAM
IP: 2001:718:2601:400:0:5efe:...–
divady
~ Anonymní uživatel
21 příspěvků
20. 2. 2014   #13
-
0
-

#10 Ericsko
Měl jsem zkouškové a nějak se mi to nahrnulo všechno najednou,

jak že by to mělo vypadat?, vůbec mě nenapáda jak by to mělo vypadat, a už vubec ne jak bych to implementoval. PHP budu mít až v letnim semestru. a do tý doby čekat nemohu.

prosím o pomoc.

Nahlásit jako SPAM
IP: 46.135.105.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

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

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

 

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