Avatar billede svjensen Nybegynder
24. april 2003 - 10:25 Der er 12 kommentarer og
1 løsning

Sortering af databseposter efter overskrift.

Jeg har en side med et udtræk fra en MySQL database. Udtrækket består af fire kolonner (grad, navn, funktion, status).
Jeg ønsker, at brugeren skal kunne sortere udtrækkene efter en af disse, ved at klikke på kolonneoverskriften. Funktionaliteten er bl.a. set på disse sider fx i oversigten over hvilke spørgsmål man har oprettet.

Er der nogen der kan hjælpe?
Avatar billede eagleeye Praktikant
24. april 2003 - 10:34 #1
Du kan lave det ved den bare toggler DESC elle ASC. Eks:

<%
order = Request.querystring("order")
if lcase(order) = "desc" OR order = "" then
  order = "ASC"
  nyorder = "DESC"
else
  order = "DESC"
  nyorder = "ASC"
end if
kolonne = Request.querystring("kol")
if kolonne = "" then kolonne = "grad"


SQL = "SELECT * FROM xxxx ORDER BY " & kolonne & " " & order & ";"



'Udksirv linksne det skal så ind i en fin tabel her bare som eks:

Repsonse.write "<a href=""?kol=grad&order=" & nyorder & """>Grad</a>"

Repsonse.write "<a href=""?kol=navn&order=" & nyorder & """>Navn</a>"

Repsonse.write "<a href=""?kol=funktion&order=" & nyorder & """>Funktion</a>"

Repsonse.write "<a href=""?kol=status&order=" & nyorder & """>status</a>"
Avatar billede svjensen Nybegynder
24. april 2003 - 10:37 #2
Som en lille snack så må det meget gerne være muligt at skifte mellem ascending og descending ved at trykke på samme overskrift igen.
Avatar billede eagleeye Praktikant
24. april 2003 - 10:38 #3
Det er sådan set også det der sker.. Den skifter retning hver gang man klikker på en kolonne.
Avatar billede svjensen Nybegynder
24. april 2003 - 10:39 #4
Jeg havde ikke set dit svar får jeg skrev min anden kommentar. Jeg prøver det lige af.
Avatar billede erikjacobsen Ekspert
24. april 2003 - 10:40 #5
Det er principielt farligt at lægge dele af sqlsætningen ud i links som

  "<a href=""?kol=grad&order=" & nyorder & """>

da det giver uanede muligheder for at lave SQL-injection, og kigge på og
ødelægge din database. Når du har fået det til at virke, så skal du til
at kigge på sikkerheden inden du lægger det ud til andre.
Avatar billede eagleeye Praktikant
24. april 2003 - 10:40 #6
Den starter med:
Grad -> ASC
Så trykker man på navn så bliver det
Navn -> DESC
Så trykker man på navn igen
Navn -> ASC

Det er lettest at lave på den måde man man kan godt lave det sådan den kun togler retning ved tryk på samme kolonne to gange efter hinanden.
Avatar billede eagleeye Praktikant
24. april 2003 - 10:43 #7
Ja det så relativt let at lave en if sætning som tjekker på om stregnen som ligger i sin SQL er gyldig.

'Tjekker om kolonne indeholder gyldig kolonnenavn eller vælg kolonnen grad.
if NOT (kolonne = "grad" OR kolonne= "navn" OR kolonne ="funktion" OR kolonne ="status") then kolonne = "grad"
Avatar billede eagleeye Praktikant
24. april 2003 - 10:49 #8
Eller kan man lave et tal for hver kolonne i stedet for kolonne navnet og så lave en select case som lavet tallet om til et brugbart kolonnenavn:

kolonne = Request.querystring("kol")
select case Cstr(""&kolonne)
case "1"  strkolonne = "grad"
case "2"  strkolonne = "navn"
case "3"  strkolonne = "funktion"
case "4"  strkolonne = "status"
else
  strKolonne = "grad"
end select

Og så i linkene overføre 1,2,3,4 istedet for kolonnanavnet.:
Repsonse.write "<a href=""?kol=1&order=" & nyorder & """>Grad</a>"
Avatar billede svjensen Nybegynder
24. april 2003 - 11:11 #9
So far so good. Jeg er villig til at give point for indsatsen indtil videre, men hvis du/I har tid/overskud til at hjælpe mig til at få rettet det ind, så den starter med ASC hver gang man trykker på en ny kolonne, og bruger DESC hvis man trykker på den igen, så vil det være nice.

/søren
Avatar billede svjensen Nybegynder
24. april 2003 - 11:12 #10
Jeg vil i øvrigt gerne vide mere om sikkerhed i f.m. SQL forespørgsler på nettet. Kan I hjælpe mig videre?
Avatar billede eagleeye Praktikant
24. april 2003 - 11:15 #11
Ja det kan laves man skal så holde styr på hvilken kolonne man viser og så kommer der bare en if sætning som afgøre retning på linket det er hurtigt lavet to sekunder..


Omkring det med kolonnerne kan du lave disse to om så du ikke overføre kolonnenavne med et tal for kolonnen:

kolonne = Request.querystring("kol")
if kolonne = "" then kolonne = "grad"

Til dette.

kolonne = Request.querystring("kol")
select case Cstr(""&kolonne)
case "1"  strkolonne = "grad"
case "2"  strkolonne = "navn"
case "3"  strkolonne = "funktion"
case "4"  strkolonne = "status"
case else
  strKolonne = "grad"
end select
Avatar billede eagleeye Praktikant
24. april 2003 - 11:19 #12
Det første med order skal beholdes og hvis du laver på den måde med select case skal linkne laves sådan her, så et link skal laves over 5 linjer:

Repsonse.write "<a href=""?kol=1&order="
if strkolonne = "grad" then
  Repsonse.write nyorder
else
  Repsonse.write "ASC"
end if
Repsonse.write """>Grad</a>"

osv med de andre.
Avatar billede svjensen Nybegynder
24. april 2003 - 11:31 #13
Jeg takker ærbødigst. Du har til fulde fortjent pointene.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester