Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [MySQL][PHP] Stronicowanie

Napisany przez: mrk9109 13.02.2018, 11:12:28

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. http://www.php.net/echo '<br/><br/>Brak treści';
  8. }
  9.  
  10.  
  11. http://www.php.net/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. http://www.php.net/echo '<a href="?str='.($_GET['str']-1).'">Poprzednie</a> ';
  40. }
  41. for($i = 0;$i<=http://www.php.net/floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE);$i++){
  42. http://www.php.net/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. http://www.php.net/echo ' <a href="?str='.($_GET['str']+1).'">następne</a>';
  48. }
  49.  
  50.  
  51. ?>

Napisany przez: nospor 13.02.2018, 11:16:07

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

Napisany przez: mrk9109 13.02.2018, 11:23:20

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

Napisany przez: nospor 13.02.2018, 11:28:55

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()

Napisany przez: mrk9109 14.02.2018, 10:07:08

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. http://www.php.net/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 = http://www.php.net/ceil($liczba_wynikow/$wynikow_na_stronie);
  17.  
  18. if (!http://www.php.net/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. http://www.php.net/echo '<a href="index.php?strona=aktualnosci?str=' . $str . '">' . $str . '</a> ';
  44. }
  45.  
  46.  
  47.  
  48. ?>

Napisany przez: nospor 14.02.2018, 10:46:43

Co zwraca

  1. if (!http://www.php.net/isset($_GET['str'])) {
  2. $str = 1;
  3. }
  4. else {
  5. $str = $_GET['str'];
  6. }
  7. http://www.php.net/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

Napisany przez: mrk9109 14.02.2018, 10:50:05

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

Napisany przez: nospor 14.02.2018, 10:55:35

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 &

Napisany przez: mrk9109 14.02.2018, 10:57:08

oki zapamiętam dzięki smile.gif

Napisany przez: nospor 14.02.2018, 11:01:28

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

Napisany przez: mrk9109 14.02.2018, 11:13:39

rozumie smile.gif bardzo dobra rada dzięki tongue.gif mam jeszcze inne pytanko jak to rozgryźć patrz chciałem zrobić coś takiego

  1. http://www.php.net/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

Napisany przez: nospor 14.02.2018, 11:15:36

juz mowilem:
var_dump($str);

Napisany przez: mrk9109 14.02.2018, 11:24:39

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

Napisany przez: nospor 14.02.2018, 11:29:07

zrobiles var_dump jak prosilem? Cos ten vardump wyswietla...

Napisany przez: mrk9109 14.02.2018, 11:40:06

w którym dokładnie miejscu bo mam

A non-numeric value encountered in 26 linia i 30 blad

Napisany przez: nospor 14.02.2018, 11:41:38

No przeciez pisalem

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

Taki kod masz tylko w jednym miejscu

Napisany przez: mrk9109 14.02.2018, 11:45:42

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

Napisany przez: nospor 14.02.2018, 11:48:56

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]

Napisany przez: mrk9109 14.02.2018, 11:49:35

no źle dla tego zadałem pytanie jak inaczej rozwiązać to chciałem zrobić fajne linki

Napisany przez: nospor 14.02.2018, 11:59:39

No to ci napisalem przeciez co masz zle

Napisany przez: mrk9109 14.02.2018, 12:18:24

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

Napisany przez: nospor 14.02.2018, 12:22:40

Zacznij prosze uzywac kropek i przecinkow bo ciezko sie czyta twoje posty.

Co do pytanie to nie rozumiem o co ci chodzi.

Napisany przez: viking 14.02.2018, 12:25:27

Zacznij nadawać jakieś klasy swoim elementom i trochę bardziej semantyczne. Stylowanie robi się w CSS. Swoją drogą:
$str = (int) $_GET['str'] ?? 1;

Napisany przez: mrk9109 17.02.2018, 11:01:44

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. http://www.php.net/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) )

Napisany przez: viking 17.02.2018, 11:39:47

A ty dalej var_dump nie potrafisz używać?

Napisany przez: mrk9109 17.02.2018, 12:53:03

Jest użyty ale nie w tym kodzie to był jeden z pierwszych już sobie poradziłem co wywoływało błąd

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)