Pokaż wyniki 1 do 8 z 8

Temat: podział na strony...

  1. #1
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Unhappy podział na strony...

    mam problem z podziałem na strony wyników z bazy danych...
    chodzi o to, że baza się rozrosła i na raz pokazują mi się wszystkie wyniki...
    tak to wygląda:
    Kod:
    <<PREVIOUS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 NEXT>>
    czyli lipa bo niedługo wyjedzie mi za ekran
    chciałbym żeby to wyglądało np:
    <<< previous 1 2 3 ... 6 7 8 ... 13 14 15 next >>>
    oto to kod który odpowiada za podział na strony:
    Kod php:
    <?
    //Podział na strony
    echo "<br><TABLE BORDER=\"0\"  CELLPADDING=\"0\" CELLSPACING=\"1\" bgcolor=\"#515151\"><tr>";
    $wynik3 mysql_query ("SELECT  *  FROM  galeria WHERE kategoria LIKE '$kategoria' AND opis LIKE '%$fraza%'");
    $wynik2 mysql_query ("SELECT  *  FROM  galeria WHERE kategoria LIKE '$kategoria' AND opis LIKE '%$fraza%' LIMIT $start,10000");
    $rekordy=mysql_num_rows($wynik3);
    if (
    $start!=0) { // ominięcie POPRZEDNI jeżeli offset=0
    $prevoffset=$start-$limit;
    print 
    "<td><a class=\"a02\" href=\"galeria.php?mod=23456&start=$prevoffset&limit=$limit&kategoria=$kategoria&fraza=$fraza\"><img src=\"grafika/lewo.gif\" border=\"0\" align=\"middle\" alt=\"Cofnij\"/></a></td>";
    }
    $pages=intval($rekordy/$limit);
    if (
    $rekordy>$limit) {
    $pages++;
    }
    for (
    $i=1;$i<=$pages;$i++) { // wyswietlenie 1 2 3 4 ...
    $newoffset=$limit*($i-1);
    print 
    "<td class=\"podzial_stron\"  width=\"20\"><a class=a02 href=\"galeria.php?mod=23456&start=$newoffset&limit=$limit&kategoria=$kategoria&fraza=$fraza\">$i</a></td>";
    }
    $licz2=mysql_num_rows($wynik2);
    // sprawdzenie czy bież±ca strona nie jest ostatni±
    if ($licz2>$limit) {
    // niejest ostatni± stron± więc wy¶wietl NASTĘPNY
    $newoffset=$start+$limit;
    print 
    "<td><a class=a02 href=\"galeria.php?mod=23456&start=$newoffset&limit=$limit&kategoria=$kategoria&fraza=$fraza\"><img src=\"grafika/prawo.gif\" border=\"0\" align=\"middle\" alt=\"Do przodu\"/></a></td>";
    }
    //ostatnia
    echo "</tr></table>";
    // koniec podziału na strony
    znalazłem:
    http://www.tarnaski.eu/blog/komputer...azy-danych/13/
    ale za diabła nie mogę tego zaimplementować do swojej układanki...
    kodu nie spłodziłem sam - jest to zlepek róznych skryptów z netu + moja nie dołężna wiedza o programowaniu w php...
    można to jakoś przerobić, żeby osiągnąć zamierzony przeze mnie rezultat
    pomóżcie bo ja wymiękam...
    ***********
    * markossx *
    ***********

  2. #2
    Zarejestrowany
    Oct 2006
    Skąd
    krzesło
    Postów
    681

    Domyślnie re

    a czy tu niema buga czasem

  3. #3
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    może być, oj może bo programista ze mnie jak z koziej dupy rakietnica
    przy okazji można to zweryfikować...
    ***********
    * markossx *
    ***********

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Po pierwsze kod podatny na SQL Injection - uzywa zwyklych string concatention zamiast zapytan z parametrami (uzycie znaku ? zamias wartosci i przekazanie wartosci zmiennej jak wykonujesz zapytanie)...

    Co do wyswietlania stronami... najpierw:
    zamiast
    Kod:
    SELECT  *  FROM  galeria WHERE kategoria LIKE '$kategoria' AND opis LIKE '%$fraza%'"
    uzyc
    Kod:
    SELECT COUNT(*) AS ilosc FROM galeria WHERE kategoria = ? AND opis like '%?%'
    a nazwe kategorii podajesz jako parametr wywolania zapytania... musze odsiwezyc moja wiedze z PHP+MySQL - dawno nic nie pisalem
    Moim zdaniem uzycie LIKE do dopasowania kategorii nie ma sensu za grosz... uzyj normalnego porownania...

    Majac 'ilosc' wierszy ktore spelniaja warunek, dzielisz to przez ilosc obrazkow na stronie i zaokraglasz wynik do pierwszej calkowitej w gore masz wiec ilosc stron ile trzeba przygotowac aby pokazac wszystkie obrazki...

    Teraz odciazymy baze danych - kazemy jej wyswietlac tyle rekordow ile trzeba i tylko te co trzeba!

    Kod:
    SELECT * FROM galeria WHERE galeria = ? AND opis LIKE '%?%' LIMIT 51,10;
    Wartosci 51 i 10 nie sa przypadkowe... zakladam ze pokazujesz 5 strone wynikow a na stronie jest 10 zdjec - pierwsze bedzie mialo wiec numer 51...
    Po takim zapytaniu dostaniesz tylko 10 wierszy z bazy (o numerach 51 do 60) a nie wszystko co spelnia te warunki...

    Musialbys jednak zmienic kod aby jako parametr na 'klikaczu' z numerem strony do wyswietlenia mial numer strony na prawde... a pozniej poczatek limitu to numer strony * zdjec na stronie + 1 :-)

    Wiem ze chaotycznie ale mam nadzieje ze sie przyda...
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    dzięki Panowie ale "mów do mnie jeszcze"
    nie chce działać
    ***********
    * markossx *
    ***********

  6. #6
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    w wolnej chwili przepisze logike tego co masz wyzej... ubranie tego w HTML bedziesz musial zrobic juz sam...
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  7. #7
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Ehhh - niepredko znajde czas na przepisanie tej logiki... jednak warto zmienic choc na tyle aby nie bylo SQL injection

    Kod:
    $link = mysql_connect(....);
    $query = sprintf( "SELECT  count(*) AS ilosc  FROM  galeria WHERE kategoria = '%s' AND opis LIKE '%%s%'", 
    			mysql_real_escape_string($ketegoria, $link),
    			mysql_real_escape_string($fraza, $link));
    $wynik = mysql_query($query);
    $wiersz = mysql_fetch_assoc($wynik)
    $ilosc_zdjec = $wiersz['ilosc'];
    
    if ($ilosc_zdjec % $zdjec_na_strone > 0) {
    	$ilosc_stron = ($ilosc_zdjec / $zdjec_na_strone) + 1;
    } else {
    	$ilosc_stron = $ilosc_zdjec / $zdjec_na_strone;
    }
    Powyzszy kawalek zawiera zapytanie mysql przygotowane tak aby nie bylo SQL Injection (doslownie zgodnie z manualem PHP) oraz wyznaczenie ilosci stron uzywajac modulo
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  8. #8
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    wiadomo, czas - przerobię to po południu
    dzięx
    ***********
    * markossx *
    ***********

Podobne wątki

  1. Strony Kevina Mitnicka skompromitowane
    By shabo in forum Security
    Odpowiedzi: 8
    Autor: 02-07-2007, 15:30
  2. czemu nie wyswietla mi sie zrodlo strony?
    By ironwall in forum Java Script/Flash/Inne
    Odpowiedzi: 1
    Autor: 01-28-2007, 10:19
  3. Odpowiedzi: 4
    Autor: 01-02-2007, 17:30
  4. Jak znalezc adres ip strony??
    By Arcanus in forum Hacking
    Odpowiedzi: 10
    Autor: 09-10-2006, 15:31

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj