Datensätze ab - und aufsteigend (mit Pfeilen)

123123123

Erfahrenes Mitglied
Guten Morgen,

ich arbeite immer noch an meiner Benutzerliste.
Ich hab eine Tabelle erstellt mit Datensätze aus der Datenbank. Oben in der Tabelle stehen die Bezeichnugen der einzelnen Spalten, zB: Vorname.
Wie mache ich es, damit ich auf Vorname einmal klicke und die Vornamen aufsteigend sortiert sind und wenn ich nochmal auf Vorname klicke, die Vornamen dann absteigend sortiert sind. Bestimmt muss man da 'if' anwenden, aber wie das ist hier die Frage.
Muss ich da auch SQL-Abfragen machen also wie DESC oder ASC?
Hier der Code für die Tabelle:
PHP:
echo "<form action='benutzerliste.php' method='post'>";
	echo "<input type='submit' name='submit' style= 'display:none;' />";

	echo "<table class = 'user_tabelle' border= '1'>"; 
	echo "<tr>";
	echo "<th>".'Vorname'."</th>";
	echo "<th>".'Nachname'."</th>";
	echo "<th>".'Login'."</th>";
	echo "</tr>";
	echo "<tr>
 
So in etwa sollte es klappen:

PHP:
<?php

$art = (@$_GET["art"] == "ASC") ? "DESC" : "ASC";

if (isset($_GET["order"])) {
	$order = "ORDER BY " .$_GET['order'] ." " .$art;
} else {
	$order = "ORDER BY nummer " .$art;
}

$sql = "SELECT * FROM tabelle " .$order;

echo $sql;
echo "<br />";
?>
<a href="benutzerliste.php?order=vorname&art=<?php echo $art;?>">Vorname</a>
<br />
<a href="benutzerliste.php?order=nachname&art=<?php echo $art;?>">Nachname</a>

Der Wert für die Sortierfolge ($art) wird einfach immer umgekehrt und das Feld nach welchem sortiert werden soll, wird dem Link mitgegeben.
Wir die Seite "direkt" aufgerufen, tritt der ELSE-Abschnitt in Kraft (wobei du diese Sortierung natürlich anpassen musst).
 
Danke schon mal für die Antwort!
Wie mache ich es, das die Vornamen sich auch sortieren.
Also ich hab zB drunter 'Anke, Markus, Ralf' da stehen, die heißen in der Datenbank user_vorname.
Ich poste mal meine SQL- Abfrage (Bei SELECT):
Code:
" SELECT * 
								FROM benutzerliste 
								WHERE user_vorname LIKE '%{$_REQUEST['user_vorname']}%' 
								AND user_nachname LIKE '%{$_REQUEST['user_nachname']}%' 
								AND user_login LIKE '%{$_REQUEST['user_login']}%' ");

(Die anderen Daten muss man nicht beachten, die mache ich später dazu)
 
Fast so wie tombe schreibt - aber:
Wenn nach Vorname aufsteigens sortiert ist und ich nachher auf Nachname klicke, wird nach Nachname absteigend sortiert. Die Sortierreihenfolge sollte mMn nur geändert werden wenn man auf die gleiche Spalte klickt. Bei einer Anderen Spalte sollte wieder der die Standartrichtung eingestellt werden.

Ich habe da mal ein etwas komplexeres Beispiel, dafür ists schön generisch *g*.
PHP:
//Standarts defineren
define('C_DEFAULT_ORDER_BY', 'vorname');
define('C_DEFAULT_DIRECTION', SORT_ASC);

//Spalten definieren
$columns['vorname'] = array('direction' => C_DEFAULT_DIRECTION, 'title' => 'Vorname');
$columns['ort']     = array('direction' => C_DEFAULT_DIRECTION, 'title' => 'Ort');

//Die Eingaben auswerten und ggf. Standarts setzen
$orderBy = isset($_GET['orderBy']) ? $_GET['orderBy'] : C_DEFAULT_ORDER_BY;
if(!array_key_exists($orderBy, $columns)) $orderBy = C_DEFAULT_ORDER_BY; 
$direction = (int) (isset($_GET['direction']) ? $_GET['direction'] : C_DEFAULT_DIRECTION);

