• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Paginacja problem ze stronami.

VPS Starter Arubacloud
0 głosów
205 wizyt
pytanie zadane 14 sierpnia 2015 w PHP przez quentis Początkujący (370 p.)

Witam, 

napisałem funkcje która wyświetla rekordy z bazy jako "newsy" lecz problem jest w tym, że rekordy wyświetlają się od zerowej strony tj. index.php?page=0 a chciałby aby zaczynały się od index.php?page=1 itd...

Poniżej daje kod (wiem, może być mało profesjonalny :D )

function getNews()
		{
			global $connect;

			if($recordsresult = $connect->query("SELECT * FROM news ORDER BY id"))
			{
				if($recordsresult->num_rows > 0)
				{
					$records = $recordsresult->num_rows;
				}
			}

			$page_records = 3;

			$limit = mysql_escape_string((int)$_GET['page']*$page_records);

			if($stmt = $connect->query("SELECT * FROM news ORDER BY id DESC LIMIT $limit, $page_records"))
			{

				if($stmt->num_rows > 0)
				{
					while($row = $stmt->fetch_object())
					{
						echo '<div id="newstitle">'. $row->title .'</div>';
					echo '<div id="newstitleimage"></div>';
					echo '<div id="newscontent">'. $row->content .'</div>';
					echo '<div id="addinfo">Dodano przez'. ' ' . $row->addedby.',' . ' dnia ' . $row->time .'</div>';
					echo '<hr>';
					}
						echo '<div id="pages">';
							if($_GET['page']>0){ 
							   echo '<a href="?page='.($_GET['page']-1).'">Poprzednia</a> ';
							}				
							for($i = 0;$i<=floor($records/$page_records);$i++){
							   echo '<a href="?page='.($i).'">[ '.($i+1).' ]</a> ';
							}
							if($_GET['page']<floor($records/$page_records)){ 
							   echo ' <a href="?page='.($_GET['page']+1).'">Następna</a>';
							}
						echo '</div>';
			
				}
				else
				{
					echo 'Brak rekordów!';
				}
			}
		}

 

2 odpowiedzi

+1 głos
odpowiedź 14 sierpnia 2015 przez Magicone Nałogowiec (45,100 p.)
wybrane 14 sierpnia 2015 przez quentis
 
Najlepsza

floor($records/$page_records) -> dlaczego zaokrąglasz liczbę stron w dół? Generalnie, wystarczy przyjąć założenie, że strona 1 to tak naprawdę strona 0, czyli odjąć przy obliczeniach z mysql'a, poprawić logikę pętli na dole strony.

$page = (int) $_GET['page']; //zakres (1-n)

$onpage = 3;

zapytanie query:

"LIMIT index, ile" gdzie index wskazuje na element, od którego ma zacząć.

dla danych $page = 1, $onpage = 3:

LIMIT ($page-1*$onpage), $onpage

komentarz 14 sierpnia 2015 przez quentis Początkujący (370 p.)
edycja 14 sierpnia 2015 przez quentis

Dobrze poprawiłem to: 

$page= (int)$_GET['page']-1;

            $limit = mysql_escape_string($page*$page_records).','. $page_records;

 

i działa od ?page=1

 

ale w nawigacji na dole strony [1] [2] itp.. przekierowanie działa o jeden w dól tj. [1] przekierowuje na ?page=0

@edit

poprawiłem 

for($i = 0;$i<=($records/$page_records);$i++){
							   echo '<a href="?page='.($i+1).'">[ '.($i+1).' ]</a> ';
							}

 

Wszystko działa, Dzięki Wielkie

komentarz 14 sierpnia 2015 przez Magicone Nałogowiec (45,100 p.)
$pages = ceil($records / $onpage);

if($page > 1){

  //wyswietl na pierwszą, poprzednią

}

for($i=2; $i<=$pages; $i++)

//wyswietlaj na kazde kolejne, $i to strona

if($page < $pages){

//wyswietl na  nastepna, ostatnia

}
0 głosów
odpowiedź 14 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)
Nie znam się na PHP ale są według mnie dwa potencjalne miejsca błędu pierwszy if $_GET['page']-1 gdy $_GET['page'] jest 1 to tworzy przekierowanie na stronę 0

dalej pętla for jedziesz od 0 czyli pierwsze wywołanie pętli tworzy przekierowanie na stronę 0

Podobne pytania

0 głosów
2 odpowiedzi 657 wizyt
pytanie zadane 13 czerwca 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
1 odpowiedź 176 wizyt
pytanie zadane 6 maja 2019 w PHP przez Whereismycode Obywatel (1,710 p.)
0 głosów
0 odpowiedzi 271 wizyt
pytanie zadane 8 grudnia 2018 w PHP przez niezalogowany

92,979 zapytań

141,941 odpowiedzi

321,185 komentarzy

62,303 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...