Hoe sorteer je op getallen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

15/11/2006 15:32:00
Quote Anchor link
Ik heb een dropdown menu met getallen erin.

0 tot 10
10 tot 20
30 tot 40
enz.

Die selecteer ik zo uit de database:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= "SELECT prijs_naam FROM linken ORDER BY prijs_naam";
?>


Maar hij zet ze niet netjes van klein naar groot.
Hoe kan ik dit wel netjes krijgen?
 
PHP hulp

PHP hulp

18/11/2024 22:46:32
 
Frank -

Frank -

15/11/2006 15:35:00
Quote Anchor link
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.
 
PHP Newbie

PHP Newbie

15/11/2006 15:36:00
Quote Anchor link
Wat gebeurd er wel dan?

1
11
12
13
14
15
16
17
18
19
20
2
21

zoiets?
 

15/11/2006 15:38:00
Quote Anchor link
Ja, heb ik ook omdat ik dat intyp als ik een link invoer.

Ik weet niet hoe het anders moet.
 

15/11/2006 15:48:00
Quote Anchor link
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:

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

<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 '&nbsp;<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)
PHP script in nieuw venster Selecteer het PHP script
1
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:&nbsp;&#8364;&nbsp;' . $_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)
 
Frank -

Frank -

15/11/2006 15:51:00
Quote Anchor link
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?
 
Joren de Wit

Joren de Wit

15/11/2006 15:54:00
Quote Anchor link
Waarom zet je in het value attribuut van de <option> tag niet het prijs_id neer dan?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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...
 

15/11/2006 16:37:00
Quote Anchor link
@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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<h1>Kadobonnen in de prijsklasse:&nbsp;&#8364;&nbsp;' . $_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?
 
Joren de Wit

Joren de Wit

15/11/2006 16:46:00
Quote Anchor link
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.
 

15/11/2006 16:57:00
Quote Anchor link
@Blanche

Natuurlijk!!

Ik heb het nu zo en het werkt. Bedankt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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:&nbsp;&#8364;&nbsp;' . $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.
 
Joren de Wit

Joren de Wit

15/11/2006 17:01:00
Quote Anchor link
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.
 

15/11/2006 17:04:00
Quote Anchor link
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.


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 :)
 
Joren de Wit

Joren de Wit

15/11/2006 17:07:00
Quote Anchor link
Kijk ook eens hier voor een voorbeeld van dit soort systeempjes.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 

15/11/2006 17:09:00
Quote Anchor link
Sorry, link werkt niet.

Inmiddels wel!
Gewijzigd op 01/01/1970 01:00:00 door
 



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.