Sorteren op kolom
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)
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
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);
?>
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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"> </td>
</strong></tr>
<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"> </td>
</strong></tr>
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.
Zie 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.
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?
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.
Hij "doet" al een sorting maar niet helemaal zoals ik het wil
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
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)
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.
Alleen geven de images niet juist weer.. hij blijft de ASC image tonen..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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";
}?>
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";
}?>
Edit: hij blijft de asc image geven als ik wil sorteren.. de unsorted img in het begin wordt wel getoond..