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.
Ja, heb ik ook omdat ik dat intyp als ik een link invoer.
Ik weet niet hoe het anders moet.
?
Onbekende gebruiker
15-11-2006 15:48
Ik had eerst een aparte tabel voor de prijzen.
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:
<?php
<div class="prijs" id="prijs">
<?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:
<?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.");
?>
En dit kan dus niet omdat er een "woord" in het dropdown menu staat en dus geen getal (prijs_id)
Waar komen die getallen vandaan en waarom sla je ze niet in een nummeriek dataveld op? Wanneer je een text-datatype kiest, wordt er alphabetisch gesortereerd en creeer je dus van dit soort problemen.
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?
Waarom zet je in het value attribuut van de <option> tag niet het prijs_id neer dan?
<?php
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...
?
Onbekende gebruiker
15-11-2006 16:37
@Frank
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:
<?php
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.
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.
?
Onbekende gebruiker
15-11-2006 16:57
@Blanche
Natuurlijk!!
Ik heb het nu zo en het werkt. Bedankt.
<?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>';
?>
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.
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.