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
<?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
{
echo '<br/><br/>Brak treści'; }
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
echo '<a href="?str='.($_GET['str']-1).'">Poprzednie</a> '; }
for($i = 0;$i<=floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE
);$i++){ 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
echo ' <a href="?str='.($_GET['str']+1).'">następne</a>'; }
?>
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
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
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()
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
<?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)
{
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 = ceil($liczba_wynikow/$wynikow_na_stronie);
if (!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++) {
echo '<a href="index.php?strona=aktualnosci?str=' . $str . '">' . $str . '</a> '; }
?>
nospor
14.02.2018, 10:46:43
Co zwraca
if (!isset($_GET['str'])) { $str = 1;
}
else {
$str = $_GET['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
mrk9109
14.02.2018, 10:50:05
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
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 &
mrk9109
14.02.2018, 10:57:08
oki zapamiętam dzięki
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
mrk9109
14.02.2018, 11:13:39
rozumie
bardzo dobra rada dzięki
mam jeszcze inne pytanko jak to rozgryźć patrz chciałem zrobić coś takiego
echo '<a href="aktualnosci-strona-' . $str . '">' . $str . '</a> '; 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
14.02.2018, 11:15:36
juz mowilem:
var_dump($str);
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
nospor
14.02.2018, 11:29:07
zrobiles var_dump jak prosilem? Cos ten vardump wyswietla...
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
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
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
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]
mrk9109
14.02.2018, 11:49:35
no źle dla tego zadałem pytanie jak inaczej rozwiązać to chciałem zrobić fajne linki
nospor
14.02.2018, 11:59:39
No to ci napisalem przeciez co masz zle
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
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.
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;
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
$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
{
header('Location: brakdostepu.php'); }
}
Jak inaczej to połączyć ?
robi to jak użyje w news`ach
while($db = mysqli_fetch_array($wynik) )
viking
17.02.2018, 11:39:47
A ty dalej var_dump nie potrafisz używać?
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
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.