Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Stronnicowanie mysql - błąd
Forum PHP.pl > Forum > PHP
raum
Posiadam taki fragment kodu:

  1. $ile_newsow_na_stronie = 3;
  2.  
  3. $sql = "select * from wpisy WHERE kategoria=".$id." ";
  4.  
  5. $wynik = mysql_query($sql);
  6. $records = mysql_num_rows($wynik);
  7. if (!$_GET['s']) { $s = 1; } else { $s = $_GET['s']; }
  8. $do = $s*$ile_newsow_na_stronie;
  9. $od = $do-$ile_newsow_na_stronie;
  10. if ($do>$records) { $do = $records; }
  11.  
  12. $sql = "select * from wpisy WHERE kategoria=".$id." order by id desc limit $od, $do; ";
  13.  
  14. $wynik = mysql_query($sql);
  15. $records = mysql_num_rows($wynik);
  16. for ($i=$od; $i < $do; $i++) {
  17. $wiersz = mysql_fetch_assoc($wynik);
  18. $id = $wiersz['id'];
  19. $tytul = $wiersz['tytul'];
  20. $tresc = $wiersz['tresc'];
  21. $adres = $wiersz['adres'];
  22.  
  23. echo '<h2><b><a href=http://'.$adres.' >'.$tytul.'</b></h2></a><br><div class="story"> '.$tresc.'<br /><br></div>';
  24.  
  25. };
  26.  
  27. $sq = "select * from wpisy WHERE kategoria=".$id." ";
  28. $wyn = mysql_query($sq);
  29. $r = mysql_num_rows($wyn);
  30. $re = ceil($r/$ile_newsow_na_stronie);
  31. if ($r > $ile_newsow_na_stronie) for($a=1; $a<=$re; $a++) { echo "<a href=\"?s=$a\"> $a </a>"; }
  32. {
  33. }


Oczywiście chcę pobrać listę artykułów z kategorii , którą ostatnio wybrałem. Problem jest w dwóch miejscach - gdy w bazie mam 5 rekordów a chcę wyświetlić tylko 3 to nie wyświetlają mi się na dole cyfry 1,2,3 itp. Gdy chcę wyświetlić 4 rekordy z 5 to wyświetla się normalnie:/. Drugi problem - gdy wybieram strone 2 by przejść zobaczyć rekord to wyskakuje mi błąd w liniach
  1. $records = mysql_num_rows($wynik);
Próbuję już od godzinki coś z tym zrobić ale niestety nie potrafię sobie poradzić. Proszę o jakąkolwiek pomoc albo wskazówki. Dziękuje i czekam na wasze opinie.
altruista2
  1. <?
  2.  
  3. $ile_newsow_na_stronie = 3;
  4.  
  5. $s = intval($_GET['s']) - 1;
  6. list($ilosc) = @mysql_fetch_row(mysql_query("select count(*) from wpisy WHERE kategoria=".$id));
  7.  
  8. if(($s < 0) || (($s * $ile_newsow_na_stronie) > $ilosc)) $s = 0;
  9.  
  10. $q = mysql_query("select id, tytul, tresc, adres from wpisy WHERE kategoria=".$id." order by id desc limit ".($s * $ile_newsow_na_stronie).", $ile_newsow_na_stronie");
  11. while(list($id, $tytul, $tresc, $adres) = @mysql_fetch_row($q)) {
  12. echo '<h2><b><a href=http://'.$adres.' >'.$tytul.'</b></h2></a><br><div class="story"> '.$tresc.'<br /><br></div>';
  13. }
  14.  
  15. $max = intval($ilosc / $ile_newsow_nastronie);
  16. for($i=0;$i<$max;$i++) {
  17. if($s == $i) {
  18. echo ($i + 1).' ';
  19. }else{
  20. echo '<a href="#">'.($i+1).'</a> ';
  21. }
  22. }
  23.  
  24. ?>
raum
Zastosowanie twojej pomocy przyniosło rozwiązanie ale gdy zastosowuje ostatnią linie

  1. echo '<a href="#">'.($i+1).'</a> ';


to wyświetlają się strony po porcjowane ale nie wyświetlają się w nich wyniki.
Możesz powiedzieć jeszcze gdzie leży przyczyna?
altruista2
Och myślałem że sam na to wpadniesz smile.gif Po prostu podmień na to:
  1. echo '<a href="?s='.($i+1).'">'.($i+1).'</a> ';
