Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie za pomocą kliknięcia w nagłówek kolumny - nie działa
Forum PHP.pl > Forum > PHP
Amakesh
Witam!
Mam tabelę, w której wyświe tlam rekordy z bazy danych. W nagłówku każdej kolumny jest ukryte pole ze zmienną mającą wartość "asc" lub "desc" i przycisk. Po kliknięciu przycisku wartość z ukrytego pola ma zostać pobrana do zmiennej $sort i wstawiona do zapytania(query, z którym później wywołujemy funkcję) a wartość zmiennej z pola nadpisana na przeciwną(asc na desc i odwrotnie). Niestety nie działa nawet jeśli użyję zmiennej globalnej - wartość zmiennej w polu zostaje pobrana poprawna ale potem się nie nadpisuje.
Co jest nie tak?

http://main.xfiddle.com/a6897120/sort.php

W powyższym skrypcie dla uproszczenia jest tylko jeden nagłówek tabeli/przycisk a funkcja tylko wyświetla otrzymane zapytanie.
Po każdym kliknięciu przycisku typ sortowania powinien się ustawiać na na przemian asc/desc, jednak tak nie jest..
markonix
Pokaż kod bo z tego example nic nie wynika poza tym, że nie działa.
Amakesh
  1. <?php
  2. $InvDateNextOrder = "asc";
  3. $parent = "user";
  4.  
  5. ?>
  6.  
  7. <form method="post"><input type="hidden" name="datew" value="<?php echo $InvDateNextOrder; ?>" /><input type="submit" value="Data wystawienia" name="dwyst" class="button" style="width:150px;"></form>
  8.  
  9. <?php
  10. function show($query_disp){
  11.  
  12. echo $query_disp;
  13. }
  14. ?>
  15. <!--Tutaj w oryginalnym skrypcie znajduje się <body> tabeli html-->
  16.  
  17.  
  18. <?php
  19.  
  20. if(isset($_POST['dwyst'])){
  21.  
  22. $sort = $_POST['datew'];
  23.  
  24. if($sort=="asc"){
  25. /$GLOBALS['InvDateNextOrder'] = "desc";
  26. //global $InvDateNextOrder;
  27. $InvDateNextOrder = "desc";
  28.  
  29. }
  30.  
  31. if($sort=="desc"){
  32.  
  33. //$GLOBALS['InvDateNextOrder'] = "asc";
  34. //global $InvDateNextOrder;
  35. $InvDateNextOrder = "asc";
  36.  
  37.  
  38.  
  39. }
  40.  
  41. var_dump($InvDateNextOrder);
  42. $query_disp = "SELECT * FROM jos_program_invoice WHERE owner='$parent' ORDER BY invoice_date ".$sort;
  43. show($query_disp);
  44.  
  45. }
  46. ?>
markonix
Przekombinowane.

Pisane z palca:

  1. <?php
  2. $currentSort = 'asc';
  3. if (!empty($_POST['sort'])) {
  4. $currentSort = $_POST['sort'];
  5. }
  6. ?>
  7. <form method="post">
  8. <input type="hidden" name="sort" value="<?= $currentSort == 'asc' ? 'desc' : 'asc'; ?>">
  9. <input type="submit" value="SUBMIT">
  10. </form>
Amakesh
Niestety nie działa - kiedy próbuję uruchomić skopiowany kod z phpfiddle.org lub z serwera, po kliknięciu przycisku nic się nie dzieje. Natomiast jeśli zamienię w swoim kodzie to
  1. <input type="hidden" name="datew" value="<?php echo $InvDateNextOrder; ?>" />
na
  1. <input type="hidden" name="sort" value="<?= $currentSort == 'asc' ? 'desc' : 'asc'; ?>">
(oczywiście z właściwą nazwą zmiennej) efekt jest taki jak w pierwszym poście.
markonix
Ale Ty masz cały kod zastosować, a nie tylko jego fragment.
Wszystko działa jak powinno:
http://ebizo.pl/test.php
lukas333
Warunek w linii 20. 'dwyst' zamień na 'datew'
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.