Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

problem s prikazom točnih vijesti preko paginga

[es] :: PHP :: problem s prikazom točnih vijesti preko paginga

[ Pregleda: 1807 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

asyk

Član broj: 46486
Poruke: 55
*.adsl.net.t-com.hr.



Profil

icon problem s prikazom točnih vijesti preko paginga26.01.2007. u 09:23 - pre 210 meseci
Hello folks,

novi sam u php-u pa se malo pokušavam naučiti neke stvari. Dakle, imam jednostavno bazu za prikaz vijesti koja se sastoji od ID-a, Naslova i Sadrzaja.

Imam skriptu koja mi prikazuje vijesti, i imam skriptu za paging da mi se vijesti iz baze prikazuju razlomljene na nekoliko stranica, ovisno o tome koliko ja definiram da mi se prikazuje vijesti po stranici. I sad, paging se prikazuje ok, odnosno poziva stranice tocno, ali mi se dogadja da mi skripta za samo prikazivanje vijesti ne radi kako treba jer ja ne znam kako da definiram da se recimo na naslovnici prikaze najnovijih 3 vijest, a kada kliknem na stranicu [2] da mi zapamti koje mi je prve 3 vijesti prikazao na onoj prethodnoj (tj. prvoj) stranici i da prikaze slijedeće 3. Da li mi netko može sugerirati kako d ato riješim? Evo koda koji mi sve odrađuje:

vijesti.php:
Code:

<?php

$db=mysql_connect ("mysql2.avalon.hr", "username", "nekipass") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("nekabaza");

$prikazi=@mysql_query('SELECT * FROM vijesti ORDER BY ID DESC LIMIT 3');
if (!$prikazi){
    echo ('<p>Sranje u Ruandi...: ' . mysql_error() . '</p>'); }

// Cupaj vijesti iz baze:
while ( $row = mysql_fetch_array($prikazi)){
    echo ('<p>'. 'Naslov:' . '<b>'.$row['Naslov'].'</b>'.'<br />'.'Sadržaj:'.'<i>'.nl2br($row['Sadrzaj']).'</i>'.'</p>');}
include ('paging.php');



$first = " <a href=\"$self?stranica=1\">[Prva]</a> ";
?>



A evo i paging.php-a:
Code:

<?php
$db=mysql_connect ("mysql2.avalon.hr", "username", "nekipass") or die ('Paging: I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("nekabaza");

// koliko redaka prikazujemo
$rowsPerPage = 3;

// po defaultu zelim da mi prikazuje prvu stranicu
$pageNum = 1;

// ako je definiran $_GET['stranica'] koristi ga kao broj stranice
if(isset($_GET['stranica']))
{
    $pageNum = $_GET['stranica'];
}

// brojim offset
$offset = ($pageNum - 1) * $rowsPerPage;

$query  = "SELECT ID FROM vijesti LIMIT $offset, $rowsPerPage";
$result = mysql_query($query) or die('Greska');

while($row = mysql_fetch_array($result))
{
    echo $row['val'] . '<br>';
}

// koliko imam zapisa
$query   = "SELECT COUNT(ID) AS numrows FROM vijesti";
$result  = mysql_query($query) or die('Greska');
$row     = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// koliko imam stranica kad koristim paging
$maxPage = ceil($numrows/$rowsPerPage);

// isprintaj link za pristup svakoj od stranica
$self = $_SERVER['PHP_SELF'];
$nav = '';
for($stranica = 1; $stranica <= $maxPage; $stranica++)
{
    if ($stranica == $pageNum)
    {
        $nav .= " $stranica ";   // nema potrebe kreirati link za trenutnu stranicu
    }
    else
    {
        $nav .= " <a href=\"$self?stranica=$stranica\">$stranica</a> ";
    }        
}

//kreiram linkove za slijedecu i prethodnu stranicu i za pocetnu i posljednju

if ($pageNum > 1)
{
    $stranica = $pageNum - 1;
    $prev = " <a href=\"$self?stranica=$stranica\"><<</a> ";
    
    $first = " <a href=\"$self?stranica=1\">[Prva]</a> ";

else
{
    $prev  = '&nbsp;'; // na prvoj sam stranici, nemoj prikazivati link za prethodnu
    $first = '&nbsp;'; // niti link za prvu stranicu
}

if ($pageNum < $maxPage)
{
    $stranica = $pageNum + 1;
    $next = " <a href=\"$self?stranica=$stranica\">>></a> ";
    
    $last = " <a href=\"$self?stranica=$maxPage\">[Posljednja]</a> ";

else
{
    $next = '&nbsp;'; // na zadnjoj sam stranici, nemoj prikazivati link za slijedecu
    $last = '&nbsp;'; // niti za posljednju
}

// prikazi navigaciju za stranice
echo $first . $prev . $nav . $next . $last;
?>



Što radim krivo? Barem link na neku referencu bi molio...

Tnx unaprijed svima koji pomognu...
 
Odgovor na temu

dootzky
Programmer, PHP, Python, web development
beograd

Član broj: 85021
Poruke: 134
*.ewepc.net.



+1 Profil

icon Re: problem s prikazom točnih vijesti preko paginga26.01.2007. u 09:46 - pre 210 meseci
pa recimo ovaj deo, u stranici vjesti.php:

Code:

$prikazi=@mysql_query('SELECT * FROM vijesti ORDER BY ID DESC [b]LIMIT 3[/b]');
...
...
// Cupaj vijesti iz baze:
while ( $row = mysql_fetch_array($prikazi)){
    echo ('<p>'. 'Naslov:' . '<b>'.$row['Naslov'].'</b>'.'<br />'.'Sadržaj:'.'<i>'.nl2br($row['Sadrzaj']).'</i>'.'</p>');}



ja bi to recimo probao ovako:
izbaci taj "LIMIT 3", to ti ne treba. neces ti imati 8273497239847 vesti, pa da ti limit 3 stedi neko vreme. pored toga, bas to ti i smeta da uzmes vesti za "sledecu" stranicu.

umesto toga, pre ispisivanja vesti na stranici, trebao bi da znas na kojoj se stranici nalazis, znaci iskoristi svoj kod iz "paging.php" stranice:
Code:

// ako je definiran $_GET['stranica'] koristi ga kao broj stranice
if(isset($_GET['stranica']))
{
    $pageNum = $_GET['stranica'];
}


a ako nije definisan, pretpostavi da si na 1. strani.

i ok -> logika za ispis vesti, malo modifikovan tvoj kod:

Code:

$pageNum *= 3; // ovo 3 ti je tvoj "offset", koliko vesti zelis da prikazujes po strani. 
                       // znaci -> ukupno trebas da ignorises: br_stranica * 3 vesti, i tek onda pocnes da prikazujes vesti za stranu na kojoj si
$ignore = 0;       // broj vesti koje ces da ignorises, jer nisu predvidjene za tu stranu

$prikazano = 0; // koliko si vesti prikazao do sada, ovo ti sluzi umesto tvog "LIMIT 3"

while ( $row = mysql_fetch_array($prikazi)){

    if ($ignore < $pageNum) { // ako jos uvek nisi "preskocio" (tj. ignorisao) dovoljan broj stranica, nemoj da ispisujes vesti, nego preskaci ove aktuelne..
         $ignore++;                // zapamti da si preskocio jos jednu
         continue;                  // nastavljas da ides kroz while, tako da se ova dole linija sa ispisom vesti nece ni prikazati, sve dok ne izignorises dovoljan broj vesti
    }

    echo ('<p>'. 'Naslov:' . '<b>'.$row['Naslov'].'</b>'.'<br />'.'Sadržaj:'.'<i>'.nl2br($row['Sadrzaj']).'</i>'.'</p>');  // prikazi vest
    $prikazano++;  // inkrementiraj ovo, da bi znao kada si zavrsio sa 3 prikazane vesti

    if ($prikazano == 3) break;  // ako si prikazao sve 3 vesti za ovu stranu -> paljba. :)
}



taj neki trip.
ovo sada nabacujem kod u forumu, nemam vremena da testiram, ali cenim da ce ti to raditi posao
logiku kapiras, znaci ->

1) izbaci ono "LIMIT 3", da bi mogao uvek da ides sam kroz sve vesti
2) znas na kojoj si strani, znaci znas i koliko vesti trebas da "preskocis" pre nego sto dodjes do onih koje trebaju da se prikazu na toj strani
3) pre ispisivanja vesti, gledaj da li si preskocio sve vesti na prethodnim stranicama, i tek kada dodjes do onih koje te zanimaju -> pusti da petlja zavrsi posao
4) petlja ce sama da stane kada zavrsisi ispis sve 3 vesti, i to ti je to.



