Sorteren op kolom

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pieter

Pieter

26/02/2008 11:19:00
Quote Anchor link
Hallo allemaal, eerste keer dat ik hier een vraag kom stellen. :-) Ben dus een newb :-)
Ik heb een beetje rond gezocht op de site en schreef dan uiteindelijk deze code..
Wat ik wil doen is eigenlijk de tabel sorteren op een bepaalde kolom waar ik dan op zou klikken. Eerste "desc" dan "asc". Wat ik nu probeer te doen is dus in de link de variabelen mee te geven naar .. de code? .. om dan de sql-query aan te passen en terug de tabel te laten verschijnen met de nieuwe sorting. Wat ik nu denk dat er niet gebeurt is de variabelen die worden meegegeven want ik zie de variabelen niet verschijnen in de link als de pagina opnieuw geladen wordt.. waar zit ergens mijn probleem?

Dank bij voorbaat.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//See if pagenumber is set
if (isset($_GET['pageNum_RsMonitor'])) {
    $pageNum_RsMonitor = $_GET['pageNum_RsMonitor'];
}

    //check for ordering
    if ((isset($_GET['Columnname']))&&(isset($_GET['OrderWay']))) {
        $Columnname = $_GET['Columnname'];
        $OrderWay = $_GET['Orderway'];
    }else {
    $Columnname = "PODate";
    $OrderWay = "DESC";
    }
    
    $startRow_RsMonitor = $pageNum_RsMonitor * $maxRows_RsMonitor;
//Make the query
    $query_RsMonitor = "SELECT * FROM POGeneral ORDER BY ";
    $query_RsMonitor .= $Columnname;
    $query_RsMonitor .= " ";
    $query_RsMonitor .= $OrderWay;

//execute the query, fetch data from db
    $RsMonitor = $NSCon1->SelectLimit($query_RsMonitor, $maxRows_RsMonitor, $startRow_RsMonitor) or die($NSCon1->ErrorMsg());

if (isset($_GET['totalRows_RsMonitor'])) {
    $totalRows_RsMonitor = $_GET['totalRows_RsMonitor'];
    
} else {
    $all_RsMonitor = $NSCon1->SelectLimit($query_RsMonitor) or die($NSCon1->ErrorMsg());
    $totalRows_RsMonitor = $all_RsMonitor->RecordCount();
}
$totalPages_RsMonitor = (int)(($totalRows_RsMonitor-1)/$maxRows_RsMonitor);
// end Recordset

//rebuild the query string by replacing pageNum and totalRows with the new values
$queryString_RsMonitor = KT_removeParam("&" . $_GET['QUERY_STRING'], "pageNum_RsMonitor");
$queryString_RsMonitor = KT_replaceParam($queryString_RsMonitor, "totalRows_RsMonitor", $totalRows_RsMonitor);
 ?>


En dit is de code in de html (de headers als het ware)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
            <tr><strong>
                <td align="center">F report</td>
                <td  align="center">S report</td>
                <td  align="center">
                <a href="<?php printf("%s?pageNum_RsMonitor=%d%s", $HTTP_SERVER_VARS["PHP_SELF"], $pageNum_RsMonitor, $queryString_RsMonitor, "&Columnname=PONum&OrderWay=desc"); ?>">PO Number</a></td>
                <td  align="center">
                <a href="<?php printf("%s?pageNum_RsMonitor=%d%s", $HTTP_SERVER_VARS["PHP_SELF"], $pageNum_RsMonitor, $queryString_RsMonitor, "&Columnname=BuyerName&OrderWay=desc"); ?>">Buyer</a></td>
                <td  align="center">
                <a href="<?php printf("%s?pageNum_RsMonitor=%d%s", $HTTP_SERVER_VARS["PHP_SELF"], $pageNum_RsMonitor, $queryString_RsMonitor, "&Columnname=STName&OrderWay=desc"); ?>">Ship To</a></td>
                <td  align="center">
                <a href="<?php printf("%s?pageNum_RsMonitor=%d%s", $HTTP_SERVER_VARS["PHP_SELF"], $pageNum_RsMonitor, $queryString_RsMonitor, "&Columnname=BTName&OrderWay=desc"); ?>">Bill To</a></td>
                <td  align="center">
                <a href="<?php printf("%s?pageNum_RsMonitor=%d%s", $HTTP_SERVER_VARS["PHP_SELF"], $pageNum_RsMonitor, $queryString_RsMonitor, "&Columnname=TotalQuantity&OrderWay=desc"); ?>">Quantity</a></td>
                <td  align="center">
                <a href="<?php printf("%s?pageNum_RsMonitor=%d%s", $HTTP_SERVER_VARS["PHP_SELF"], $pageNum_RsMonitor, $queryString_RsMonitor, "&Columnname=DueDate&OrderWay=desc"); ?>">Duedate</a></td>
                <td  align="center">
                <a href="<?php printf("%s?pageNum_RsMonitor=%d%s", $HTTP_SERVER_VARS["PHP_SELF"], $pageNum_RsMonitor, $queryString_RsMonitor, "&Columnname=StageDone&OrderWay=desc"); ?>">Staged</a></td>
                <td  align="center">
                <a href="<?php printf("%s?pageNum_RsMonitor=%d%s", $HTTP_SERVER_VARS["PHP_SELF"], $pageNum_RsMonitor, $queryString_RsMonitor, "&Columnname=Shipped&OrderWay=desc"); ?>">Shipped</a></td>
                <td  align="center">
                <a href="<?php printf("%s?pageNum_RsMonitor=%d%s", $HTTP_SERVER_VARS["PHP_SELF"], $pageNum_RsMonitor, $queryString_RsMonitor, "&Columnname=FedExTrackID&OrderWay=desc"); ?>">Tracking</a></td>
                <td  align="center">- </td>
                <td  align="center">&nbsp;</td>
              </strong></tr>
 
