database sortering afhankelijk van keuze in form dropdown

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Michel D

Michel D

03/03/2015 23:32:49
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>

- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 05/03/2015 11:27:16 door - Ariën -
 
PHP hulp

PHP hulp

19/04/2024 05:47:45
 
Thom nvt

Thom nvt

04/03/2015 08:08:28
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
}
?>


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
 
Michel D

Michel D

04/03/2015 22:57:11
Quote Anchor link
Ga er morgen mee aan de slag, alvast bedankt !!
 
Ivo P

Ivo P

05/03/2015 11:23:25
Quote Anchor link
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.
 
Michel D

Michel D

07/03/2015 10:58:13
Quote Anchor link
Zo werkt hij perfect, mijn dank is groot !!
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
}
?>


@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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.