Avatar billede mskjoldp Novice
23. oktober 2005 - 02:17 Der er 17 kommentarer og
1 løsning

order by asc x 3

Hey E

Er det muligt at lave en SELECT sætning ala:

SELECT * FROM tabel WHERE bl.a = bl.a ORDER BY var1 asc var2 desc var3 asc var4 desc

?
/skjold
Avatar billede pidgeot Nybegynder
23. oktober 2005 - 02:36 #1
Jeg vil tro du blot kan bruge:

SELECT * FROM tabel WHERE bl.a = bl.a ORDER BY var1 asc, var2 desc, var3 asc, var4 desc;
Avatar billede mskjoldp Novice
23. oktober 2005 - 18:01 #2
hmmmm.... det er jo en mulighed :)
Avatar billede mskjoldp Novice
23. oktober 2005 - 19:58 #3
Det virker ikke. Jeg har prøvet at sætte det ind i en <a href

<a href="default.asp?mode=visstatus&esk=<%=Request.QueryString("esk")%>&skp=<%=Request.QueryString("skp")%>&aal=<%=Request.QueryString("aal")%>&statusQ=<%=Request.QueryString("statusQ")%>&orderby=<%=IndholdAll(arrCustom(i))%>,<%=IsSort(IndholdAll(arrCustom(i))) & " "%><%=sOrderBy%>&sort=<%=IsSort(IndholdAll(arrCustom(i)))%>&refreshSQL=<%=session("refreshSQL")%>">

samt

<a href="default.asp?mode=visstatus&esk=<%=Request.QueryString("esk")%>&skp=<%=Request.QueryString("skp")%>&aal=<%=Request.QueryString("aal")%>&statusQ=<%=Request.QueryString("statusQ")%>&orderby=<%=IndholdAll(arrCustom(i))%>,<%=IsSort(IndholdAll(arrCustom(i)))%>,<%=sOrderBy%>&sort=<%=IsSort(IndholdAll(arrCustom(i)))%>&refreshSQL=<%=session("refreshSQL")%>">

ingen af dem virker:
fejl:
Der er en syntaksfejl i ORDER BY-delsætningen.
Avatar billede pidgeot Nybegynder
23. oktober 2005 - 20:01 #4
Det ville være BETYDELIGT nemmere om du prøvede at få vist den SQL-sætning den kalder - det kan jo være fejlen ikke er i din SQL-syntax, men i stedet i dine variable.
Avatar billede pidgeot Nybegynder
23. oktober 2005 - 20:04 #5
Og når det er sagt, er det generelt en dårlig ide at smide en query direkte ind i et link - det afslører noget om databasens struktur, og din query kan være for lang til at kunne skrives ind i URL'en.
Avatar billede mskjoldp Novice
24. oktober 2005 - 07:25 #6
OK, jeg finder SQL sætningen.

Den afsløring af databasen - kan du sige nogen om db'en ud fra linket? Hvad?
Avatar billede nielle Nybegynder
24. oktober 2005 - 07:42 #7
23/10-2005 20:04:51> Det er også en dårlig ide, idet det tillader folk at rette URL'et og gøre grimme ting med din database. Jeg kunne f.eks. lave min egen lille hacker-side og så inkludere:

...&refreshSQL=DELETE%20FROM%20tabel">

Hvis du bare bevistløs udføre den SQL-sætning, du får via dit URL, har jeg dermed slettet indholdet af din tabel.
Avatar billede pidgeot Nybegynder
24. oktober 2005 - 14:53 #8
Værre endnu, hvis den side der linkes til er beregnet til at vise en SELECT query, kunne man foretage en SHOW TABLES (lige den er vist nok specifik for MySQL, men meningen forstås forhåbentlig...) og derefter lave DROP TABLE på dem alle.

Og det er jo ikke engang nok at bare kigge på det første ord - hvad siger du for eksempel til inputtet SELECT * FROM tabel; DROP TABLE tabel?
Avatar billede mskjoldp Novice
24. oktober 2005 - 15:01 #9
24/10-2005 07:42:03 >
24/10-2005 14:53:16 >
jeg har opsat følgende kode for at imødegå Jeres eks.

    rqSQL = replace(request.querystring("refreshSQL"),"'","''")
    sSort = replace(request.querystring("sort"),"'","''")
    Session("sort") = sSort
    sOrderBy = replace(request.querystring("OrderBy"),"'","''")
    Session("OrderBy") = sOrderBy
    esk = replace(request.querystring("esk"),"'","''")
    Session("esk") = esk
    statusQ = replace(request.querystring("statusQ"),"'","''")
    Session("statusQ") = statusQ
    skp = replace(request.querystring("skp"),"'","''")
    Session("skp") = skp
    aal = replace(request.querystring("aal"),"'","''")
    Session("aal") = aal

mener I at Jeres eks. stadigvæk kan slette/vise/DROP, efter ovenstående kode er brugt?
Avatar billede nielle Nybegynder
24. oktober 2005 - 18:16 #10
Hvis du blot udføre rsSQL uden at lave yderligere tjek end det viste - JA! Pidgeot's og mine eksempler får begge to lov til at passere direkte igennem.

