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
<?php $zapytanie = mysqli_query($polaczenie,"SELECT id, tytul, data, autor, tresc FROM aktualnosci ORDER by `id` DESC "); $ile = mysqli_num_rows($zapytanie); if($ile == 0) // Sprawdzanie czy jest cos dodane w bazie { http://www.php.net/echo '<br/><br/>Brak treści'; } http://www.php.net/define('ILOSC_WYNIKOW_NA_STRONIE', 5); // ile ma być wyświetlanych rekordów na stronie $zapytanie = mysqli_query($polaczenie,"SELECT COUNT(*) FROM aktualnosci"); // Zapytanie liczące ilość wpisów w bazie $wynik = mysqli_query($zapytanie); $iloscWpisow = mysqli_fetch_row($wynik) $zapytanie = mysqli_query($polaczenie,"SELECT * FROM aktualnosci ORDER BY date ASC LIMIT ".mysqli_real_escape_string()((int)$_GET['str']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE); $wynik = mysqli_query($zapytanie); while($db = $zapytanie -> fetch_assoc($wynik) ) { $id=$db['id']; $tytul=$db['tytul']; $data=$db['data']; $autor=$db['autor']; $tresc=$db['tresc']; include("templatki/aktualnosci.html"); } //jesli nie jesteśmy na pierwszej stronie if($_GET['str']>0){ //wyswietlamy link do poprzedniej strony http://www.php.net/echo '<a href="?str='.($_GET['str']-1).'">Poprzednie</a> '; } for($i = 0;$i<=http://www.php.net/floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE);$i++){ http://www.php.net/echo '<a href="?str='.($i).'">[ '.($i+1).' ]</a> '; } //jeśli nie jesteśmy na ostatniej stronie if($_GET['str']<floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE)){ //wyswietlamy link do nastepnej strony http://www.php.net/echo ' <a href="?str='.($_GET['str']+1).'">następne</a>'; } ?>
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
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
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
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
<?php $zapytanie = mysqli_query($polaczenie,"SELECT id, tytul, data, autor, tresc FROM aktualnosci ORDER by `id` DESC "); $ile = mysqli_num_rows($zapytanie); if($ile == 0) { http://www.php.net/echo '<br/><br/>Brak treści'; } $wynikow_na_stronie = 10; $zapytanie='SELECT * FROM aktualnosci'; $wynik = mysqli_query($polaczenie,$zapytanie); $liczba_wynikow = mysqli_num_rows($wynik); $numer_strony = http://www.php.net/ceil($liczba_wynikow/$wynikow_na_stronie); if (!http://www.php.net/isset($_GET['str'])) { $str = 1; } else { $str = $_GET['str']; } $pierwsza_strona_wynik = ($str-1)*$wynikow_na_stronie; $zapytanie = 'SELECT id, tytul, data, autor, tresc FROM aktualnosci ORDER by id DESC LIMIT ' . $pierwsza_strona_wynik . ',' . $wynikow_na_stronie; $wynik = mysqli_query($polaczenie,$zapytanie); while($db = mysqli_fetch_array($wynik) ) { $id=$db['id']; $tytul=$db['tytul']; $data=$db['data']; $autor=$db['autor']; $tresc=$db['tresc']; include("templatki/aktualnosci.html"); } for ($str=1;$str<=$numer_strony;$str++) { http://www.php.net/echo '<a href="index.php?strona=aktualnosci?str=' . $str . '">' . $str . '</a> '; } ?>
Co zwraca
Dla np. drugiej strony?
if (!http://www.php.net/isset($_GET['str'])) { $str = 1; } else { $str = $_GET['str']; } http://www.php.net/var_dump($str);
dzięki 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 i zaglądam już częściej do manuala
oki zapamiętam dzięki
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
rozumie bardzo dobra rada dzięki mam jeszcze inne pytanko jak to rozgryźć patrz chciałem zrobić coś takiego
http://www.php.net/echo '<a href="aktualnosci-strona-' . $str . '">' . $str . '</a> '; RewriteRule ^aktualnosci-strona-([^-]+)$ index.php?strona=aktualnosci&str=$str [L]
juz mowilem:
var_dump($str);
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
zrobiles var_dump jak prosilem? Cos ten vardump wyswietla...
w którym dokładnie miejscu bo mam
A non-numeric value encountered in 26 linia i 30 blad
No przeciez pisalem
if (!isset($_GET['str'])) {
$str = 1;
}
else {
$str = $_GET['str'];
}
var_dump($str);
Taki kod masz tylko w jednym miejscu
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
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]
no źle dla tego zadałem pytanie jak inaczej rozwiązać to chciałem zrobić fajne linki
No to ci napisalem przeciez co masz zle
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
Zacznij prosze uzywac kropek i przecinkow bo ciezko sie czyta twoje posty.
Co do pytanie to nie rozumiem o co ci chodzi.
Zacznij nadawać jakieś klasy swoim elementom i trochę bardziej semantyczne. Stylowanie robi się w CSS. Swoją drogą:
$str = (int) $_GET['str'] ?? 1;
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
$zapytanie = $polaczenie->query("SELECT typ FROM uzytkownicy WHERE login = '". $_SESSION['login']."';"); while($db = $zapytanie -> fetch_assoc() ) { $login = $_SESSION['login']; $typ=$db['typ']; $warunekT="admin"; if ($typ == $warunekT) // Sprawdzanie czy uzytkownik to admin { include("_start_admin.php"); } else { http://www.php.net/header('Location: brakdostepu.php'); } }
A ty dalej var_dump nie potrafisz używać?
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)