Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Stronicowanie
Forum PHP.pl > Forum > Przedszkole
mrk9109
Witam według artykułu próbowałem zrobić sobie stronicowanie wersja była w mysql a ja używam mysqli to zacząłem przebierać i nie poradziłem sobie z tym :< do końca . Mam gdzieś błąd w lini 17 w zapytaniu ale nie wiem gdzie on jest
  1. <?php
  2.  
  3. $zapytanie = mysqli_query($polaczenie,"SELECT id, tytul, data, autor, tresc FROM aktualnosci ORDER by `id` DESC ");
  4. $ile = mysqli_num_rows($zapytanie);
  5. if($ile == 0) // Sprawdzanie czy jest cos dodane w bazie
  6. {
  7. echo '<br/><br/>Brak treści';
  8. }
  9.  
  10.  
  11. define('ILOSC_WYNIKOW_NA_STRONIE', 5); // ile ma być wyświetlanych rekordów na stronie
  12.  
  13. $zapytanie = mysqli_query($polaczenie,"SELECT COUNT(*) FROM aktualnosci"); // Zapytanie liczące ilość wpisów w bazie
  14. $wynik = mysqli_query($zapytanie);
  15. $iloscWpisow = mysqli_fetch_row($wynik)
  16.  
  17. $zapytanie = mysqli_query($polaczenie,"SELECT *
  18. FROM aktualnosci
  19. ORDER BY date ASC
  20. LIMIT ".mysqli_real_escape_string()((int)$_GET['str']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE);
  21.  
  22. $wynik = mysqli_query($zapytanie);
  23.  
  24. while($db = $zapytanie -> fetch_assoc($wynik) ) {
  25.  
  26. $id=$db['id'];
  27. $tytul=$db['tytul'];
  28. $data=$db['data'];
  29. $autor=$db['autor'];
  30. $tresc=$db['tresc'];
  31.  
  32. include("templatki/aktualnosci.html");
  33.  
  34. }
  35.  
  36. //jesli nie jesteśmy na pierwszej stronie
  37. if($_GET['str']>0){
  38. //wyswietlamy link do poprzedniej strony
  39. echo '<a href="?str='.($_GET['str']-1).'">Poprzednie</a> ';
  40. }
  41. for($i = 0;$i<=floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE);$i++){
  42. echo '<a href="?str='.($i).'">[ '.($i+1).' ]</a> ';
  43. }
  44. //jeśli nie jesteśmy na ostatniej stronie
  45. if($_GET['str']<floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE)){
  46. //wyswietlamy link do nastepnej strony
  47. echo ' <a href="?str='.($_GET['str']+1).'">następne</a>';
  48. }
  49.  
  50.  
  51. ?>
nospor
Czemu piszesz na oslep? Uzywanie mysqli zamiast mysql tu nie ma zadnego znaczenia. Wypisujesz jakies dziwne kody i temu ci nie dziala
bo niby co ma robic ten kod
mysqli_real_escape_string()
? Wiesz w ogole co ta funkcja robi i jakie parametry ma przyjowac? W manualu masz wszystko napisane a ty radosnie sobie walisz cos takiego
mrk9109
zmieniłem na mysqli_escape_string

i nie wiem ale jechałem według tego poradnika

http://phpedia.pl/wiki/Stronicowanie a oni tu to zastosowali to się wzorowalem i zrobiłem wszystko krok po kroku to dla tego pytam o jakieś wskazówki
nospor
Nie chodzilo mi o zmiane funkcji... chodzilo mi byc zajrzal do manuala i zobaczyl jakich wymaga parametrow...

mysqli_real_escape_string(TU MAJA BYC JAKIES PARAMETRY A TY DALES NIC!)

Najlpieje wywal te funkcje stamtad bo jest ona tam totalnie zbedna

Cytat
http://phpedia.pl/wiki/Stronicowanie a oni tu to zastosowali to się wzorowalem i zrobiłem wszystko krok po kroku

No wlasnie nie zrobiles krok po kroku. Oni tam wywolali funkcje z parametrami a ty wywowales bez. Nawet skopiowac porzadnie nie umiesz... A nauka ma nie polegac na kopiowaniu tylko na zrozumieniu co dany kod robi.

To jest funkcja wywolana z parametrem:
mysqli_real_escape_string('jakis parametr');

