Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyświetlanie przy paginacji
Forum PHP.pl > Forum > Przedszkole
Gray
Witam, uczę się PHP i obecnie obrabiam sobie skrypt w którym zrobiłem paginację i wybór kategorii z rozwijanej listy <select> Działa to w ten sposób że wybieram z listy kategorię, po zatwierdzeniu skrypt wczytuje z bazy odpowiednie rekordy posiadające cyfrę (która odpowiada wybranej kategorii) w kolumnie kategorie. Problem w tym, że kiedy w paginacji ustawię wyświetlanie na stronę 3 rekordów, to wyświetlą się poprawnie ale po kliknięciu "Next Page" nie wyświetla się nic, tak jak by skrypt nie przechowywał informacji o wybranej z <select> kategorii i przymusie wyświetlenia reszty rekordów. Troszę zawile to opisałem, w razie czego mogę wytłumaczyć co potrzebne.

Oto skrypt:

  1. <html>
  2.  
  3. <form action="index.php?co=kat" method="post">
  4. <table>
  5. <tbody>
  6.  
  7. <tr>
  8. <td>Wybierz kategorię:</td>
  9. <td>
  10. <select name="rodzajkategorii">
  11. <option value="1" >a</option>
  12. <option value="2" >b</option>
  13. <option value="3" >c</option>
  14. <option value="4" >d</option>
  15. <option value="5" >e</option>
  16. <option value="6" >f</option>
  17. </select>
  18. </td>
  19. </tr>
  20. <tr>
  21. <td>
  22. <input type="submit" name="submit_kat" class="button" value="Wyswietl" />
  23. </td>
  24. </tr>
  25.  
  26. </tbody>
  27. </table>
  28. </form>
  29.  
  30. <?php
  31. $obiektname = 'art';
  32. $perPage = '4';
  33.  
  34. if(isset($_POST['submit_kat']) and $_GET['co']=='kat') {
  35.  
  36.  
  37. if (is_numeric($_REQUEST['page'])) {
  38. $page = (int) $_REQUEST['page'];
  39. if ($page < 1) {
  40. $page = 1;
  41. }
  42. } else {
  43. $page = 1;
  44. }
  45.  
  46. $start = ($page - 1) * $perPage;
  47.  
  48. $query = mysql_query("SELECT * FROM tabela WHERE kategorie='".$rodzajkategorii."' ORDER BY `id` DESC LIMIT $start, $perPage");
  49.  
  50. if($obiekt['akceptacja'] == 0) {
  51.  
  52. if(mysql_num_rows($query)) {
  53. while($obiekt = mysql_fetch_array($query)) {
  54.  
  55. if($obiekt['type'] == $obiektname) {
  56. echo'<div class="klasa1">';
  57. echo'<a href="wyswietl.php?'.$obiekt['id'].'"><img src="'.$obiekt['imgm'].'" /></a>';
  58. echo'</div>';
  59. }
  60. }
  61. } else {
  62. echo '<div>Nie ma nic tej kategorii.</div>';
  63. }
  64.  
  65. } //zamyka 2
  66.  
  67. else { echo '<div>Tutaj nic niema</div>'; }
  68.  
  69. $prev = $page - 1;
  70. $next = $page + 1;
  71. $prevLink = $_SERVER['PHP_SELF'] . '?page=' . $prev;
  72. $nextLink = $_SERVER['PHP_SELF'] . '?page=' . $next;
  73. echo "<p align='center'><a href='$prevLink'>Previous Page</a> | <a href='$nextLink'>Next Page</a></p>";
  74.  
  75. } //zamyka 1
  76.  
  77. ?>
  78.  
  79. </html>
gargamel
Chyba $_GET['page'] zamiast $_REQUEST['page']
mat-bi
-.-, przecież $_REQUEST = $_GET + $_POST, więc co za rady dajesz?


@EDIT:
Tak popatrzyłem i zastanowiło mnie to:

  1. if ($page < 1) {
  2. $page = 1;
  3. }
  4. } else {
  5. $page = 1;
  6. }


Chyba rozumiesz, o co mi chodzi wink.gif
Gray
Paginacja sama w sobie działa bo kiedy pokasuje oddziaływanie form-a itd. aż do prostej wersji wyświetlenia wszystkich rekordów to jest ok i strony działają... chodzi o to że nie działa w momencie kiedy robię podział na kategorie i paginowane strony powinny zawierać tylko wybrane rekordy :/

@edit:

@mat-bi to co zaznaczyłeś ustala stronę jako 1 nawet w przypadku kiedy nie ma żadnej lub jeśli jest poniżej też 1...

