Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Zadanie logiczne - algorytm, ograniczenie wyswietlania wpisów
konradkw
post
Post #1





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 31.05.2010

Ostrzeżenie: (0%)
-----


Witam
Napisałem prosty skrypt zliczający który wykonuje następujące działanie:
1. Pobieranie zmiennej $ograniczenie od użytkownika (cyfra zapisana w bacie danych)
2. Zlicza ilość postów i zapisuje w zmiennej $ile
3. Dzieli ilość postów $ile przez $ograniczenie i zwraca wartość $stron
4. Jeśli istnieje reszta z dzielenia to to daje 1 do zmiennej $stron aby uwzględnić ogonek a nie tylko te posty które sie mieszczą w dzieleniu.

Oto część kodu zliczająca powyższe:
  1. if (empty($_GET['bkat'])) {
  2. $zap = mysql_query("SELECT 'id' FROM news");
  3. $ile = mysql_num_rows($zap);
  4. $stron = ($ile / $ograniczenie);
  5. $reszta = ($ile % $ograniczenie);
  6. if ($reszta > 0) { ++$stron; }}


Problem polega na tym teraz aby przyporządkować ilość wpisów ($ograniczenie) kolejno do każdej strony w tablicy o ilości elementów $stron.
Po przyporządkowaniu trzeba ograniczyć wyświetlanie tutaj:

  1. $wyn = mysql_query ("SELECT * FROM `news` WHERE `kategoria` = '$bkat' ORDER BY `id` DESC");
  2. while ($row = mysql_fetch_array($wyn, MYSQL_ASSOC))
  3. {
  4.  
  5.  
  6. ////////Tutaj potrzebuję zrobić ograniczenie wyświetlania
  7.  
  8.  
  9. echo '<div id="tytul_wpisu_bloga">'.$row['tytul'].' </b> </div><br />'.$row['tresc'].'<br /><div id="stopka_wpisu_bloga"><i>'.$row['autor'].'</i> | <i>'.$row['data'].'</i> | <i>Kategoria: '.$row['kategoria'].'</i></div><br /><br><hr><br /><br />'; }


Nadmienię jeszcze że numer strony - poszczególne numery stron są wyświetlane w ten sposób:

  1. echo '<center><b>- '; for ( $x = 1; $x <= $stron; $x++ ) { echo '<a href="index.php?menu=blog&bkat=stylizacje&page='.$x.'">['.$x.']</a> -'; } echo '</b></center></div><div id="prawy_pasek_blog">';


Co oznacza że na dole strony pokazuje się lista stron w postaci: -[1] - [2] - [3] - .... i każda z cyferek przekazuje przez $_GET['page'] numer strony.

Mam nadzieję że wyjaśniłem co i jak w miarę zrozumiale. Zależy mi na tym żeby użyć mojego kodu bo jest krótki i działa jak potrzebuję ale to czego nie mogę rozpracować to wyżej wymienione ograniczenie wyświetlania.

Będę wdzięczny za pomoc!
Pozdrawiam!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Ograniczenie wprowadzasz w zapytaniu:

  1. $wyn = mysql_query ("SELECT * FROM `news` WHERE `kategoria` = '$bkat' ORDER BY `id` DESC LIMIT {($_GET['page']-1)*$ograniczenie}, $ograniczenie");


a w pętli while wyświetlasz wszystkie wyniki tego zapytania.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
konradkw
post
Post #3





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 31.05.2010

Ostrzeżenie: (0%)
-----


linijka którą zaproponowałeś zwraca błąd:

  1. Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


To daj tak:

  1. $wyn = mysql_query ("SELECT * FROM `news` WHERE `kategoria` = '$bkat' ORDER BY `id` DESC LIMIT ".($_GET['page']-1)*$ograniczenie.", $ograniczenie");


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
konradkw
post
Post #5





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 31.05.2010

Ostrzeżenie: (0%)
-----


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given w 2 linijce:

  1. $wyn = mysql_query ("SELECT * FROM `news` WHERE `kategoria` = '$bkat' ORDER BY `id` DESC LIMIT ".($_GET['page']-1)*$ograniczenie.", $ograniczenie");
  2. while ($row = mysql_fetch_array($wyn, MYSQL_ASSOC))


Czy moge dodatkowo prosic o objascienie tego kawalka?
  1. LIMIT ".($_GET['page']-1)*$ograniczenie.", $ograniczenie