A u ciebie jest bez parametru
mysqli_real_escape_string()
mrk9109
Masz racje już tak nie będę robił , a więc wziąłem się za to samemu powoli pisząc by się tego nauczyć według manuala i różnych poradników stworzyłem kod który działa ale nie do końca ponieważ na każdej stronie wyświetla mi wszystkie 10 pierwszych wyników a nie kolejnych dlaczego ? co pominołem

  1. <?php
  2.  
  3. $zapytanie = mysqli_query($polaczenie,"SELECT id, tytul, data, autor, tresc FROM aktualnosci ORDER by `id` DESC ");
  4. $ile = mysqli_num_rows($zapytanie);
  5. if($ile == 0)
  6. {
  7. echo '<br/><br/>Brak treści';
  8. }
  9.  
  10. $wynikow_na_stronie = 10;
  11.  
  12. $zapytanie='SELECT * FROM aktualnosci';
  13. $wynik = mysqli_query($polaczenie,$zapytanie);
  14. $liczba_wynikow = mysqli_num_rows($wynik);
  15.  
  16. $numer_strony = ceil($liczba_wynikow/$wynikow_na_stronie);
  17.  
  18. if (!isset($_GET['str'])) {
  19. $str = 1;
  20. }
  21. else {
  22. $str = $_GET['str'];
  23. }
  24.  
  25. $pierwsza_strona_wynik = ($str-1)*$wynikow_na_stronie;
  26.  
  27. $zapytanie = 'SELECT id, tytul, data, autor, tresc FROM aktualnosci ORDER by id DESC LIMIT ' . $pierwsza_strona_wynik . ',' . $wynikow_na_stronie;
  28. $wynik = mysqli_query($polaczenie,$zapytanie);
  29.  
  30. while($db = mysqli_fetch_array($wynik) ) {
  31.  
  32. $id=$db['id'];
  33. $tytul=$db['tytul'];
  34. $data=$db['data'];
  35. $autor=$db['autor'];
  36. $tresc=$db['tresc'];
  37.  
  38. include("templatki/aktualnosci.html");
  39.  
  40. }
  41.  
  42. for ($str=1;$str<=$numer_strony;$str++) {
  43. echo '<a href="index.php?strona=aktualnosci?str=' . $str . '">' . $str . '</a> ';
  44. }
  45.  
  46.  
  47.  
  48. ?>
nospor
Co zwraca

  1. if (!isset($_GET['str'])) {
  2. $str = 1;
  3. }
  4. else {
  5. $str = $_GET['str'];
  6. }
  7. var_dump($str);
Dla np. drugiej strony?

edit: ach... dobra, juz widze

nie:
index.php?strona=aktualnosci?str=

a:
index.php?strona=aktualnosci&str=

podstawy html tym razem leza u ciebie wink.gif
mrk9109
dzięki smile.gif użyłem taki link bo tak było w poradniku jednak było warto pomęczyć się samemu bo z tego kodu co dałem wyżej pierwszy raz nic nie kumałem dzięki smile.gif i zaglądam już częściej do manuala
nospor
Cytat
bo tak było w poradniku
Tak, ? mozesz dac tylko gdy zaczynasz sekcje parametrow. A ty sekcje parametrow w swoim linki zaczales wczesniej i potem kazdy kolejny paramertr oddzielac masz przy pomocy &
mrk9109
oki zapamiętam dzięki smile.gif
nospor
To skoro tak dobrze ci idzie to jeszcze jedna rada:

mowilem ci wczesniej bys wyrzucil te funkcje do escapowania. Ale mowilem tylko tak dlatego, ze pozniej i tak miales rzutowanie na liczbe wartosci z linka. Teraz u ciebie nie rzutujesz juz nic (ok, posrednio robisz to tutaj: $str-1). Generalnie wszystkie dane jakie ida z przegladarki sa niebezpieczne. Kiedys sie je escapowalo, teraz sie uzywa bindowania. Zas przy danych liczbowych, jak twoje str w linku warto rzutowac to jeszcze na liczbe
czyli nie
$str = $_GET['str'];
a:
$str = (int)$_GET['str'];

wiec nawet jak ktos ci recznie w linku za str wstawi niebezpieczny kod, to po zrzutowaniu na liczbe otrzymasz zawsze liczbe, np 0.

