Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] problem ze stronicowaniem
rivanel
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 5.02.2009

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


EDIT: problem rozwiązany, zastosowałem rozwiazanie podsunięte przez matixrr zawarte w jednej z odpowiedzi Pozdrawiam

Witam,
Postanowiłem wprowadzić stronicowanie do juz istniejącego kodu wyświetlającego artykuły na stronie, posłużyłem się kodem wziętym z faqa webhelpa:

  1. <?php
  2. //ile na strone
  3. $ile = 100;
  4. $numrows = mysql_num_rows(mysql_query(&#092;"SELECT * FROM kibice\"));
  5. if(!$p) $p = 0;
  6. // zabezpieczenie przed nienumerycznymi wartosciami
  7. $p = (int)$p;
  8. $ile = (int)$ile;
  9. $query = mysql_query(&#092;"SELECT * FROM kibice ORDER BY id DESC LIMIT $p,$ile\");
  10. echo &#092;"strona: \";
  11. for($i=0;$i
  12. }
  13. ?>


wymodziłem coś takiego:

  1. <?php
  2. function printColumn11($page,$category) {
  3.        global $dbHost, $dbUser, $dbPass, $dbName;
  4.         $link = mysql_connect($dbHost, $dbUser, $dbPass) or die(&#092;"Could not connect : \" . mysql_error());
  5.        mysql_select_db($dbName) or die(&#092;"Could not select database\");
  6.  
  7.  
  8.        $ile = 100;
  9.        $numrows = mysql_num_rows(mysql_query(&#092;"SELECT * FROM PageArticle\"));
  10.        if(!$p) $p = 0;
  11.        $p = (int)$p;
  12.        $ile = (int)$ile;
  13. //tu poza zmianą nazwy na PageArticle nic nie zmieniłem
  14.  
  15.  
  16.  
  17.        $query = &#092;"SELECT art_name from Article, PageArticle WHERE art_cat_id = $category AND art_id = pga_art_id AND pga_pag_id = $page ORDER BY pga_order_number DESC LIMIT $p,$ile\"; //tu prawdopodobnie jest pies pogrzebany ale się pogubiłem (stosowanie mysql_query z przykładu powoduje błąd parsowania)
  18.  
  19.        $result = mysql_query($query) or die(&#092;"Query failed : \" . mysql_error());
  20.        echo ''.&#092;"\n\";
  21.        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  22.          echo ''.&#092;"\n\";
  23.          include('articles/'.$row['art_name'].'.acc');
  24.          echo ''.&#092;"\n\";
  25.          echo '<a href="%5C%22index.php?RETURN=%27.$_SESSION%5B%27PAGE%27%5D.%27&PAGE=TXT&ARTICLE=%27.$row%5B%27art_name%27%5D.%27%5C%22">'.&#092;"\n\";
  26.            echo ''.&#092;"\n\";
  27.        }
  28.  
  29.  
  30.  
  31.        echo &#092;"strona: \";
  32.            for($i=0;$i
  33.            echo ''.($i+1).' '; //tu też poza td tr nic nie zmieniałem
  34. //w tej linijce powinno być chyba [url="%5C%22%27.$PHP_SELF.%27?PAGE=%27.$_SESSION%5B%27PAGE%27%5D.%27?p=%27.%28$i*$ile%29.%27%5C%22"] ale po zmianie krzyczy ze nie ma takiej strony
  35.        }
  36.    }
  37. ?>


wyświetla się prawidłowa ilość linków do stron pasująca do podzielenia ilości artykułów przez 100, pojawia się ostatnie 100 artykułów. no i tu kończą się działające rzeczy
-kliknięcie na link odnoszący się do podstrony powoduje zmianę w adresie na ?p='.($i*$ile) ale strona się przeładowuje i nic z tego nie wynika, dalej jesteśmy na pierwszej stronie wyboru artykułów.. w czasie pisania tego postu uświadomiłem sobie czemu się tak dzieje (znaczy wyświetla się znowu pierwsza strona), strona ma to do siebie ze jestem przykładowo na www.strona.pl/index.php?PAGE=07 i wcisnę backspace (lub wpiszę w pasku adresu główny adres strony) wracając na www.strona.pl przeglądarka dalej pokazuje zawartość strony 07, nie wiem gdzie tego szukać (znaczy zacieśniłem obszar poszukiwań do jednego pliku ale dalej nie wiem co z tym fantem zrobić) ale za długo by wklejać na forum, jest szansa że ktoś by pomógł po PW bądź mailowo?

Ten post edytował rivanel 5.02.2009, 19:36:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
matixrr
post
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 44
Dołączył: 14.04.2007

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


art_id = pga_art_id popraw na art_id = $pga_art_id


--------------------
Pomogłem? Zmotywuj mnie do dalszej pracy i kliknij magiczny przycisk:

Go to the top of the page
+Quote Post
rivanel
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 5.02.2009

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


Cytat(matixrr @ 5.02.2009, 18:37:47 ) *
art_id = pga_art_id popraw na art_id = $pga_art_id


O, dzięki, ciekawe, że stronia działała bez tego w pierwotnym stadium, niestety nie rozwiązuje to problemu głównego

znalazłem powód dla którego krzyczało że nie ma takiej strony po wprowadzeniu <a href="'.$PHP_SELF.'?PAGE='.$_SESSION['PAGE'].'?p='.($i*$ile).'"> w wywołaniu linku
zamieniłem ?p na &p i już nie krzyczy, natomiast dalej pokazuje się tylko pierwsza strona artykułów

Ten post edytował rivanel 5.02.2009, 18:49:27
Go to the top of the page
+Quote Post
isso
post
Post #4





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


a wrzuć ten mysql z przykładu - tzn tylko tą linijkę co wyciaga newsy z bazy


--------------------
Go to the top of the page
+Quote Post
matixrr
post
Post #5





Grupa: Zarejestrowani
Postów: 207
Pomógł: 44
Dołączył: 14.04.2007

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


Co do skryptu stronicowania polecam uzyc: http://forum.php.pl/index.php?showtopic=11...st&p=567444 smile.gif


--------------------
Pomogłem? Zmotywuj mnie do dalszej pracy i kliknij magiczny przycisk:

Go to the top of the page
+Quote Post
rivanel
post
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 5.02.2009

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


Cytat(isso @ 5.02.2009, 18:49:31 ) *
a wrzuć ten mysql z przykładu - tzn tylko tą linijkę co wyciaga newsy z bazy



chodzi o to:
  1. <?php
  2. $query = mysql_query("SELECT * FROM kibice ORDER BY id DESC LIMIT $p,$ile");
  3. ?>
questionmark.gif
próbowałem na różne sposoby to przystosować ale dodanie mysql_query zawsze kończy się błędem.
Go to the top of the page
+Quote Post
isso
post
Post #7





Grupa: Zarejestrowani
Postów: 296
Pomógł: 32
Dołączył: 3.01.2005

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


to weź po prostu wypisz sobie czy na pewno dobrze jest $p, $ile... bo mam nadzieję, że wiesz jak to dziala? jak nie to zajrzyj do manuala... bo operowanie Limitem jest proste...


--------------------
Go to the top of the page
+Quote Post
decha-design
post
Post #8





Grupa: Zarejestrowani
Postów: 415
Pomógł: 46
Dołączył: 26.05.2007
Skąd: Sandomierz

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


drugi argument w LIMIT, czyli chyba u ciebie $ile, moim zdaniem powinno być tak:

Kod
ilość_rekordów * numer_strony
czyli chyba u Ciebie
  1. <?php
  2. $ile = 100; $ile2 = $_GET['page'] * $ile_n;
  3. ?>


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





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 5.02.2009

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


Cytat(matixrr @ 5.02.2009, 18:51:04 ) *
Co do skryptu stronicowania polecam uzyc: http://forum.php.pl/index.php?showtopic=11...st&p=567444 smile.gif


SUKCES biggrin.gif biggrin.gif
użyłem Twojej propozycji i wszystko działa
Wielkie dzięki

Tak to wygląda po zmianach, może ewentualne uwagi usprawnienia?
  1. <?php
  2. function printColumn11($page,$category) {
  3.        global $dbHost, $dbUser, $dbPass, $dbName;
  4.        $link = mysql_connect($dbHost, $dbUser, $dbPass) or die("Could not connect : " . mysql_error());
  5.        mysql_select_db($dbName) or die("Could not select database");
  6.        $start = $_GET['start'];
  7.        $na_stronie = 10;
  8.        if ($start==0){$start=0;}
  9.        $wykonaj=mysql_query("SELECT art_name from Article, PageArticle WHERE art_cat_id = $category AND art_id = pga_art_id AND pga_pag_id = $page ORDER BY pga_order_number desc");
  10.        $znaleziono=mysql_num_rows($wykonaj);
  11.  
  12.        print '</center>';
  13.  
  14.      
  15.  
  16.        $query = "SELECT art_name from Article, PageArticle WHERE art_cat_id = $category AND art_id = pga_art_id AND pga_pag_id = $page ORDER BY pga_order_number desc LIMIT ".($start).",".$na_stronie."";
  17.        $result = mysql_query($query) or die("Query failed : " . mysql_error());
  18.    echo '<tr class="small_brake"><td></td></tr>'."\n";
  19.        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  20.          echo '<tr><td><a name="'.$row['art_name'].'"></a>'."\n";
  21.          include('articles/'.$row['art_name'].'.acc');
  22.          echo '</td></tr>'."\n";
  23.          echo '<tr><td class="more"><a href="index.php?RETURN='.$_SESSION['PAGE'].'&PAGE=TXT&ARTICLE='.$row['art_name'].'"><img src="img/wiecej.gif"></a></td></tr>'."\n";
  24.      echo '<tr class="small_brake">'."\n";
  25.        }
  26.         while ($row = mysql_fetch_array($result))
  27.       {
  28.        echo" <b>Co nowego na stronie: {$row['name']}</b><br>
  29.        {$row['content']}<br>";
  30.        }
  31.        if($znaleziono>$na_stronie) {
  32.            print '<center>Strona ';
  33.        for($i=0; $i<ceil($znaleziono/$na_stronie); $i++)
  34.        print '<a href="index.php?PAGE='.$_SESSION['PAGE'].'&start='.($i*$na_stronie).'">'.($i+1).'</a> | ';
  35.        }
  36. }
  37. ?>


Cytat(rivanel @ 5.02.2009, 19:33:18 ) *
SUKCES biggrin.gif biggrin.gif
użyłem Twojej propozycji i wszystko działa
Wielkie dzięki

Tak to wygląda po zmianach, może ewentualne uwagi usprawnienia?


Tamten kod ma jeszcze parę śmieci po wstawianiu na szybko, ale generalnie o to chodziło biggrin.gif teraz czyszczenie i usprawnianie biggrin.gif
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: 22.08.2025 - 05:04