svakako postoji i neko bolje resenje, recimo da pocinjes sa nekim ID offsetom, ali probaj prvo ovako, u najmanju ruku je interesantno resenje, nabacano za 5 minuta!

hf,
poz,
dootzky
 
Odgovor na temu

asyk

Član broj: 46486
Poruke: 55
*.adsl.net.t-com.hr.



Profil

icon Re: problem s prikazom točnih vijesti preko paginga26.01.2007. u 10:22 - pre 210 meseci
Stari, hvala na trudu, stvarno si mi to detaljno opisao! U međuvremenu sam se raspitao na još jednom mjestu pa mi rekoše ovo:

Code:

$pocetak=$_GET['stranica'] - 1;
$kraj=$_GET['stranica'] + 2;
$prikazi=@mysql_query("SELECT * FROM vijesti ORDER BY ID DESC LIMIT $pocetak, $kraj"); 


I to mi je riješilo problem instant. A sad proučavam LIMIT-e, budući da ste mi i ti i ovaj drugi isto rekli. Hvala puno!
 
Odgovor na temu

dootzky
Programmer, PHP, Python, web development
beograd

Član broj: 85021
Poruke: 134
*.ewepc.net.



+1 Profil

icon Re: problem s prikazom točnih vijesti preko paginga26.01.2007. u 12:55 - pre 210 meseci
opusteno, drago mi je da ti je problem resen ;)

poz,
d
 
Odgovor na temu

[es] :: PHP :: problem s prikazom točnih vijesti preko paginga

[ Pregleda: 1807 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.