/**
 *  --- Der folgende Codel kann auch aus der DB gemacht werden. Inkl. des Sortings
 * Hier der zu Testzwecken nicht genutzte Code für die DB-Daten:
 *  $sqlDirection = ($direction == SORT_DESC) ? 'DESC' : '';
 *  $sql = "SELECT vorname, nachname FROM myTable ORDER BY {$orderBy} {$sqlDirection};";
 *  $result = mysql_query($sql);
 *  $data = array()
 *  foreach($row = mysql_fetch_assoc($result)) $data[] = $row;
 */

// --- Ich simuliere hier die DB-Daten
    //Daten
    $data[] = array('vorname' => 'Hans',    'ort' => 'Zürich');
    $data[] = array('vorname' => 'Peter',   'ort' => 'Bern');
    $data[] = array('vorname' => 'Thomas',  'ort' => 'Basel');
    $data[] = array('vorname' => 'Stefan',  'ort' => 'Genf');
    //Daten sortieren --- array_sort_by_subarray_item(): http://wiki.yaslaw.info/wikka/PhpArraySortBySubarrayItem
    array_sort_by_subarray_item($data, $orderBy, $direction);
// -- Ende DB-Simulations-Teil

//Die Direction für den Link auf aktuelle Spalte anpassen.
if(($direction == SORT_ASC)) $columns[$orderBy]['direction'] = SORT_DESC;  

//Tabelle ausgeben
echo "<table>\n";
echo "  <tr>\n";
//Titelzeilen
foreach($columns as $key => $col){
    echo "    <th><a href = '?orderBy={$key}&direction={$col['direction']}'>{$col['title']}</a></th>\n";
}
echo "  </tr>\n";
//Datenzeilen
foreach($data as $item){
    echo "  <tr>\n";
    //Datenfleder
    foreach(array_keys($columns) as $colName){
        echo "    <td>{$item[$colName]}</td>\n";
    }
    echo "  </tr>\n";
}
echo '</table>';

Hier die Ausgabe
HTML:
<table>
  <tr>
    <th><a href = '?orderBy=vorname&direction=3'>Vorname</a></th>
    <th><a href = '?orderBy=ort&direction=4'>Ort</a></th>
  </tr>
  <tr>
    <td>Hans</td>
    <td>Zürich</td>

  </tr>
  <tr>
    <td>Peter</td>
    <td>Bern</td>
  </tr>
  <tr>
    <td>Stefan</td>
    <td>Genf</td>
  </tr>
  <tr>
    <td>Thomas</td>
    <td>Basel</td>
  </tr>
</table>
 
Hey hab das etwas anders gelöst, so in etwa wie tombe!
PHP:
$sortorder = (isset($_REQUEST['sortorder']) && $_REQUEST['sortorder'] == "asc") ? "desc" : "asc";
	
	$sqlOrder = "user_vorname ASC, user_nachname ASC, user_login ASC";
	if(isset($_REQUEST['sort'])) {
		$sqlOrder = "{$_REQUEST['sort']} {$sortorder}";
	}
Und halt unten verlinkt!

So jetzt noch eine Frage:
Ich habe ja ein Formular erstellt, da kann man auch neuen User anlegen.
Wie kann man machen, wenn der User nichts in die Felder eingibt und dann auf abspeichern klickt, das eine Meldung kommt,
"Bitte ausfüllen". Wie würde das mit IF aussehen?
 
Wenn ein Feld nicht ausgefüllt wird, dann wird es beim Abschicken auch nichts übertragen.

Prüfe also einfach ob die entsprechende $_POST-Variable existiert und einen gültigen Wert hat.

PHP:
if (isset($_POST['nachname']) {
    echo "Dein Name ist " .$_POST['nachname'];
} else {
    echo "Es wurde kein Name angegeben";
}
if (!isset($_POST['Postleitzahl'] or !is_numeric($_POST['postleitzahl'])) {
    echo "Es wurde entweder keine oder eine gültige Postleitzahl angegeben";
}
 
Hey danke für die Hilfe!! Jetzt geht alles!
So hab noch eine Frage:
Wie kann den Namen von den angemeldeten User anzeigen? Mit $_SESSION oder? Also bei mir ist so '$_SESSION['user']'.
Was muss ich noch übergeben, das da nicht nur "Array" steht?
Danke!!
 
Zurück