Tabelle Sortieren incl. SQL

FlockY

Mitglied
Hallo Gemeinde,

ich stehe vor einem Problem dass ich nicht Lösen kann.

Ich gebe eine Tabelle aus, bestehend aus:

Kartennummer - Vorname - Nachname - Teamnummer


Diese möchte ich auch entsprechend sortieren können mit $_GET. Klappt auch bisher prima.

Mein Code sieht folgendermaßen aus:

PHP:
<? include './headeradmin.php'; 

$order = $_GET['order'];
$direction = $_GET['direction'];


IF (empty($order)) { $order = 'Kartennummer'; }

IF ($direction == 'asc') {
$direction = 'desc'; 
} elseif ($direction == 'desc') {
$direction = 'asc';
} elseif (empty($direction)) {
$direction = 'asc';}

$connect = odbc_connect("DTKS-EV", "", "") or die("ERROR");

$sql = "SELECT Mitarbeiter.Kartennummer, Mitarbeiter.Vorname, Mitarbeiter.Nachname, Mitarbeiter.Teamnummer, Teamleiter.TLKartennummer FROM Mitarbeiter LEFT JOIN Teamleiter ON Mitarbeiter.Kartennummer = Teamleiter.TLKartennummer ORDER BY $order $direction";

$j = 0;

$result = odbc_exec($connect, $sql);
while(odbc_fetch_row($result))
{
$Kartennummer[] = odbc_result($result, 1); 
$Vorname[] = odbc_result($result, 2); 
$Nachname[] = odbc_result($result, 3); 
$Teamnr[] = odbc_result($result, 4); 
$Teamleiterkr[] = odbc_result($result, 5);
$j += 1;
}

echo "<table align=center border=2>
<th><a href=./mitarbeiterverwalten.php?order=Kartennummer&direction=$direction>Kartennummer</a></th>
<th><a href=./mitarbeiterverwalten.php?order=Vorname&direction=$direction>Vorname</a></th>
<th><a href=./mitarbeiterverwalten.php?order=Nachname&direction=$direction>Nachname</a></th>
<th><a href=./mitarbeiterverwalten.php?order=Teamnummer&direction=$direction>Teamnummer</a></th>
<th>Men&uuml;</th>";
$i = 0;


Dieser Code hat zur Folge dass eigentlich bei jedem Aufruf der gelinkten Tabellenüberschriften zwischen ASC und DESC geswitcht wird, unabhängig davon welche Spalte ich ausgewählt hab.

z. B.: Habe ich gerade nach Kartennummer und ASC sortiert, und klicke auf Vorname wird dieser sofort DESC sortiert. usw.

Das stellt kein großes Problem dar, aber wenns dafür ne simple Lösung gibt bitte nennen.


Mein Hauptproblem besteht darin dass ich natürlich auch noch kleine .gif Pfeile hinter die Überschrift einbauen will sofern diese Spalte gerade sortiert wird.

Wie ich das elegant lösen könnte, fällt mir im Moment nicht ein. In meinem Hinterkopf schwirren variable Variablen.


Vielleicht kennt jemand eine elegante und einfache Lösung.

Bin dankbar für jeden Tipp/Vorschlag.


Vielen Dank.

Flocky
 
Also erstmal zu deinem Code:
PHP:
$direction = $_GET["direction"];
// ...
// andere sachen
// ...
IF ($direction == 'asc') { 
  $direction = 'desc';  
} elseif ($direction == 'desc') { 
  $direction = 'asc'; 
} elseif (empty($direction)) { 
  $direction = 'asc';
}
Heißt: Hole direction aus Adresszeile. Wenn es ASC ist dann solls zu DESC, sonst zu ASC, sonst zu ASC... Bisschen übertrieben und vor allem wenn einer spaßeshalber
direction=ASC;%20SELECT%20*FROM%20Tabelle
in die Adresszeile schreibt dann kommen lustige Fehler und mit direction=ASC;%20UPDATE%20Tabelle%20SET%20admin=1%20WHERE%201
oder ähnlichem kann man in deiner SQL-Tabelle rumpfuschen. Also lieber:

PHP:
if ($_GET["direction"] == 'asc')
{ 
  $direction = 'desc';  
}
else
{
  $direction = 'asc';
}

Und dann, wenn du schon Bedingungen beherrscht (if) dann kannst du sie auch für die Pfeile nutzen. Musst nur dein echo für die Tabelle weiter aufsplitten und passend dazwischen:
PHP:
if ($order == "Kartennummer")
{
  echo '<img src="pfeil.gif" alt="" title="" />';
}
 
Zuletzt bearbeitet:
Hallo und Danke für deine schnelle Antwort.

Bei der ersten Bedingung hattest du recht. Das habe ich auch umgeändert.

Jedoch vor jede Überschrift eine weitere IF-Bedingung einzufügen war mir durchaus bewusst, doch fand ich nicht schick genug. (P.S. Mein Code soll immer so kurz wie möglich sein :))

Also hab ichs jetzt doch mit meiner Idee von den variablen Variablen hinbekommen.

Falls es jemanden interessiert:

PHP:
<? include './headeradmin.php'; 

$order = $_GET['order'];
$direction = $_GET['direction'];

$Vorname = $Kartennummer = $Nachname = $Teamnummer  = '../img/spacer.gif';

IF (empty($order)) { $order = 'Kartennummer'; }

$asc_desc_gif = $order;

if ($_GET["direction"] == 'asc')
{ 
  $direction = 'desc';  
}
else
{
  $direction = 'asc';
}  

$$asc_desc_gif = "sort$direction.gif";

$connect = odbc_connect("DTKS-EV", "", "") or die("ERROR");

$sql = "SELECT Mitarbeiter.Kartennummer, Mitarbeiter.Vorname, Mitarbeiter.Nachname, Mitarbeiter.Teamnummer, Teamleiter.TLKartennummer FROM Mitarbeiter LEFT JOIN Teamleiter ON Mitarbeiter.Kartennummer = Teamleiter.TLKartennummer ORDER BY $order $direction";

$j = 0;

$result = odbc_exec($connect, $sql);
while(odbc_fetch_row($result))
{
$KartennummerArr[] = odbc_result($result, 1); 
$VornameArr[] = odbc_result($result, 2); 
$NachnameArr[] = odbc_result($result, 3); 
$TeamnrArr[] = odbc_result($result, 4); 
$TeamleiterknrArr[] = odbc_result($result, 5);
$j += 1;
}

echo "<br><div align=center>Die Datenbank ergab folgende Informationen f&uuml;r alle Mitarbeiter: 
<b><br><br><table border=1 align=center valign=top width=95%>";

echo "<table align=center border=2>
<th><a href=./mitarbeiterverwalten.php?order=Kartennummer&direction=$direction>Kartennummer</a>
<img src=../img/$Kartennummer></th>

<th><a href=./mitarbeiterverwalten.php?order=Vorname&direction=$direction>Vorname</a>
<img src=../img/$Vorname></th>

<th><a href=./mitarbeiterverwalten.php?order=Nachname&direction=$direction>Nachname</a>
<img src=../img/$Nachname></th>

<th><a href=./mitarbeiterverwalten.php?order=Teamnummer&direction=$direction>Teamnummer</a>
<img src=../img/$Teamnummer></th>
 
Zurück