czyli jeszcze raz: kazda dana pochodzaca od uzytkownika/przegladarki jest potencjalnie niebezpieczna
mrk9109
rozumie smile.gif bardzo dobra rada dzięki tongue.gif mam jeszcze inne pytanko jak to rozgryźć patrz chciałem zrobić coś takiego

  1. echo '<a href="aktualnosci-strona-' . $str . '">' . $str . '</a> ';
  2. RewriteRule ^aktualnosci-strona-([^-]+)$ index.php?strona=aktualnosci&str=$str [L]


I wczytuje mi link itp ale mam komunikat

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\Users\PC_ACER\xampp\htdocs\system\moduly\aktualnosci.php on line 30
1 2
nospor
juz mowilem:
var_dump($str);
mrk9109
kombinowałem z tym i nie wiem dlaczego mi wywala błąd z mod write a zmienną przekazuję generuje link np: aktualnosci-strona-1 a komunikat ten sam
nospor
zrobiles var_dump jak prosilem? Cos ten vardump wyswietla...
mrk9109
w którym dokładnie miejscu bo mam

A non-numeric value encountered in 26 linia i 30 blad
nospor
No przeciez pisalem

if (!isset($_GET['str'])) {
$str = 1;
}
else {
$str = $_GET['str'];
}
var_dump($str);

Taki kod masz tylko w jednym miejscu
mrk9109
int(0)
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\Users\PC_ACER\xampp\htdocs\system\moduly\aktualnosci.php on line 31


to samo
nospor
No nie to samo bo teraz widac ze str to 0 a nie 1....
Potem robisz 0 -1 i do LIMIT wkladasz -10 wiec nic dziwnego ze zapytanie sie wyklada. Cos ten htaccess ci zle dziala.

RewriteRule ^aktualnosci-strona-([^-]+)$ index.php?strona=aktualnosci&str=$str [L]
czemu w regulce wkladasz $str? Powinno byc $1

RewriteRule ^aktualnosci-strona-([^-]+)$ index.php?strona=aktualnosci&str=$1 [L]
mrk9109
no źle dla tego zadałem pytanie jak inaczej rozwiązać to chciałem zrobić fajne linki
nospor
No to ci napisalem przeciez co masz zle
mrk9109
Dzięki jestem na tel nie załadowalo już mi tego wieczorem po pracy zmienię to i rozpoczynam kolejna lekcje 😊 mam jeszcze jedno pytanie chodzi o pętle for czy ja mogę ją dać np w echo ? Chodzi mi o to by ją cała wyśrodkowac
nospor
Zacznij prosze uzywac kropek i przecinkow bo ciezko sie czyta twoje posty.

Co do pytanie to nie rozumiem o co ci chodzi.
viking
Zacznij nadawać jakieś klasy swoim elementom i trochę bardziej semantyczne. Stylowanie robi się w CSS. Swoją drogą:
$str = (int) $_GET['str'] ?? 1;
mrk9109
Mam jeszcze inne pytanie jak chciałem zrobić to samo w adminie to wywala mi

Fatal error: Uncaught Error: Call to a member function fetch_assoc() on string in C:\Users\PC_ACER\xampp\htdocs\system\admin\admin.php:13 Stack trace: #0 {main} thrown in C:\Users\PC_ACER\xampp\htdocs\system\admin\admin.php on line 13

  1. $zapytanie = $polaczenie->query("SELECT typ FROM uzytkownicy WHERE login = '". $_SESSION['login']."';");
  2.  
  3. while($db = $zapytanie -> fetch_assoc() ) {
  4.  
  5. $login = $_SESSION['login'];
  6. $typ=$db['typ'];
  7. $warunekT="admin";
  8.  
  9. if ($typ == $warunekT) // Sprawdzanie czy uzytkownik to admin
  10. {
  11. include("_start_admin.php");
  12. }
  13. else
  14. {
  15. header('Location: brakdostepu.php');
  16. }
  17. }


Jak inaczej to połączyć ?

robi to jak użyje w news`ach

while($db = mysqli_fetch_array($wynik) )
viking
A ty dalej var_dump nie potrafisz używać?
mrk9109
Jest użyty ale nie w tym kodzie to był jeden z pierwszych już sobie poradziłem co wywoływało błąd
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.