Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] problem ze stronicowaniem
Forum PHP.pl > Forum > Przedszkole
rivanel
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?
matixrr
art_id = pga_art_id popraw na art_id = $pga_art_id
rivanel
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
isso
a wrzuć ten mysql z przykładu - tzn tylko tą linijkę co wyciaga newsy z bazy
matixrr
Co do skryptu stronicowania polecam uzyc: http://forum.php.pl/index.php?showtopic=11...st&p=567444 smile.gif
rivanel
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.
isso
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...
decha-design
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. ?>
rivanel
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.