raum
Właśnie nie działa

  1. echo '<a href="?s='.($i+1).'">'.($i+1).'</a> ';


i tego właśnie nie rozumie.

altruista2 może masz jeszcze jakiś pomysł o co może chodzić?
altruista2
Hmmm tzn. że nie wyświetlają się newsy czy strona jest ciągle pierwsza (1)
raum
wchodze w kategorie wyświetlają się 2 newsy z 4 bo tak mam ustawioną zmienną $ile_newsow_na_stronie = 2 przechodzi do drugiej strony aby odczytać 2 następne i wyświetla się pusta strona bez newsów i bez żadnego błędu.
altruista2
Zrobiłem na pewno literówkę, za co przepraszam:
  1. $max = intval($ilosc / $ile_newsow_nastronie);

Powinno być
  1. $max = intval($ilosc / $ile_newsow_na_stronie);


A jeśli chodzi o resztę to na 100% wszystko jest OK, przetestowałem ten skrypt.

Możlwie błędy:

a) zmienna $id jest pusta
cool.gif jedna z tych kolumn: id, tytul, tresc, adres nie istnieje.
raum
Co do literówki to poprawiłem wcześniej bo mi wyskoczył błąd i podał w której linii i sie skapłem tongue.gif Czy id puste? SKoro wszystkie rekordy potrafią się wyświetlić w kategorii to chyba nie powinna być pusta? bo mam 2 bazy jedna wpisy a druga wpisy_cat gdzie w tej drugiej podane są pola cat_id , nazwa_cat i cat_opis a pierwszą wpis to wiadomo standardowo id, tytul, tresc, adres i kategoria. Może błąd jest w bazie? Co o tym myślisz?
altruista2
Dodaj po tym:
  1. $q = mysql_query("select id, tytul, tresc, adres from wpisy WHERE kategoria=".$id." order by id desc limit ".($s * $ile_newsow_na_stronie).", $ile_newsow_na_stronie");

Linijkę:


Obstawiam że mysql zwróci jakiś błąd.

Tu masz mój test:
http://www.gamesbnet.com/status/wtf.php
Wszystko działa bez zarzutu.
raum
Masz racje błąd zwraca następujący Something is wrong in your syntax obok 'order by id desc limit 0, 1' w linii 1
nospor
pewnie zmienna $id nie jest ustawiona i zapytanie szlag trafia. Na przyszlosc sprawdzajcie co dana zmienna zawiera a nie ufacie kobiecej intuicji ktorej nie macie winksmiley.jpg
raum
Hmmm..czyli z poprzedniego pytania mam przekazać do kategorie.php zmienną $id?
altruista2
oczywiscie ze tak smile.gif
raum
Aha no to mam zadanie ładnie ciężkie bo zbytnio nie rozumie jakby to powiedzieć w jednym pliku , który wyświetla liste dostępnych kategorii widnieje kod

  1. $wynik = mysql_query ("SELECT * FROM wpisy_cat");
  2. while ($wynik && $rekord = mysql_fetch_array ($wynik)) {
  3. echo "<a href=\"katalog.php?id=".$rekord['cat_id']."\">";
  4. echo $rekord['cat_nazwa']."</a> | ";


a w kategorie.php to co wyżej wpisane. Czy mam jakoś zmienną rekord['cat_id'] wmontować do pliku gdzie wyświetla stronicowanie czy jak ?
altruista2
Najprostsze rozwiązane:
po prostu na początku tego skryptu dodaj
  1. define('DOMYSLNA_KATEGORIA',1);
  2. $id = intval($_GET['cat']);
  3. if($id <= 0) $id = DOMYSLNA_KATEGORIA;

a to:
  1. echo '<a href="?s='.($i+1).'">'.($i+1).'</a> ';

zamień na to:
  1. echo '<a href="?s='.($i+1).'&cat='.$id.'">'.($i+1).'</a> ';


To nie jest OK bo jeśli jakiś idiota będzie się bawił zmiennymi w GET to mu wyjdzie brak newsów, ale nie chce mi się pisać więcej, jest w końcu 00:40 w nocy tongue.gif
raum
Ok działa smile.gif song dla ciebie altruista2 aha i jak będziesz czytał ten post to odezwij sie do mnie na gg 2396984 mam pytanie w sprawie serwisu gamesbnet.com
altruista2
Kliknij "pomógł" jak możesz bo jak przeglądam tematy z tego podforum to ciągle czytam ten twój 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.