PHP hulp

PHP hulp

26/12/2024 07:59:22
 
Frank -

Frank -

26/02/2008 11:28:00
Quote Anchor link
Zie dit paginanation-script, die doet soortgelijke dingen. Deze is welliswaar opgezet voor PostgreSQL, maar het is standaard SQL die ook in MySQL werkt.

Waar moet je op letten: Controleer heel goed of variabelen bestaan en de juiste waarde hebben. print_r en var_dump zijn je beste vrienden.

Ps. $HTTP_SERVER_VARS["PHP_SELF"] is oud, erg oud, en onveilig. Gebruik $_SERVER['SCRIPT_NAME'].

Pps. 9x vrijwel dezelfde code inkloppen, de urls, kan slimmer, dit vraagt om een functie of lus.
 
Pieter

Pieter

26/02/2008 13:47:00
Quote Anchor link
Allereerst: dank je voor de snelle respons.
Vervolgens: dat er oude dingen insteekt verbaasd me niet. :-) Sommige stukken komen van een applicatie die ik zou moeten aanpassen voor mijn stage door extra functionaliteit in te steken.

Eerst wou ik Ajax toepassen maar ze hebben liever alleen php en Mysql.

Maar ik zal eens die pagination script bekijken en zien wat ik ervan kan leren.

Ook die functie.. bedoel je een while lus ofzo?
 
Frank -

Frank -

26/02/2008 13:51:00
Quote Anchor link
Met een while maak je inderdaad een lus, dat lost het probleem van 9x dezelfde code op. Met een functie kun je wellicht eenvoudiger jouw url's aanmaken, maar deze zal mogelijk niet zo heel veel afwijken van de opzet met prinf() die je nu hebt. Dat ligt vooral aan de manier waarop je de data beschikbaar hebt.

Zelf zou ik eerst een lus inbouwen, dan komt een slimme functie eventueel later wel. Bij het debuggen van je huidige probleem kom je wellicht vanzelf wel een oplossing tegen.
 
Pieter

Pieter

27/02/2008 12:31:00
Quote Anchor link
Ok, stap per stap, ik heb jouw link even bekeken en al wat aanpassingen gemaakt..

Hij "doet" al een sorting maar niet helemaal zoals ik het wil
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    //check for ordering
    if ((!isset($_GET['Columnname']))) {
        $Columnname = "PODate";
        $OrderWay = "DESC";
    }else {
        $Columnname = $_GET['Columnname'];
        $OrderWay = $_GET['Orderway'];
        if ($OrderWay="DESC")
        {$OrderWay = "ASC";}
        else {$OrderWay=("DESC");}
    }
    
    $OrderColumn = "&Columnname=".$Columnname;
    $OrderString = "&OrderWay=".$OrderWay;    


En een voorbeeld van de link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href="<?php echo "?pageNum_RsMonitor=".$pageNum_RsMonitor.$queryString_RsMonitor."&Columnname=PONum".$OrderString; ?>">PO Number</a></td>


Hij sort dus.. en voor je klikt op de link geeft hij in de url (ga ik later aanpassen dat je die niet ziet, maar voor het moment is dit wel handig zou) DESC, als ik klik.. doet hij ASC als ik mij niet vergis ipv DESC en de link daarna verandert naar ASC
Klik ik verder zie ik geen verandering meer.. well blijft hij de pagina elke keer laden..

help?
Dank, bij voorbaat.
 
Pieter

Pieter

29/02/2008 09:19:00
Quote Anchor link
Ok, ik heb het doen lukken.
Alleen geven de images niet juist weer.. hij blijft de ASC image tonen..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    function Direction($column)
    {

        $querystring = $_SERVER['QUERY_STRING'];
        if (strpos($querystring, $column) != false)
        {

            $sorting = $_GET['OrderWay'];
            if ($sorting = "ASC") {return "public/media/images/ascending.gif";}
            elseif ($sorting = "DESC") {return "public/media/images/descending.gif";}
            else return "public/media/images/unsorted.gif";
        }

        return "public/media/images/unsorted.gif";
    }
?>
 
Pieter

Pieter

29/02/2008 09:20:00
Quote Anchor link
Edit: hij blijft de asc image geven als ik wil sorteren.. de unsorted img in het begin wordt wel getoond..
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.