Under alle omstændigheder er det den forkerte strategi du lægger dig, at først introducere sårbarheden ved at angive en SQL sætning, for derefter at forsøge at lukke de huller dette skaber. I stedet skal du fjerne SQL'en helt og i stedet opbygge den fra argumenterne - efter at disse selvfølgeligt er blevet renset for forsøg på SQL-injection.
Avatar billede mskjoldp Novice
25. oktober 2005 - 07:35 #11
OK.

Nielle kan du starte mig op med at opbygge en SQL fra argumenter?

BTW så efterspørger jeg en løsning på det oprindelige spg...
Avatar billede nielle Nybegynder
25. oktober 2005 - 08:12 #12
Ja, jeg kan sagtens godt hjælpe dig med at lave de ordentligt. :^)

Men lige først tilbage til dit oprindelige problem. Løsningen er netop den der er angivet i 23/10-2005 02:36:32. For at implementere den i din nuværende kode, så skal vi imidlertid se hvordan du laver din SQL-sætning. Forløbigt har du kun vist at du gemmer den i din session, men et eller andet sted må den jo komme fra til at starte med. Og det er der at rettelsen skal laves.
Avatar billede mskjoldp Novice
25. oktober 2005 - 10:57 #13
OK. yes, jeg må finde de rigtige koder frem som der skal arbejdes med. Jeg vender tilbage med SQL sætninger...
Avatar billede mskjoldp Novice
25. oktober 2005 - 23:31 #14
Her er to af 8 SQL sætninger:

If statusQ <> "" Then
strSQL = "select * from bem right join fly_status on bem.Bstel = fly_status.MOC_stelnr WHERE MOC_enhed = '" & esk & "' and MOC_sortering = '" & statusQ & "' order by " & sOrderBy & " " & sSort
else
strSQL = "select * from bem right join fly_status on bem.Bstel = fly_status.MOC_stelnr WHERE MOC_enhed = '" & esk & "' order by " & sOrderBy & " " & sSort
end if
Avatar billede pidgeot Nybegynder
26. oktober 2005 - 07:43 #15
Umiddelbart ser det ud som om det er variablernes indhold den er gal med. Prøv enten at vise os et eksempel på hvad dine variable indeholder på det pågældende tidsounkt, eller får dit script til midlertidigt at udskrive den færdige SQL.

Mit umiddelbare gæt lyder at det ligger et sted i

order by " & sOrderBy & " " & sSort

men jeg kan selvfølgelig tage fejl.
Avatar billede mskjoldp Novice
26. oktober 2005 - 20:31 #16
Bruger link der trykkes på:
default.asp?mode=visstatus&amp;esk=MA C&amp;statusQ=1&amp;OrderBy=MOC_stelnr&amp;sort=ASC

placeres i følgende SQL:
strSQL = "select * from bem right join fly_status on bem.Bstel = fly_status.MOC_stelnr WHERE MOC_enhed = '" & esk & "' and MOC_sortering = '" & statusQ & "' order by " & sOrderBy & " " & sSort

giver udskrevet:
select * from bem right join fly_status on bem.Bstel = fly_status.MOC_stelnr WHERE MOC_enhed = 'MA C' and MOC_sortering = '1' order by MOC_stelnr ASC

brugerens site placering herefter, vil medføre en sortering at outputtet. Derfor har jeg oprettet nogen <a href ... > til dette:
<a href="default.asp?mode=visstatus&esk=<%=Request.QueryString("esk")%>&skp=<%=Request.QueryString("skp")%>&aal=<%=Request.QueryString("aal")%>&statusQ=<%=Request.QueryString("statusQ")%>&orderby=<%=IndholdAll(arrCustom(i))%>,<%=sOrderBy%>&sort=<%=IsSort(IndholdAll(arrCustom(i)))%>&refreshSQL=<%=session("refreshSQL")%>">

som så ikke indeholder kvalitativ sikkerhed, men med en forsøgt sortering af flere kolonner (... orderby=<%=IndholdAll(arrCustom(i))%>,<%=sOrderBy%> ...) der dog ikke har en funktionel ASC / DESC dortering af de enkelte valgt kolonner.

Er ovenstående brugbart og sigende?
/skjold
Avatar billede mskjoldp Novice
05. november 2005 - 20:54 #17
lukker uden svar...
Avatar billede nielle Nybegynder
06. november 2005 - 18:31 #18
Du har delt din order of sort by op i to variable:

&orderby=<% =IndholdAll(arrCustom(i)) %>,<% =sOrderBy %>&sort=<% =IsSort(IndholdAll(arrCustom(i))) %>

- som iver sat tiol din SQL:

... order by " & sOrderBy & " " & sSort ...

- ville give dig noget i steil med:

... order by Felt1, Felt2, Felt3 ASC, ASC, DESC ...

Det skal de ikke; hvert led i sorteringen skal have sin egen ASC/DESC

... order by Felt1 ASC, Felt2 ASC, Felt3 DESC ...
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