Nie bardzo rozumiem jak to ogranicza wyswietlanie.

aha jeszcze jedno pytanko czy w pierwszej linijce wszystkie zmienne nie powinny byc 'miedzy apostrofami pojedynczymi' questionmark.gif

Dziekuje z gory!

Jesli klikniemy na strone pierwsza to czy to dzialanie sie nie wyzeruje?

Zakladam ze $ograniczenie = 3.

(1-1)*3 = 0
(2-1)*3 = 3
(3-1)*3 = 6
(...)

czy to ma okreslic ilosc powtorzen petli while? co w takim razie robi tam ostatnia zmienna $ograniczenie?

Moze cos w tym stylu?

  1. $i=0
  2. while ($row = mysql_fetch_array($wyn, MYSQL_ASSOC))
  3. for ($x=1; $x<=$ograniczenie; $x++) {
  4. ++$i;
  5. if (($i <= $ograniczenie) || ($i > ($i-1)) {wyswietlenie postow}
  6. }


Dajcie prosze znac czy ide w dobrym kierunku .. ?

nie wiem dlaczego ale mi pokazuje ze mam niepotrzebna klamre {

  1.  
  2. $i=0;
  3. $wyn = mysql_query ("SELECT * FROM `violin_news` WHERE `kategoria` = '$bkat' ORDER BY `id` DESC");
  4.  
  5. while ($row = mysql_fetch_array($wyn, MYSQL_ASSOC))
  6.  
  7. {
  8. for ($x=1; $x<=$ograniczenie; $x++)
  9. { ++$i; if (($i <= $ograniczenie) && ($i > ($i-1))
  10. {
  11. echo '<div id="tytul_wpisu_bloga">'.$row['tytul'].' </b> </div><br />'.$row['tresc'].'<br /><div id="stopka_wpisu_bloga"><i>'.$row['autor'].'</i> | <i>'.$row['data'].'</i> | <i>Kategoria: '.$row['kategoria'].'</i></div><br /><br><hr><br /><br />';
  12. }
  13. }
  14. }


Ma to wogle jakis?

Haha wlasnie sprawdzilem swoj kod i owszem dzieli po 3 wpisy na podstrone ale wyswietla TYLKO najnowszy wpis po 3 razy na kazdej strone .. :/

jakies pomysly?

Juz prawie doszedlem do tego ale jeszcze trzeba rozpracowac powtarzanie sie pierwszego wpisu ..

wydaje mi sie ze to jest nie tak jak trzeba:

  1. for ($x=1; $x<=$ograniczenie; $x++)
  2. { ++$i;
  3. if (($i <= $ograniczenie) && ($i > ($i-1))



jesli to pomoze mozna dolozyc zmienna $ile_postow ktora zawiera calkowita liczbe postow (lub ilosc postow w danej kategorii w tym wypadku).


Poprawilem || na && ...

Dalem tak:

  1. $i=0;
  2.  
  3. $wyn = mysql_query ("SELECT * FROM `violin_news` WHERE `kategoria` = '$bkat' ORDER BY `id` DESC");
  4.  
  5. while ($row = mysql_fetch_array($wyn, MYSQL_ASSOC))
  6.  
  7. {
  8.  
  9. ++$i; if (($i <= $ograniczenie) && ($i > ($i-1)))
  10.  
  11. {echo '<div id="tytul_wpisu_bloga">'.$row['tytul'].' </b> </div>
  12.  
  13. <br />'.$row['tresc'].'<br /><div id="stopka_wpisu_bloga">
  14.  
  15. <i>'.$row['autor'].'</i> | <i>'.$row['data'].'</i> | <i>Kategoria: '.$row['kategoria'].'</i></div>
  16.  
  17. <br /><br><hr><br /><br />';}}


I teraz wyswietla 3 ostatnie wpisy na strone ale te same trzy na kazdej stronie.

Ten post edytował konradkw 16.11.2012, 11:46:12
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie czytałem całego tematu ale bardzo zaciekawił mnie ostatni wpis....

np. ten warunek:
&& ($i > ($i-1)
Sądzisz że $i będzie kiedykolwiek mniejsze od siebie samem zmniejszonej o 1? wink.gif

Cytat
I teraz wyswietla 3 ostatnie wpisy na strone ale te same trzy na kazdej stronie.
No bo za każdym razem masz to samo zapytanie, więc nic dziwnego że ciągle zwraca to samo.

Zaś co do ograniczenia wpisów to robi się to na poziomie MYSQL poprzez LIMIT a nie przez bezsensowne warunki w php

Poczytaj o STRONICOWANIU bo takich tematów było na pęczki u nas na forum czy też w google


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
konradkw
post
Post #7





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 31.05.2010

Ostrzeżenie: (0%)
-----


haha - nie zwrocilem uwagi na to ($i > ($i-1))

Tam kolega proponowal
  1. LIMIT ".($_GET['page']-1)*$ograniczenie.", $ograniczenie");
ale to mi nie chcialo dzialac, mozesz pomoc?

szczerze to nie do konca rozumiem jak to ma dzialac ..
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Kolega dobrze ci proponował. A jeśli ci nie działało to należało napisać co nie działa i przedstawić pełen kod jaki masz, włącznie z generowaniem linków do kolejnych podstron.

Poza tym jak juz ci pisałem nazywa się to STRONICOWANIE. Poszukaj trochę, bo naprawdę bawisz się z rzeczą która byłą już milion razy omawiana na forum.
Nawet w moim podpisie masz klasę, która robi wszystko za Ciebie w kwestii stronicowania.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
konradkw
post
Post #9





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 31.05.2010

Ostrzeżenie: (0%)
-----


w pierwszym poscie mam generator podstron - taki zliczajazy skrypcik ktory okresla ile ma byc podstron a potem inna linijka (tez w pierwszym poscie) wyswietla liste podstron jaki linki przekazujace GET-em numer danej strony

Pisalem tez co nie dziala i wstawialem caly kod - ktory ma cokolwiek wspolnego z wypisaniem wpisow.

wszystki powinno byc w tym dlugim poscie, aktualnie wyswietlenie wpisow to:

  1. $wyn = mysql_query ("SELECT * FROM `violin_news` WHERE `kategoria` = '$bkat' ORDER BY `id` DESC");
  2. while ($row = mysql_fetch_array($wyn, MYSQL_ASSOC))
  3. { echo '<div id="tytul_wpisu_bloga">'.$row['tytul'].' </b> </div><br />'.$row['tresc'].'<br /><div id="stopka_wpisu_bloga"><i>'.$row['autor'].'</i> | <i>'.$row['data'].'</i> | <i>Kategoria: '.$row['kategoria'].'</i></div><br /><br><hr><br /><br />'; }




czyli kompletnie bez ograniczenia

JUZ WIEM!!!!

Chodzilo o to ze jak nie przekaze nic w zmiennej $_GET['page'] to wyswietlenie pada bo niema nic do wyswietlenia...exclamation.gif
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #10





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Cytat(konradkw @ 16.11.2012, 13:11:08 ) *
w pierwszym poscie mam generator podstron - taki zliczajazy skrypcik ktory okresla ile ma byc podstron a potem inna linijka (tez w pierwszym poscie) wyswietla liste podstron jaki linki przekazujace GET-em numer danej strony

Pisalem tez co nie dziala i wstawialem caly kod - ktory ma cokolwiek wspolnego z wypisaniem wpisow.

wszystki powinno byc w tym dlugim poscie, aktualnie wyswietlenie wpisow to:

  1. $wyn = mysql_query ("SELECT * FROM `violin_news` WHERE `kategoria` = '$bkat' ORDER BY `id` DESC");
  2. while ($row = mysql_fetch_array($wyn, MYSQL_ASSOC))
  3. { echo '<div id="tytul_wpisu_bloga">'.$row['tytul'].' </b> </div><br />'.$row['tresc'].'<br /><div id="stopka_wpisu_bloga"><i>'.$row['autor'].'</i> | <i>'.$row['data'].'</i> | <i>Kategoria: '.$row['kategoria'].'</i></div><br /><br><hr><br /><br />'; }




czyli kompletnie bez ograniczenia

JUZ WIEM!!!!

Chodzilo o to ze jak nie przekaze nic w zmiennej $_GET['page'] to wyswietlenie pada bo niema nic do wyswietlenia...exclamation.gif



No tak, to chyba oczywiste. A LIMIT ma następującą definicję:

  1. LIMIT x -- wyświetla x wyników
  2. LIMIT x,y -- wyświetla y wyników, zaczynając od x


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 21:07