Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podział na strony...
Forum PHP.pl > Forum > PHP
Pawel16
Tak jak w temacie. Poniższy skrypt ma za zadanie kolejno:
1. Podzielić artykuły newsów na strony, co w tym, wyjać odpowiednią ilość artykułów i je umieścić w tablicy
2. Wyświetlić odpowiednie artykuły na odpowiedniej stronie
3. Wyświetlić spis treści

  1. <?php
  2. //PODZIAŁ NA STRONY
  3. //Ilość artykułów podzielona przez ilość która ma być wyświetlona na jednej stronie
  4. $wynik = (mysql_num_rows(mysql_query("SELECT * FROM `artykuly`")) / 5);
  5. $ilosc_stron = (intenger)$wynik;
  6.  
  7. $od_ktorego = 0;//+ 5, Podanie początkowej pozycji wybierania artykułów
  8. $do_ktorego = $od_ktorego + 5;//+ 5,Określanie ilości ile na stronę
  9.  
  10. $tablica_stron = array();//Utworzenie tablicy ze stronami
  11. for($i = 1; $i <= $ilosc_stron; $i++)
  12. {
  13. //Treść zapytania(ze wzgędu na zmieniajace sie wartości nie została podana bezpośrednio w zapytaniu dla utrzymania jego bezpieczeństwa i pewności działania aplikacji)
  14. $artykuly = mysql_query("SELECT * FROM `artykuly` LIMIT $od_ktorego, $do_ktorego");//Zapytanie
  15. while($id = mysql_fetch_assoc($artykuly))//Wyjęcie odpowiednich id artykułów
  16. {
  17. $tablica_stron[$i] = array($id['id']);//Przypisanie odpowiednich id artykułów
  18. }
  19. //Zwiększenie określeń atrybutu LIMIT dla zapytania aby wyciągnąć kolejne artykuły, anie te same
  20. $od_ktorego += 5;
  21. $do_ktorego += 5;
  22. }
  23.  
  24. //WYŚWIETLENIE
  25. $card = htmlspecialchars($_GET['card']);
  26. if($card == 1 || empty($card))
  27. {
  28. for($a = 0; $a < 5; $a++)
  29. {
  30. $zapytanie2 = mysql_query("SELECT * FROM `artykuly` WHERE `id`='".$tablica_stron[0][$a]."'");
  31. while($artykul = mysql_fetch_assoc($zapytanie2))
  32. {
  33. $ilosc_kom=mysql_num_rows(mysql_query("SELECT * FROM `art_komentarze` WHERE `id_artykulu`='".$artykul['id']."'"));
  34. echo "<table>";
  35. echo "<tr><td colspan='2'><h1>".$artykul['temat']."</h1></td></tr>";
  36. echo "<tr><td colspan='2'>".nl2br($artykul['tresc'])."</td></tr>";
  37. echo "<tr><td>".$artykul['data']."</td><td><a class='linkv linkl linkh' href='index.php?page=atrykul&id=".$artykul['id']."'>Komentarze(".$ilosc_kom.")</a></td></tr>";
  38. echo "</table>";
  39. echo "<a class='linkv linkl linkh' href='index.php?artykuly=true'>Pokaz wszystkie artykuły</a>";
  40. }
  41. }
  42. }
  43. else
  44. {
  45. $nowe_card = $card - 1;
  46. for($a = 0; $a < 5; $a++)
  47. {
  48. $zapytanie2 = mysql_query("SELECT * FROM `artykuly` WHERE `id`='".$tablica_stron[$nowe_card][$a]."'");
  49. while($artykul = mysql_fetch_assoc($zapytanie2))
  50. {
  51. $ilosc_kom=mysql_num_rows(mysql_query("SELECT * FROM `art_komentarze` WHERE `id_artykulu`='".$artykul['id']."'"));
  52. echo "<table>";
  53. echo "<tr><td colspan='2'><h1>".$artykul['temat']."</h1></td></tr>";
  54. echo "<tr><td colspan='2'>".nl2br($artykul['tresc'])."</td></tr>";
  55. echo "<tr><td>".$artykul['data']."</td><td><a class='linkv linkl linkh' href='index.php?page=atrykul&id=".$artykul['id']."'>Komentarze(".$ilosc_kom.")</a></td></tr>";
  56. echo "</table>";
  57. echo "<a class='linkv linkl linkh' href='index.php?artykuly=true'>Pokaz wszystkie artykuły</a>";
  58. }
  59. }
  60. }
  61. for($j = 1; $j <= $ilosc_stron; $j++)
  62. {
  63. echo "<a href='index.php?page=index&card=".$j."'>[".$j."]</a>";
  64. }
  65. ?>


Niby wszystko okey ale jednak kod powoduje dziwne błędy, których przyczyn nie mogę znaleźć. Między innymi: złe wyświetlanie newsów(inne niż powinny), wielokrotne wyświetlenie tego samego newsa, itp. Proszę o pomoc w znalezieniu błędów tych i innych jakie dostrzerzecie.

Proszę nie oceniać jakosci skryptu ponieważ jest to pierwszy skrypt, który robię tego typu(znaczy, który sam wymyśliłem i ma za zadanie podzielić coś automatycznie na strony). Proszę więc o pomoc w znalezieniu błędów i ewentualne pokazanie teoretycznie innych sposobów zrobienie czegoś takiego. Tablice nie są moją mocną stroną, więc staram się ją rozwijać.

Przepraszam za błędy ortograficzne ale sie śpieszyłem ;P.

Dzięki z góry.
outsider
Zobacz, inkrementujesz zmienne o 5 $od_ktorego += 5; $do_ktorego += 5;

Kod
Petla | $od_ktorego | $do_ktorego
1.    0    5
2.    5    10
3.    10    15


Jak dobrze zauwazysz to newsa o nr 5,10... pobierasz dwa razy! A w jedenj petli pobierasz 6 newsow, bo liczysz od 0 - 5.
Oraz drugi blad, tak powinno wygladac zapytanie SQL 'SELECT (...) LIMIT od, ilosc' a masz '(...) LIMIT od, do'. Wiec zmienna $do_ktorego powinna byc stala, nie zmieniasz jej wartosci.

Co do zapytania:
"SELECT * FROM `art_komentarze` WHERE `id_artykulu`='".$artykul['id']."'"
pole id_artykulu masz w bazie jako TEXT czy INT ? Bo z tego zapytania wynika ze TEXT (poniewaz uzyles apostrofy ' oraz ' ), a powinno INT smile.gif
Pawel16
Poprawiłem jednak błędy nadal występują. Proszę oto strona, na której skrypt jest używany i efekt kodu: www.spychalski.cba.pl
A tu jest poprawiony kod: http://wklej.org/id/366832/

Teraz jednak nie wiem dlaczego zostaje wyświetlony pierwszy zły news bo to nie jest ostatni napisany, a niedosć to jest powtarzany wiele razy.

Z góry sory za spam.

Temat już zamknięty... Pomógł kumpel ale twoja pomoc *OuTSideR* też sie przydała.

Temat zakończony smile.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.