Hoe sorteer je op getallen?
0 tot 10
10 tot 20
30 tot 40
enz.
Die selecteer ik zo uit de database:
Maar hij zet ze niet netjes van klein naar groot.
Hoe kan ik dit wel netjes krijgen?
Dan heb je de boel waarschijnlijk als tekst opgeslagen, bv. een VARCHAR of TEXT. Met een INT, DECIMAL of ander nummeriek datatype kan dit nooit een probleem opleveren.
1
11
12
13
14
15
16
17
18
19
20
2
21
zoiets?
Ik weet niet hoe het anders moet.
prijs_id
prijs_naam
En als ik dan een link invoer in de linken-tabel dan zette ik daar het prijs_id neer.
Maar als iemand nu een prijs selecteerd in het dropdown menu (waar ik dus prijs_naam in heb staan) moet ik dat omzetten in prijs_id.
En daar kwam ik niet verder mee.
Dit is dan het dropdown menu:
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
<div class="prijs" id="prijs">
[code]<?php
$query = "SELECT prijs_naam FROM prijs ORDER BY prijs_id";
$result = mysql_query($query) or die ("Sorry maar ik kan de prijzen niet weergeven");
echo '<form method="POST">';
echo '<select class="select" name="prijs" >';
while ($row = mysql_fetch_assoc($result)){
echo '<option value="'.$row['prijs_naam'] .'" >'.$row['prijs_naam'].'</option>';
}
echo '</select>';
echo ' <input name="submit" type="image" value="prijs" src="plaatjes/pijlrechts.gif" alt="Bekijk deze categorie" />';
echo '</form>';
?>
</div> <!-- einde div prijs in het menulinks-->
?>
<div class="prijs" id="prijs">
[code]<?php
$query = "SELECT prijs_naam FROM prijs ORDER BY prijs_id";
$result = mysql_query($query) or die ("Sorry maar ik kan de prijzen niet weergeven");
echo '<form method="POST">';
echo '<select class="select" name="prijs" >';
while ($row = mysql_fetch_assoc($result)){
echo '<option value="'.$row['prijs_naam'] .'" >'.$row['prijs_naam'].'</option>';
}
echo '</select>';
echo ' <input name="submit" type="image" value="prijs" src="plaatjes/pijlrechts.gif" alt="Bekijk deze categorie" />';
echo '</form>';
?>
</div> <!-- einde div prijs in het menulinks-->
?>
En zo roep ik het aan:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
//de tabel voor prijs
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['submit'] == 'prijs') {
$sql = "SELECT * FROM linken WHERE prijs_id = '".$_POST['prijs']."'";
echo '<h1>Kadobonnen in de prijsklasse: € ' . $_POST['prijs'] . '</h1>';
$sql = "SELECT * FROM linken WHERE prijs_id = '".$_POST['prijs']."'";
$res = mysql_query($sql)or trigger_error ("Sorry maar ik kan de prijzen niet weergeven, probeer het later opnieuw.");
?>
//de tabel voor prijs
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['submit'] == 'prijs') {
$sql = "SELECT * FROM linken WHERE prijs_id = '".$_POST['prijs']."'";
echo '<h1>Kadobonnen in de prijsklasse: € ' . $_POST['prijs'] . '</h1>';
$sql = "SELECT * FROM linken WHERE prijs_id = '".$_POST['prijs']."'";
$res = mysql_query($sql)or trigger_error ("Sorry maar ik kan de prijzen niet weergeven, probeer het later opnieuw.");
?>
En dit kan dus niet omdat er een "woord" in het dropdown menu staat en dus geen getal (prijs_id)
Ps: Hoe ziet dit stuk van jouw datamodel er uit? En dan met name de datatypes.
Pps: Waarom <div class="prijs" id="prijs"> ? Dit zijn 2 verschillende zaken of is het soms een gokje wat je nu precies nodig hebt?
Code (php)
1
2
3
2
3
<?php
echo '<option value="'.$row['prijs_id'] .'" >'.$row['prijs_naam'].'</option>';
?>
echo '<option value="'.$row['prijs_id'] .'" >'.$row['prijs_naam'].'</option>';
?>
Moet je hem natuurlijk wel even selecteren met je query.
Maar kijk ook even naar de reactie van Frank, zorg dat je datamodel goed in elkaar steekt en dat de juiste gegevens in de juiste type kolommen staan...
Ik heb class="" verwijderd, was inderdaad dubbel-op
@Blanche
Zo werkt het en ik sorteer op prijs_id.
Maar nog iets.
Boven de gegevens die opgevraagd worden wil ik laten zien in welke prijsklasse ze gezocht hebben.
Dit doe ik zo:
Code (php)
1
2
3
2
3
<?php
echo '<h1>Kadobonnen in de prijsklasse: € ' . $_POST['prijs'] . '</h1>';
?>
echo '<h1>Kadobonnen in de prijsklasse: € ' . $_POST['prijs'] . '</h1>';
?>
Maar dan laat hij het prijs_id zien, dus een cijfer, en niet de prijs_naam.
Heb je hier nog een oplossing voor?
Die informatie zou je dan weer even uit de database op moeten halen. Het komt nu immers niet met de $_POST variabelen van je formulier mee.
Natuurlijk!!
Ik heb het nu zo en het werkt. Bedankt.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
//Laat zien in welke prijsklasse de bezoeker heeft gezocht
$sql = "SELECT prijs_naam FROM prijs WHERE prijs_id = '".$_POST['prijs']."'";
$res = mysql_query($sql)or trigger_error ("Sorry maar ik kan de prijzen niet weergeven, probeer het later opnieuw.");
$row = mysql_fetch_assoc($res);
echo '<h1>Kadobonnen in de prijsklasse: € ' . $row['prijs_naam'] . '</h1>';
?>
//Laat zien in welke prijsklasse de bezoeker heeft gezocht
$sql = "SELECT prijs_naam FROM prijs WHERE prijs_id = '".$_POST['prijs']."'";
$res = mysql_query($sql)or trigger_error ("Sorry maar ik kan de prijzen niet weergeven, probeer het later opnieuw.");
$row = mysql_fetch_assoc($res);
echo '<h1>Kadobonnen in de prijsklasse: € ' . $row['prijs_naam'] . '</h1>';
?>
Nog een vraag, als het mag.
Als je een bedrag hebt geselecteerd in het dropdown menu en de gegevens verschijnen. Dan gaat het bedrag uit het dropdown menu weer bovenaan staan. Dus je ziet niet meer wat je geselecteerd hebt. Is niet zo erg als je een korte keuze rij hebt en je ziet het natuurlijk boven de resultaten staan.
Maar is er een mogelijkheid om dit bedrag wat je hebt gekozen te laten staan?
Dus als je wel een lange keuze rij hebt dat je dan verder kunt gaan waar je gebleven bent.
In het formulier controleer je dan of $_SESSION['prijs'] bestaat en zo ja, dan zorg je dat aan de juiste <option> tag het 'selected' attribuut toegevoegd wordt.
Blanche schreef op 15.11.2006 17:01:
Je zou na het posten van het formulier de huidige waarde van $_POST['prijs'] op kunnen slaan in een sessie, bijvoorbeel $_SESSION['prijs'].
In het formulier controleer je dan of $_SESSION['prijs'] bestaat en zo ja, dan zorg je dat aan de juiste <option> tag het 'selected' attribuut toegevoegd wordt.
In het formulier controleer je dan of $_SESSION['prijs'] bestaat en zo ja, dan zorg je dat aan de juiste <option> tag het 'selected' attribuut toegevoegd wordt.
Ik denk dat dit weer iets is voor later, als de website draait.
Ik heb nog nooit iets gedaan met sessies.
Dat wordt dus mijn volgende project :)
hier voor een voorbeeld van dit soort systeempjes.
Kijk ook eens Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit