webForumDet fria alternativet

Querystring

12 svar · 297 visningar · startad av Riffles

RifflesMedlem sedan juni 2000836 inlägg
#1

Så här plockar jag ut värdena från min tabell:

Visa = Request.Querystring("visa")
SQL = "SELECT * FROM spelschema WHERE sort ='" & Visa & "'ORDER BY datum DESC"

Länkarna är dessa:

<a href="spelschema.asp?visa=s&visa=t" target="main">Alla matcher</a><br>
<a href="spelschema.asp?visa=t" target="main">Träning</a><br>
<a href="spelschema.asp?visa=s" target="main">Serien</a><br>

Det blir fel på den översta länken när jag vill visa alla matcher.
Alltså, hur skriver jag när jag har två variabler i en länk?

PalleMedlem sedan apr. 20002 716 inlägg
#2

En variant:

[red]<a href="spelschema.asp?visa=s&[b]visa2[/b]=t" target="main">Alla matcher</a><br>
<a href="spelschema.asp?visa=t" target="main">Träning</a><br>
<a href="spelschema.asp?visa=s" target="main">Serien</a><br>

...

Visa = trim(Request.Querystring("visa"))
[b]Visa2 = trim(Request.Querystring("visa2"))[/b]

SQL = "SELECT * FROM spelschema WHERE sort = '"& Visa &"' "
If Len(Visa2) > 0 Then SQL = SQL &" AND sort = '"& Visa2 &"' "
SQL = SQL & "ORDER BY datum DESC"[/red]

Vill du promt använda samma querystring så kan du använda denna variant a´la ful-lösning:

[red]<a href="spelschema.asp?visa=s&visa=t" target="main">Alla matcher</a><br>
<a href="spelschema.asp?visa=t" target="main">Träning</a><br>
<a href="spelschema.asp?visa=s" target="main">Serien</a><br>

...

Visa = trim(Request.Querystring("visa"))
If InStr(Visa, ",") Then
	Visa = Replace(Visa, ",", "' AND sort = '")
End If

SQL = "SELECT * FROM spelschema WHERE sort ='" & Visa & "'ORDER BY datum DESC"[/red]
RifflesMedlem sedan juni 2000836 inlägg
#3

När jag provar nån av alternativen så fungerar det inte alls.
Den tar inte nån variabel alls.
Sidan blir bara tom och det kommer inte upp något felmeddelande heller.

Bör man trimma allt när man skickar en Querystring?
Det är iofs bättre att göra det än att inte göra det! :) Allt för att minska tänkbara fel som kan uppstå.

PalleMedlem sedan apr. 20002 716 inlägg
#4

Ser nu att jag hade kvar url´en till min testsida.. har ändrat det nu.
Kolla så du verkligen hamnar på rätt sida.. :)

RifflesMedlem sedan juni 2000836 inlägg
#5

Hehe, så lätt var det inte, tyvärr...

PalleMedlem sedan apr. 20002 716 inlägg
#6

Men det fungerade väl innan?

Sidan blir bara tom och det kommer inte upp något felmeddelande heller.

Är du på rätt sida?
Har du stäng av Visa egna http-felmeddelande i din webbläsare?

RifflesMedlem sedan juni 2000836 inlägg
#7

Det fungerade inte alls med nåt av dina exempel på den länken jag hade problem med.
Ja, det är rätt sida.
Ja, det är avstängt, andra felmeddelande kommer upp som det ska :(
Dock inte i detta exempel.

RifflesMedlem sedan juni 2000836 inlägg
#8

Om jag testar första lösningen så blir det så här:

<%= visa %> = s' AND sort = ' t

Förmodligen fel i Replace-funktionen?

If InStr(Visa, ",") Then
	Visa = Replace(Visa, ",", "' AND sort = '")
End If

Kan inget om Replace så där får man plugga lite o kolla på det senare.

PalleMedlem sedan apr. 20002 716 inlägg
#9

Japp, då stämmer det. :)
Det enda som man kanske ska ändra på är även replace´a mellanslaget, ex.

[red]If InStr(Visa, ",") Then
	Visa = Replace(Visa, [blue]", "[/blue], "' AND sort = '")
End If[/red]

Skriv sedan ut sql-satsen och kolla den istället för bara variablen.
De tester som jag har genomför har fungerat galant.

RifflesMedlem sedan juni 2000836 inlägg
#10

Hm, det borde fungera
Så här ser det ut nu när jag skriver ut SQL:n.

SELECT * FROM spelschema WHERE sort ='s' AND sort = 't' ORDER BY datum DESC
fredrikMedlem sedan dec. 19991 082 inlägg
#11

Jag ser även att du inte skyddar dig mot sk "SQL-injection" när du tar emot dina parametrar. Det innebär alltså skydd för att användare inte ska kunna förändra sorterings-parametern för att hämta data från andra tabeller tex.

För att skydda sig mot det måste du i detta fallet byta ut '-tecknet eller ännu hellre använda en parameteriserad fråga.

Du kan läsa mer om SQL-injection i nedanstående artikel:
http://www.swesecure.com/?ID=dc6ea60a-12ae-4e7e-9e9c-59489ccafa90&IID=29a58b01-ca79-4877-b924-4f5da18d4a2a

andreas_lindhMedlem sedan jan. 20011 091 inlägg
#12

Det borde väl vara så här

SELECT * FROM spelschema WHERE sort ='s' OR sort = 't' ORDER BY datum DESC

Sort kan väl inte ha två olika värden i samma post

RifflesMedlem sedan juni 2000836 inlägg
#13

Tack Palle och Andreas! Nu fungerar det!

Nu ska jag bara ta mig an SQL-injection.

Genererad på 366 ms · cache AV · v20260730165559-full.f96bc7eb