@czy trzeba w jakiś sposób przenosić wartość zmiennej ustalanej przez forma <select> do kolejnej ładowanej przez paginację strony?
nospor
Cytat
czy trzeba w jakiś sposób przenosić wartość zmiennej ustalanej przez forma <select> do kolejnej ładowanej przez paginację strony?
No wypadałoby.... niby skad kolejna strona ma wiedzieć, co wybrałeś wcześniej?

http://nospor.pl/formularz-i-stronicowanie...anie-stanu.html
Gray
@nospor używając sesji z tego linka który podałeś jak zrobić, żeby ustalona zmienna z formularza restartowała się po opuszczeniu pliku z paginacją np. paginacja.php ? czy ta sesja jest cały czas gdzieś zapamiętana? czy jej nie zamknięcie/wyczyszczenie nie będzie robiło problemów i spowalniało serwera?

Nie znam się na sesjach więc to pytanie może być dość błahe...
nospor
A po co czyścić? Dodałeś to niech siedzi.
Gray
Mam pytanko, postanowiłem pobierać numer kategorii nie z rozwijanej listy <select> tylko z adresu strony przez GETa, jednak potrzebuję przechować pobraną wartość w sesji gdyż nie mogę na bieżąco pobierać GETem na kolejnych stronach... zrobiłem to tak ale chyba nie jest to poprawne:

  1. if (!empty($_GET['kategoria'])) {
  2. $formData = $_GET['kategoria'];
  3. }
  4.  
  5.  
  6.  
  7. $sesja = $formData;
  8.  
  9. echo $sesja;


Mógł by mnie ktoś pouczyć w jaki sposób poprawnie zapisać, przechować i wywołać zmienną z sesji?

Pozdrawiam.
nospor
Przecież w linku co ci dałem masz podane jak z tego korzystać. Bez różnicy czy zmienna idzie z forma czy z get. Mechanizm ten sam.
Gray
Kombinuję z tym, w przypadku kiedy zmienna była pobierana z form-a, paginacja działała poprawnie i pamiętało wartość zmiennej. Teraz kiedy pobieram z GET-a pierwsza strona wyświetla się dobrze, ale kolejne już nie, jak by sesja nie przenosiła zmiennej :/

  1. if (!empty($_GET['kategoria'])) {
  2. $formData = $_GET['kategoria'];
  3. }
  4.  
  5.  
  6. $_SESSION['sesja'] = $formData;
  7.  
  8. $sesja1 = $_SESSION['sesja'];
  9.  
  10. echo = $sesja1;
nospor
W moim arcie kod wyglądał zupełnie inaczej. To co ty tu masz nie wiem jak sie ma do tego kodu.
Gray
No staram sie to zrobić wg Twojego artu, jak już mówiłem nie znam sesji... mógł byś mi to skorygować? w kodzie który podałem na początku sprawdzam czy wartość GETa nie jest pusta, jeśli nie jest to zapisuję ją do zmiennej o nazwie $formData, następnie otwieram sesję i tworzę w niej zmienną $_SESSION['sesja'] której nadaję wartość stworzonej wcześniej zmiennej $formData no i na końcu tworzę zmienną $sesja1 o wartości $_SESSION['sesja']
nospor
Ale ja ci przecież napisałem: czy to idzie z forma czy z get to bez różnicy. Wszystko ma być tak samo. Skoro ci działa z forma czyli z POST to identycznie masz zrobic z GET. Nic masz nie zmieniac. NIC NIC NIC. Tylko zamiast POST masz pisać GET.
Gray
Zrobiłem coś takiego:

  1.  
  2. if (!empty($_GET['kategoria'])) {
  3.  
  4. $_SESSION['form'] = array(
  5. 'kategoria' => $_GET['kategoria']
  6. );
  7.  
  8. }
  9.  
  10. $formData = array(
  11. 'kategoria' => !isset($_SESSION['form']) ? null : $_SESSION['form']['kategoria']
  12. );


I teraz zwraca mi $formData jako ciąg znaków... "array"
Nie mogę zrobić tego identycznie jak w przypadku FORMa bo nie mam tutaj guzika submit...
nospor
Cytat
I teraz zwraca mi $formData jako ciąg znaków... "array"
Przy formularzu tez ci zwracał array...
Gray
eh jeszcze dużo nauki mi brakuje... popełniłem błąd i wywołałem samo $formData zamiast $formData['kategoria'] , sorry za zamieszanie i dzięki za cierpliwość
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.