Hallo,
Bij onderstaand script wordt een dropdown weergegeven.
Ik zou graag willen dat de zoekfunctie in de mysqli query standaard DESC gesorteerd wordt weergegeven maar als ik nogmaals dezelfde optie in de dropdown kies deze als ASC wordt gesorteerd. mocht ik een derde keer dezelfde zoekopdracht verzenden mag hij weer DESC sorteren. Als ik echter een ander item uit de dropdown kies als zoekopdracht moet deze weer standaard DESC zijn. Ik heb deze functie nog niet kunnen vinden. wie kan mij helpen ?

Op de huidige manier wisselt de sortering bij elke keuze in het menu.

Excuses voor de slordige code, zet alles later nog om naar php.

<?PHP
include("functies.php");
$filename = basename($_SERVER['PHP_SELF']);
	
	
	if (isset($_GET['dir']) && $_GET['dir'] == "ASC") {$dir = 'DESC';} else { $dir = "DESC";}
	if (isset($_GET['dir']) && $_GET['dir'] == "DESC") {$dir = 'ASC';}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="css/basis.css" rel="stylesheet" type="text/css">
<title>Naamloos document</title>
</head>

<body>
<table width="90%" border="1" align="center">
  <tr><form method="POST" action="<?PHP '.$filename.' ?>?dir=<?PHP echo $dir ?>">
    <td>Sorteren op: <select name="drop">
	<?PHP if (!isset($_POST['drop']) || $_POST['drop'] == ""|| $_POST['drop'] == " ") {	
	echo '<option selected value="id"></option>';}
	foreach ($drop as $keuze) {
		if 	(isset($_POST['drop']) && $_POST['drop'] == $keuze['item']) { echo '<option selected value="'.$keuze['item'].'">'.$keuze['naam'].'</option>';
			}  else {
			echo '<option value="'.$keuze['item'].'">'.$keuze['naam'].'</option>';
			} 
		}	?>
    </select>&nbsp;<input name="SUBMIT" type="submit" value="Zoeken" /></td> 
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
<?PHP

	//verzend naar database
	$conn = new mysqli('localhost', '???', '???', '???');
	
	if (isset($_POST['drop'])) {
	$search = mysqli_real_escape_string($conn, $_POST['drop']); 
	}
	// check connection
	if (mysqli_connect_errno()) {
	  exit('Connect failed: '. mysqli_connect_error());
	} 		
	
	if (isset($_POST['drop'])) {
	$query = "SELECT * FROM `reserve` ORDER BY `".$search."` $dir";
	}
	$result = mysqli_query($conn, $query);
	} else {
	$query = "SELECT * FROM `reserve` ORDER BY `id` $dir";
	$result = mysqli_query($conn, $query);
	}
?>
<table width="90%" border="1" align="center" class="zwartverdanal">
 <tr>
    <td><strong><strong>naam:</strong></td>
    <td><strong>adres</strong></td>
    <td><strong>postcode</strong></td>
    <td><strong>woonplaats</strong></td>
    <td><strong>E-mail</strong></td>
    <td><strong>voorstelling</strong></td>
    <td><strong>kaarten</strong></td>
    <td><strong>telefoonnummer</strong></td>
    <td><strong>opmerking</strong></td>
    <td><strong>reserveringscode</strong></td>
    <td><strong>betaaldatum</strong></td>
    <td><strong>betaling</strong></td>
  </tr>
<?PHP
while ($row = mysqli_fetch_array($result)) {
?>
  <tr>
    <td><?PHP echo $row[2].'. '.$row[3];?></td>
    <td><?PHP echo $row[4].' '.$row[5];?></td>
    <td><?PHP echo strtoupper($row[6]);?></td>
    <td><?PHP echo $row[7];?></td>
    <td><?PHP echo $row[8];?></td>
    <td><?PHP echo datumtijd_db($row[9]);?></td>
    <td><?PHP echo $row[10];?></td>
    <td><?PHP echo $row[11];?></td>
    <td><?PHP echo $row[12];?></td>
    <td><?PHP echo $row[13];?></td>
    <td><?PHP echo datum_db($row[14]);?></td>
    <td><?PHP echo $row[15];?></td>
  </tr>
 <?PHP
}
 ?>
</table>
</body>
</html>
<?PHP

mysqli_free_result($result);
mysqli_close($conn);
?>

Wat je kunt doen (je code is nogal onleesbaar dus ik beschrijf het even):
De huidige kolom opslaan in de sessie en deze na een submit met elkaar vergelijken.
Is de kolom hetzelfde? verander de sorteer volgorde.
Is de kolom anders? Zet sorteervolgorde naar 'DESC'.

Ongeveer zo:

<?php
session_start(); // Start de sessie

if (isset($_GET['drop'])) {
    if (isset($_SESSION['drop']) && $_SESSION['drop'] == $_GET['drop']) { // Is de opgeslagen waarde hetzelfde als de gesubmitte waarde?
    	if (isset($_SESSION['dir']) && $_SESSION['dir'] == 'DESC') { // Is de sorteervolgorde opgeslagen en is het DESC?
   			$dir = 'ASC'; // Maak er ASC van
    	} else { // Niet opgeslagen of niet DESC, maak er DESC van
			$dir = 'DESC';
    	}
    } else { // Niet hetzelfde veld of niet opgeslagen, standaard DESC
        $dir = 'DESC';
    }

    // Onthoud de waardes voor de volgende keer.
    $_SESSION['dir'] = $dir;
    $_SESSION['drop'] = $_GET['drop'];

    // De rest van je code.
}
?>


Dit is even uit de losse pols zonder te testen, er kan dus een foutje in zitten.
Succes!
Ga er morgen mee aan de slag, alvast bedankt !!
wat is de inhoud van $row[11]?

Dat weet je niet. Sterker nog: als je het vandaag uitgezocht hebt, kan het morgen zo maar anders zijn, als er aan de database gerommeld wordt.

Zeker als je SELECT * gebruikt, heb je geen idee wat er in welke volgorde binnenkomt. (zonder op dit moment de database te raadplegen)

Gebruik daarom gewoon $row['kolomnaam'].
En daarmee kun je fetch_array() evt ook vervangen door fetch_assoc().

Die paar bits winst die je maakt, weegt niet op tegen het verlies van de leesbaarheid en de kans op bugs.
Zo werkt hij perfect, mijn dank is groot !!
<?PHP
if (isset($_POST['drop'])) { // in orde
if (isset($_SESSION['drop']) && $_SESSION['drop'] == $_POST['drop']) { // Is de opgeslagen waarde hetzelfde als de gesubmitte waarde?
if (isset($_SESSION['dir']) && $_SESSION['dir'] == "DESC") { // Is de sorteervolgorde opgeslagen en is het DESC?
$dir = 'ASC'; // Maak er ASC van
} else { // Niet opgeslagen of niet DESC, maak er DESC van
$dir = 'DESC';
}
} else { // Niet hetzelfde veld of niet opgeslagen, standaard DESC
$dir = 'DESC';
}

// Onthoud de waardes voor de volgende keer.
$_SESSION['dir'] = $dir;
$_SESSION['drop'] = $_POST['drop'];
// De rest van je code.
}
?>

@Ivo: Je hebt gelijk maar het ging even over de functionaliteit, ga de code nu netjes maken. Dank voor het meedenken

Reageren