![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.01.2011 Skąd: Murowana Goślina Ostrzeżenie: (0%) ![]() ![]() |
Cześć. Nie mam pojęcia jak to zrobić, a siedzę przy tym już od 15:00 =/ Algorytmów już wymyślać też próbowałem masę, ale na nic.
Np. jednym z nich miało być: zalóżmy ze jest strona [2] wtedy maximum=9*numerstrony= 18 minimum=maximum-9=9 for (i=minimum;i=maximum;i++) tutaj daje funkcje która wyświetla ci przedmiot i jako argument podajesz zmienna i) Chodzi o to, że mam skrypt wyświetlający ilość przedmiotów na stronie. Maksymalnie na 1 stronie może mieścić się 9 przedmiotów (dodam jeszcze, że są pobierane z bazy), i kiedy umieścimy 10 przedmiot, to powinien znajdować się na kolejnej stronie. Powinniśmy widzieć przedmiot z numerem 10, ale tlyko ten 1 przedmiot, bez reszty 9, które są na stronie jeden. I tak samo za każdym razem, aby osiągnąć efekt podobny do tego: Pierwsza strona, 1,2,3,4,5... 100,101,102, Ostatnia strona. Użyłem czegoś takiego.
Jednak nawet to nie działa, poza tym jest niedokończone, gdyż i tak by nie wyświetlało na kolejnych stronach przedmiotów, które są zmienną $i. Pokaże może kawałek kodu:
Wie ktoś jak zrobić, aby przedmioty $i były wyświetlane odpowiednio na każdej stronie po 9 sztuk? Powiedzmy, że dodaje w bazie 22 przedmioty. na stronie pierwszej powinno znajdować się 9, na drugiej 9, i na trzeciej 4. Nie mogę wymyślić, to jest zbyt dla mnie skomplikowane. Przeglądałem angielskie fora, jednak tam też sporo rzeczy nie potrafię zrozumieć. Będę bardzo wdzięczny. Ten post edytował waqmaz 19.05.2011, 21:41:06 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
Poczytaj o paginacji
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 23 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze masz dwie dane: 1 - ilość przedmiotów w ogóle, i 2 - ile przedmiotów wyświetlać na jednej stronie. Nazwę je $ile_ogolnie i $ile_na_stronie (> 0). Teraz musisz wygenerować ilość stron: $ilosc_stron (te Twoje[1][2] ...) - trzeba tu zadbać o to co się stanie jeśli przedmiotów będzie 0, albo gdy zmieszczą się na jednej stronie.
Co tym osiągamy? Dla 0 przedmiotów w ogóle i np. 4 przedmiotów na stronę mamy $ilosc_stron=0. Dla 1 przedmiotów w ogóle i 4 przedmiotów na stronę mamy $ilosc_stron=1. ... Dla 4 przedmiotów w ogóle i 4 przedmiotów na stronę mamy $ilosc_stron=1. Dla 5 przedmiotów w ogóle i 4 przedmiotów na stronę mamy $ilosc_stron=2. Teraz wyświetlanie. Masz dany dodatkowo $numer_strony (bo user kliknął na którąś z możliwości [1][2] ...). Najpierw obliczasz $min i $max nie przejmując się ilością przedmiotów (tak jak by ich było nieskończenie dużo).
Te obliczenia abstrahują od ilości przedmiotów. Np. masz 1 przedmiot a wyświetlasz 4 przedmioty na stronę. Chcesz znać $min i $max dla drugiej strony (teoretycznie) bo dla jednego przedmiotu nic nie powinno się wyświetlić na drugiej stronie. Wtedy oczywiście $min=5 a $max=8. Teraz wyświetlenie. Mamy dane: $ile_ogolnie, $min, $max (bo obliczyliśmy je dla zadanej strony ...)
Tutaj while jedzie od $min do $max patrząc jednocześnie czy nie zostanie przekroczona liczba przedmiotów ($ile_ogolnie). W środku while operujesz sobie $i, która to zmienna reprezentuje kolejno numery przedmiotów, które powinny się wyświetlić. Np. dla $ile_ogolnie=12 $ile_na_stronie=5 i dla trzeciej strony: $numer_strony=3 zostaną obliczone $min=11 $max=15 a zatem while wykona swój blok dwa razy - $i będzie wynosiło kolejno 11 i 12. =============================== Teraz można to uporządkować w dwa for: $n - numer strony $ile - ile na stronie $o - ilość przedmiotów w ogóle $is - ilość stron
Ten post edytował aeaeae 20.05.2011, 01:46:36 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.01.2011 Skąd: Murowana Goślina Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję ślicznie, naprawdę dobry algorytm. A mam jeszcze jedno pytanie. Czy do tego trzeba już na zapas stworzyć strony np. 200 stron o nazwie powiedzmy index.php1, index.php2, index.php3? Czy może, da się jakoś innym sposobem, lub funkcją $_GET?
Bardzo dobra praca! Chodzi o to, aby link nie wyglądał tak: A tak: Chyba, że tak się nie da, za pomocą akcji. I pewnie musiałbym tworzyć plik za każdym razem, kiedy dodaje się kolejna strona. Ten post edytował waqmaz 20.05.2011, 17:48:23 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 23 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Zrób z tego plik index.php i uruchom, to może Ci się wyjaśni ...
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.01.2011 Skąd: Murowana Goślina Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie. 'Wyjaśniło mi się'.
PS. Czuję się taki mały, przy kimś, kto napisał coś takiego ![]() Pozdrawiam. Nie chciałbym Cię już obciążać, lecz mam jeszcze jedno pytanie - nie koniecznie do Ciebie, jeżeli już Ci się nie chce. Fajnie, że pobieram parametr $_GET[p], ale jak pobrać 2 parametry w 1 linku? Potrzebuję tego dlatego, że skrypt działa tylko w indeks.php, a kiedy chcę umieścić go w folderze kategorie/osoby.php, to muszę pobrać parametr action, który sobie napisałem. Wygląda to tak, kiedy działa i jest w index.php: A tak kiedy nie działa i jest w osoby.php wyświetlane w stronie index.php poprzez parametr action: W takim przypadku jak ten w linijce powyżej musiał bym tworzyć osobne pliki, a bym chciał dołączyć to "?p=" do pliku osoby.php, jednak to nie działa (patrz niżej): , lub to: Jakieś pomysły? Ten post edytował waqmaz 20.05.2011, 18:36:33 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 23 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
No cóż ... na pewno nie miałbyś z tym aż takich trudności gdybyś pisał w Pascalu czy C++. W php bardzo przeszkadza przekazywanie zmiennej i przygotowanie kodu html przez echo - szczególnie gdy ktoś zaczyna naukę albo po prostu nie czuje tego za dobrze.
edit: index.php?zmienna1=wartosc1&zmienna2=wartosc2& ... Ten post edytował aeaeae 20.05.2011, 18:41:17 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.01.2011 Skąd: Murowana Goślina Ostrzeżenie: (0%) ![]() ![]() |
Dobra, już patrzę.
Masz rację: "bardzo trudno". Dlatego sam tego nie zrobię za chiny. Zielonego pojęcia nie mam jak, a potrzebuję tego ; /. Ehh... mogłem w ogóle nie brać się za programowanie, skoro ze mnie taka ciota. 2 lata w plecy? Aha, a ten action to u mnie wygląda tak:
Ten post edytował waqmaz 20.05.2011, 19:04:35 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 23 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Chodzi o to, że chcesz mieć ten kod, który dałem w innym pliku? Np. osoby.php? Niezależnie od folderu wystarczy, że dasz ten kod do pliku osoby.php i zmienisz tak:
Dodatkowo, jeśli chcesz obsługiwać dodatkowe zmienne GET z tych wygenerowanych linków, to możesz je dopisać w echo: Ten post edytował aeaeae 20.05.2011, 19:20:22 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.01.2011 Skąd: Murowana Goślina Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, już sobie poradziłem
![]() Kurde, właśnie odkryłem kolejny problem. Oto kod:
Już mówię o co dokładnie chodzi. Kiedy dodaję do bazy przedmioty np. biurko, kosmita, głośnik to jest dobrze dopóki nie dojdzie do ogłoszenia z numerem 9, gdyż "$ile_na_stronie=9;" jest ustawione na 9. Wtedy, kiedy dodam ogłoszenie z numerem 10, to kopiuje się nazwa ogłoszenia 9-tego. Jednak 11 ogłoszenie jest już znowu dobrze i tak aż do 18stego i sytuacja znów się powtarza. Nie wiem jak to naprawić =/ Ten post edytował waqmaz 20.05.2011, 22:01:52 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Źle ci powiedzieli. Pokaż zapytanie do bazy. Nie wyciągaj wszystkich rekordów z tabeli, tylko te, których potrzebujesz. Do tego użyj słowa kluczowego LIMIT. Wtedy pętla będzie bardzo łatwa:
A tu przykład zapytania z użyciem LIMIT Gdzie 0 - indeks początkowego rekordu, 9 - ilość rekordów Pamiętaj o używaniu mechanizmu podpinania. Jeżeli nie, upewnij się, że przekazujesz do zapytania wartości liczbowe ($_GET['numer_strony'] równie dobrze może być dalszym ciągiem zapytania i to złośliwym). Jak wyciągnąć indeks początkowego rekordu? Można tak:
Ten post edytował WebCM 20.05.2011, 23:00:31 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.01.2011 Skąd: Murowana Goślina Ostrzeżenie: (0%) ![]() ![]() |
Cały kod wyciągania przedmiotow z bazy wygląda tak =/
Ogólnie efekt wygląda tak na stronie nr 1: ![]() A na stronie nr 2 tak: ![]() Zauważymy, że numery są dobrze wyświetlane, a nazwy przedmiotów się kopiują, a w dodatku niektóre znikają - te, które już były wcześniej. A jeszcze nad to, te wszystkie nazwy są wyświetlane nie pokoleii, tylko różnie =/ Nie rozumiem dlaczego. Ten post edytował waqmaz 20.05.2011, 23:39:28 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Najlepiej gdzieś zapisać ilość rekordów, aby nie liczyć za każdym razem. Są 2 wyjścia:
1) Pobierać wszystkie rekordy z bazy i wyświetlać tylko pożądane (1 zapytanie) 2) Liczyć ilość rekordów, a następnie pobrać potrzebne, używając słowa LIMIT (2 zapytania) Ile będziesz miał rekordów w 1 tabeli? W pierwszym przypadku:
Ten post edytował WebCM 21.05.2011, 11:32:57 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 23 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Pamiętaj o używaniu mechanizmu podpinania. Jeżeli nie, upewnij się, że przekazujesz do zapytania wartości liczbowe ($_GET['numer_strony'] równie dobrze może być dalszym ciągiem zapytania i to złośliwym). To to co napisałem nie wystarczy?
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.01.2011 Skąd: Murowana Goślina Ostrzeżenie: (0%) ![]() ![]() |
WebCM - nie działą =/
efekt: ![]()
Kiedy zmieniłem kod na:
efekt jest taki: ![]() Nie wyświetla nazw ['tytul']'u i liczy co 2 =/ Co mam robić? POMOCY =/ dobra, juz wiem ze za co drugie ywyswietlanie ejst odpowiedzialne ++i, ale co z tymi tytulami, dlaczego sie nie pokazuja? =/ Ten post edytował waqmaz 23.05.2011, 16:44:21 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 14 Dołączył: 2.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Przerobiłem troszkę twój kod:
Wprawdzie mówiąc nie sprawdziłem go ale powinien działać, no chyba że mogła się wkraść się jakaś literówka. Takie ważniejsze zmiany: -Zamiast jednego zapytania do bazy stworzyłem dwa: pierwszy sprawdza ilość przedmiotów, a drugi pokazuje tylko które mieszczą się na odpowiedniej stronie za pomocą klauzuli LIMIT. -zabezpieczenie którego nie widziałem jeżeli użytkownik wpisałby sam w adresie stronę która nie istnieje: w takim wypadku wybrana zostanie maksymalna możliwa strona -po co umieszczać pętlę for w instrukcji if gdyż i tak jak nie będzie stron to pętla się nie wykona |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.01.2011 Skąd: Murowana Goślina Ostrzeżenie: (0%) ![]() ![]() |
Wszystko wygląda fajnie, tylko, że zamiast 8 przedmiotów pokazuje tylko 1.
![]() W kodzie brakuje wzmianki określającej funkcję zmiennej $ile_na_stronie np. . To chyba powinno nam pokazywać nr przedmiotu przy przedmiocie. Po za tym, coś jest pokręcone, gdyż po dodaniu , wyświetlają się wszystkie strony, a nie wszystkie przedmioty ![]() btw. $ile na stronie tez nie dziala =/ Ogólnie to pozmieniałem twój kod i teraz działałby idealnie, gdyby wyświetlał po 9 przedmiotów, a nie po jednym.
"drugi pokazuje tylko które mieszczą się na odpowiedniej stronie za pomocą klauzuli LIMIT." - to chyba nie działa. Wiem, brakuje pętli wyświetlającej ilość przedmiotów na jednej stronie, ale nie wiem jak to zrobić. Właściwie to zmienna $ile_na_stronie nie jest tą, na jaką wskazuje jej nazwa, a raczej, co, które wyświetlenie powinno być przedmiotu. Do zmiennej $ile_na_stronie trzeba przypisać jakąś pętle. Kurde... Dlatego drugie zapytanie równie dobrze, może być bez tego ile na stronie, gdyz to nic nie daje - pomnozenie razy 1:
Mmm... trzeba coś wymyślić. Równie dobrze kod w skrócie może wyglądać tak, czyli nie potrzeba w ogóle zmiennej $ile na stronie ;/
Jak dopisać zmienną tak, aby wyświetlała np. po 9 przedmiotów na stronie? Ten post edytował waqmaz 25.05.2011, 17:13:25 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 14 Dołączył: 2.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Zauważyłem moje błędy które zrobiłem ale to dopiero po teście na własnej bazie danych
![]()
Kilka błędów które naprawiłem: 1. drugie zapytanie było lekko źle napisałem - poprawione 2. Odczytywało tylko jedną pozycję. Wytłumaczenie było proste brak pętli ![]() 3. Nie wyświetlało numeru przedmiotu dlatego zmienna i też dostała swoją rolę ![]() Teraz zmienna $ile_na_stronie wskazuje maksymalną na ilość przedmiotów wyświetlanych na jednej stronie No i w czasie moich testów wyskoczył mi pewien błąd ale to dlatego że nie chciało0 mi się zmieniać nazwy pliku w linii 40. Należy o tym pamiętać jak będzie się chciało by skrypt pracował w inaczej nazwanym pliku No i to by było na tyle ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.06.2025 - 14:27 |