Sortowanie za pomocą kliknięcia w nagłówek kolumny - nie działa

Odpowiedz Nowy wątek
2017-02-17 19:48
0

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?

W poniż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..

    <?php
    $InvDateNextOrder = "asc";
    $parent = "user";

    ?>

    <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>

    <?php
<!-- Poniższa funkcja dla uproszczenia tutaj tylko wyświetla otrzymane zapytanie, natomiast w oryginalnym kodzie generuje tabelę na podstawie danych z bazy -->
    function show($query_disp){

        echo $query_disp;
    }    
    ?>  
    <!--Tutaj w oryginalnym skrypcie znajduje się <body> tabeli html-->

    <?php

            if(isset($_POST['dwyst'])){

             $sort = $_POST['datew'];

                if($sort=="asc"){
                  /$GLOBALS['InvDateNextOrder'] = "desc";   
                  //global $InvDateNextOrder;
                     $InvDateNextOrder = "desc";    

                }    

                    if($sort=="desc"){

                //$GLOBALS['InvDateNextOrder'] = "asc"; 
                //global $InvDateNextOrder;
                 $InvDateNextOrder = "asc"; 

                }

                var_dump($InvDateNextOrder);
                $query_disp = "SELECT * FROM jos_program_invoice WHERE owner='$parent' ORDER BY invoice_date ".$sort;   
            show($query_disp);  

            }
    ?> 

Pozostało 580 znaków

2017-02-18 20:46
Bogaty Kret
0
 $query_disp = "SELECT * FROM jos_program_invoice WHERE owner='$parent' ORDER BY ".$sort;   

Spróbuj tak.

Pozostało 580 znaków

2017-02-18 22:30
0

Czy probowałeś tak

$query_disp = "SELECT * FROM jos_program_invoice WHERE owner='$parent' ORDER BY invoice_date DESC";

czy tak

$query_disp = "SELECT * FROM jos_program_invoice ORDER BY invoice_date DESC";

W "owner" istnieje "user"?

Pozostało 580 znaków

2017-02-18 23:25
0
tadeusz_gda napisał(a):

Czy probowałeś tak

$query_disp = "SELECT * FROM jos_program_invoice WHERE owner='$parent' ORDER BY invoice_date DESC";

czy tak

$query_disp = "SELECT * FROM jos_program_invoice ORDER BY invoice_date DESC";

W "owner" istnieje "user"?

Próbowałam tak:

$query_disp = "SELECT * FROM jos_program_invoice WHERE owner='$parent' ORDER BY invoice_date DESC";

przy czym DESC(lub ASC) pochodzi ze zmiennej $sort a invoice_date to nazwa kolumny tabeli w bazie, po której mają zostać posortowane rekordy.
User istnieje,

Pozostało 580 znaków

2017-02-19 09:00
Zimny Wąż
0
$query_disp = "SELECT * FROM jos_program_invoice WHERE owner='.$parent.' ORDER BY invoice_date DESC";
i co wtedy będzie w $query_disp? nie będzie działa)) - tadeusz_gda 2017-02-19 09:10

Pozostało 580 znaków

2017-02-19 09:17
0
bacha napisał(a):

Próbowałam tak:

$query_disp = "SELECT * FROM jos_program_invoice WHERE owner='$parent' ORDER BY invoice_date DESC";

przy czym DESC(lub ASC) pochodzi ze zmiennej $sort a invoice_date to nazwa kolumny tabeli w bazie, po której mają zostać posortowane rekordy.
User istnieje,

Może lepiej tak zrób, żeby wykluczyć "sql injection"?

if($sort=="desc"){
  $sort_new = "DESC";    
 }    
else{
   $sort_new = "ASC"; 
}
var_dump($InvDateNextOrder);
$query_disp = "SELECT * FROM jos_program_invoice WHERE owner='$parent' ORDER BY invoice_date ".$sort_new;

Działa?

edytowany 5x, ostatnio: tadeusz_gda, 2017-02-19 09:20

Pozostało 580 znaków

2017-02-19 09:36
Zimny Wąż
0
$query_disp = "SELECT * FROM jos_program_invoice WHERE owner=".$parent." ORDER BY invoice_date DESC";

Wtedy wstawisz do zapytania zmienną, a nie nazwę "$parent", kropki oddzielają cudzysłów od wartości zmiennej.

Pozostało 580 znaków

2017-02-19 09:42
Zimny Wąż
0
Zimny Wąż napisał(a):
$query_disp = "SELECT * FROM jos_program_invoice WHERE owner=".$parent." ORDER BY invoice_date DESC";

Wtedy wstawisz do zapytania zmienną, a nie nazwę "$parent", kropki oddzielają cudzysłów od wartości zmiennej.

$query_disp = "SELECT * FROM jos_program_invoice WHERE owner='".$parent."' ORDER BY invoice_date DESC";

Albo tak

Tak owner=".$parent." zakazano robić, bo musi być owner='jakieś_dane'. Tak owner='".$parent."' lepsze. - tadeusz_gda 2017-02-19 09:52

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0