Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Wyświetlanie rekordów z bazy
Forum PHP.pl > Forum > Przedszkole
heroep18
Witam. Jak zwykle mam problem. Tym razem chodzi o to, że chcę aby rekord pokazywał się na stronie. Chciałbym żeby rekordy pojawiały się od 1 ID do ostatniego ID, jeśli użytkownik kliknąłby przycisk zmiany rekordu to pokazałby się następny rekord chronologicznie po ID.
CuteOne
google -> mysql order by
google -> mysql LIMIT
heroep18
Dziękuję smile.gif O to chodziło.

Ok. Zrobiłem tak, że pokazuje mi rekord biggrin.gif

Teraz jeszcze jeden problem, chciałbym aby gdy użytkownik odświeży stronę to pokazuje następny rekord. Trzeba użyć jakiejś pętli?>
piotrex41
Odświeży, czy przejdzie "dalej"? Chodzi mi o to czy link się zmieni, czy też ktoś po prostu da refresh tudzież F5? W tym pierwszym wypadku nie będzie problemu. Dajesz parametr do linku, i czytasz go GET'em i robisz z niego limit. Natomiast jeśli to tylko odświeżenie, to nie wiem czy jakiś JS by się tu nie nadał, bo jak odświeża się to dane tymczasowe są tracone. Musiał być pamiętać ile użytkownik widział, ale z drugiej strony zapisywać każdemu userowi ile widział... I jeszcze kiedy to się czyści?
Jeśli chodzi o sam refresh to podaj więcej szczegółów.
heroep18
Chodzi mi o F5, może być dalej
piotrex41
To jeśli może być dalej, to masz co najmniej 2 wyjścia biggrin.gif

1. (Załóżmy, że wyświetlasz po 5 na stronę)
Pobierasz wiersze zapytaniem ("SELECT ... LIMIT 0,5"); i wyświetlasz je w pętli. Na końcu robisz sobie odnośnik <a href="?rows=5">Dalej...</a>
Więc trzeba poprawić zapytanie - ("SELECT ... LIMIT ".$_GET['rows'].",".$_GET['rows'] + 5);. Tym oto sposobem będziesz pobierać po 5 rekordów i je wyświetlać.

Dla wyjaśnienia: Ta liczba 5 w linku oznacza po ile wyświetlasz. Jeśli ją zmienisz to zmień też tę 5 w zapytaniu.

2. Pobierasz wszytko zapytaniem, przechowujesz to w tablicy i zmieniasz wyświetlanie przez JS (bodajże AJAXem takie rzeczy się robi). Można oczywiście AJAXem pobierać po 5 elementów na bieżąco w tle, bez przeładowania strony, ale trzeba zrobić jakiś link/przycisk do przechodnia dalej.
klocus
@Autor: z tym odświeżeniem: wydaje mi się, że mógłbyś spróbować ze zwykłą zmienną, która gromadziła by np. w sesji ilość odświeżeń. Otóż za każdym razem gdy odświeżysz stronę, skrypt wykona się ponownie, więc mógłbyś sprawdzić za pomocą sesji, które to już odświeżenie danego użytkownika i wg tego pobrać kolejne elementy z bazy wink.gif
heroep18
Narazie skombinowałem coś takiego:
  1. <?php
  2. $query = mysql_query('SELECT nick FROM tabelakodow ORDER BY ID ASC');
  3. $row = mysql_fetch_array($query);
  4. mysql_query(("SELECT nick FROM tabelakodow ORDER BY ID ASC LIMIT 0,5 ".$_GET['ID'].",".$_GET['ID'] + 5 ));
  5. echo $row['nick'];
  6.  
  7. ?>


ale nie chce mi pokazać tych pięciu rekordów. Co mam źle?
CuteOne
Zobacz jak powinno wyglądać limitowanie w mysql

google -> mysql LIMIT
heroep18
Query was empty :/ Nie wiem jak może być puste, kiedy w bazie jest wszystko

Dodałem or die, wyrzuciłem limit (wydaje mi się, że dobrze limituję, ale i tak wyrzuciłem)

<?php
$query = mysql_query(("SELECT nick FROM tabelakodow ORDER BY ID ASC".$_GET['ID'].",".$_GET['ID'] + 5 )) or die (mysql_error());
$row = mysql_fetch_array($query);

echo $row['nick'];

?>

Teraz mam błąd: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5' at line 1

Co to jest? Dodam, że gdy +5 wyrzucę to to samo jest. Jeśli wyrzucę $_get to też, order by tak samo :/
Shido
Musisz mu pokazać że $_GET['ID'].",".$_GET['ID'] + 5 jest wyznaczeniem limitu, czyli musisz przed tym dać LIMIT
  1. $query = mysql_query(("SELECT nick FROM tabelakodow ORDER BY ID ASC LIMIT ".$_GET['ID'].",".$_GET['ID'] + 5 )) or die (mysql_error());

I kody dawaj w tagach.
redeemer
Pomijając kwestie bezpieczeństwa (SQL Injection) to po pierwsze twój string, który przesyłasz do bazy to "5" (zadanie dla Ciebie - dlaczego tak jest). Po drugie pomiędzy ASC a $_GET['ID'] brakuje spacji. Po trzecie brakuje słowa kluczowego LIMIT.

@up: Twoje zapytanie również zwraca "5" smile.gif

EDIT: Po czwarte to drugi argument w LIMIT to "prawdziwy" limit (jeżeli chcesz zawsze pięć rekordów to będzie to po prostu 5). Pierwszy to OFFSET.
piotrex41
Kod
$query = mysql_query(("SELECT `nick` FROM `tabelakodow` ORDER BY `id` ASC LIMIT ".$_GET['ID'].",".$_GET['ID'] + 5 )) or die (mysql_error());

lub
Kod
$query = mysql_query(("SELECT `nick` FROM `tabelakodow` ORDER BY `id` ASC LIMIT '".$_GET['ID']."','".$_GET['ID']."+ 5' )) or die (mysql_error());

Pokombinuj coś sam...
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.