We hebben verschillende lijsten op onze site voor o.a. het nieuws, games, reviews etc. die uit de database worden gehaald en geordend staan op naam. Ik wil ze ook kunnen ordenen op auteur, datum en eventueel cijfer. Hoe kan ik dit (in een notendop) doen zonder aparte paginas te moeten aanmaken? (dus gewoon de ORDER veranderen door bv. op het kopje auteur te klikken)

Bvd
<?php

$query = "SELECT auteur, datum, naam FROM table";

switch($_GET['order']){
case 1:
$query .= " ORDER BY auteur";
break;
case 2:
$query .= " ORDER BY datum";
break;
default:
$query .= " ORDER BY naam";
}

?>

en dan wordt een link bv:
pagina.php?order=1
Of, korter:
<?php
$sortorder = (isset ($_GET['sortorder'])) ? ($_GET['sortorder']) : ('naam');
$query = "SELECT auteur, datum, naam FROM table ORDER BY $sortorder";
?>
Heel erg bedankt!

Oh ik heb nog één vraagje (mijn status newbie verklaart het al): Hoe kan ik de order ascending maken als de order bv. al op dat sortorder staat?
bv. je hebt auteur aangeklikt en de lijst staat descending gesorteerd op auteur, klik je nog een keer op auteur dan staat hij ascending gesorteerd.

Ik heb al wat geprobeerd met elseif ($_GET['sortorder']) = nouja dat wou allemaal niet echt werken
Ik ga dan even verder met mijn voorbeeld:
<?php

$query = "SELECT auteur, datum, naam FROM table";

switch($_GET['order']){
case 1:
$query .= " ORDER BY auteur";
break;
case 2:
$query .= " ORDER BY datum";
break;
default:
$query .= " ORDER BY naam";
}

if(isset($_GET['type']) && $_GET['type'] == 'ASC'){
$type = 'DESC';
}else{
$type = 'ASC';
}

$query .= ' '.$type;

?>

en je link wordt dan bijvoorbeeld:
pagina.php?order=1&type=$type
En de uitbreiding op mijn manier:
<?php
$sortorder = (isset ($_GET['sortorder'])) ? ($_GET['sortorder']) : ('naam');
$type = (isset ($_GET['type']) && $_GET['type'] == 'ASC') ? ('DESC') : ('ASC');
$query = "SELECT auteur, datum, naam FROM table ORDER BY $sortorder $type";
?>
Had ik de boel zitten quoten ipv editen.
Heel erg bedankt weer allebei,
Het werkt perfect!
Hier is een compleet voorbeeld dat ik een keer gevonden heb op phphulp. Het is geschreven door Jan Koehoorn.

<?php

$db_name = 'boekendb';
$tb_name = 'boeken';
echo "<br><strong><center>Door op de titel van de kolommen te klikken wordt de sorteervolgorde gewijzigd.</center></strong><br><br>";
display_table('boekendb','boeken');
function display_table ($db_name, $tb_name) {
# haal de namen en het aantal velden op
$fields = mysql_list_fields ($db_name, $tb_name);
$columns = mysql_num_fields ($fields);

# als er op een kolomkop geklikt is, is de naam van die kolom
# beschikbaar via $_GET
if (isset ($_GET['order_by'])) {
$order_by = $_GET['order_by'];
}
else {
$order_by = 'id';
}

if (isset ($_GET['order_type']) && !isset ($_GET['action'])) {
$order_type = $_GET['order_type'];

if ($order_type == 'ASC') {
$order_type = 'DESC';
}
else {
$order_type = 'ASC';
}
}
else {
$order_type = 'ASC';
}

echo '<div id="table3">';
echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
//echo '<table border=1>';
echo '<tr>';
//echo '<th>edit</th>';
//echo '<th>delete</th>';

# de titelrij van de tabel in elkaar zetten
# zorgen dat de kolomkoppen aanklikbaar zijn
for ($i = 1; $i < $columns-1; $i++) {
echo "\n";
echo '<th>';
$fieldname = mysql_field_name ($fields, $i) ;
echo "<a href=\"?order_by=$fieldname&order_type=$order_type\">$fieldname</a>";
echo '</th>';
}

$sql = "SELECT *
FROM $tb_name
ORDER BY $order_by $order_type";
$res = mysql_query ($sql) or die (mysql_error ());

while ($row = mysql_fetch_array ($res)) {
echo "\n";
echo '<tr>';
# via deze links kun je de pagina uitbreiden met een delete of een edit-mogelijkheid
//echo "<td><a href=\"?action=edit&id=$row[id]&order_by=$order_by\">edit</a></td>";
//echo "<td><a href=\"?action=delete&id=$row[id]&order_by=$order_by\">delete</a></td>";

for ($i = 1; $i < $columns-1; $i++) {
echo '<td>';
echo $row[$i];
echo '</td>';
}

echo '</tr>';
}

echo '</tr>';
echo '</table1>';
echo '</div>';

}
?>

Reageren