database sortering afhankelijk van keuze in form dropdown
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.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?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> <input name="SUBMIT" type="submit" value="Zoeken" /></td>
<td> </td>
<td> </td>
<td> </td>
<td> </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);
?>
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> <input name="SUBMIT" type="submit" value="Zoeken" /></td>
<td> </td>
<td> </td>
<td> </td>
<td> </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);
?>
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 05/03/2015 11:27:16 door - Ariën -
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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.
}
?>
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!
Gewijzigd op 04/03/2015 08:10:09 door Thom nvt
Ga er morgen mee aan de slag, alvast bedankt !!
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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.
}
?>
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
Gewijzigd op 07/03/2015 10:59:09 door Michel D