Just nu i M3-nätverket
Jump to content

Checkbox!


Dahlgren

Recommended Posts

Hej!

 

Jag håller på med en sida där det ska finnas en funktion för att skicka meddelanden. Då har jag fått ett problem med checkboxar när meddelandena ska tas bort.

 

Jag har en loop som ger alla checkboxar olika namn. Problemet kommer ju när jag ska köra ASP-scriptet. Hur ska jag veta hur många checkboxar användaren kryssade i? Hade det varit ett bestämt antal checkboxar med bestämda namn hade det inte varit några problem. Finns någon enkel lösning va?

 

Med Vänliga Hälsningar:

Micke

Link to comment
Share on other sites

Magnus Gladh

Så hade jag löst det.

 

1. Gett all checkboxar samma namn, typ ID

2. Satt value på varje textbox till respektive posts ID nummer som du får från databasen.

3. När man sedan krysar för 3 meddelande så kommer dessa 3 meddelandes ID-nummer läggas i en komma-pearerad sträng, typ "3,6,10"

 

4. PÅ nästa sida som tar emot värdena har du en SQL sträng som ser ut så här.

sSQL = "DELETE FROM [meddelande] WHERE [iD] IN ("& request.form("ID") & ")

 

Vilket kommer att ta bort meddelande 3,6 och 10 från databasen.

 

- M

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

Förutom att du naturligtvis hade kollat så att du fick rätt indata så att ingen lyckas förstöra en massa för dig.

 

Ciao,

Anders

 

Link to comment
Share on other sites

 

Det lättaste är att man sparar html-sidan till sin egen dator, ändrar i filen, och "kör den".

 

Det enklaste sättet att förhindra problem i detta fall (om ID skall vara ett tal) är att använda CInt:

 

sSQL = "DELETE FROM [meddelande] WHERE
[iD] IN ("& [b]CInt([/b]request.form("ID")[b])[/b] & ")

 

Om man då försöker skicka in data som inte är ett tal med avsikt att "förstöra" databasen eller liknande så kommer det visas ett felmeddelande.

 

Ciao,

Anders

 

[inlägget ändrat 2002-08-30 08:58:27 av Anders N]

Link to comment
Share on other sites

Magnus Gladh

Tyvärr kan du inte göra så eftersom det är en sträng som skrivs in och inte ett tal.

 

Det du däremot skall kolla efter är ' som kan förstöra mycket för dig, men det gäller all data som skrivs mot en databas så MÅSTE du kolla att inga ' slinker med, eftersom det kan sabba ordentligt för dig.

 

Nu kommer jag inte ihåg, men det fanns en länk som beskrev problemet hur man hackade in sig på en site med hjälp av ' i SQL satser, kanske någon annan vet url:en till sida, klart läsvärt...

 

- M

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Link to comment
Share on other sites

Så jag måste alltid förhindra att ' kommer med? Men jag kan väl ändra ' till /\ eller nåt när ett sånt tecken skrivs in i databasen och sedan ändra tillbaka när jag hämtar det ur databasen.

 

Det skulle varaintressant att veta hur det går till när någon sabbar med ' för jag har ingen aning hur det skulle kunna gå till nämligen.

 

mvh

 

Link to comment
Share on other sites

 

Kanske bra om man läser all text i inläggen :)

 

Själklart är det en sträng.

 

Om det är en sträng man tar emot så måste man verifiera att strängen inte innehåller '. (Använd Replace för att byta ut alla apostrofer mot två stycken apostrofer)

 

Om man tar emot ett tal och skickar det direkt in i databasen så måste man verifiera att "talet" inte innehåller mellanslag eller liknande.

 

Det bästa tror jag är att göra funktioner som GetQueryString eller GetQueryNumber som innehåller felkoll, och bara använda dem hela tiden, aldrig "Request.Form" eller "Request.QueryString" direkt. Annars kan det hända att man glömmer att verifiera att man fått rätt indata.

 

Ciao,

Anders

 

Link to comment
Share on other sites

 

Jag har gett exempel på det tidigare här på eforum...

 

Här kommer ett snabbt exempel till:

 

Ett enkelt exempel, som på ett "dåligt" sätt kollar ifall en användare lyckas logga in.

 

SQLExecute("SELECT * FROM USERS WHERE USER='" & request.form("user") & "' AND PASS='" & request.form("user") & "'")
if not rs.eof then session("user")=rs("user")

 

Detta fungerar väl i.. "vanliga" fall.. Dock, om användaren matar in en apostrof (') i användarnamnet eller lösenordet, så kommer ju SQL-satsen att "förstöras".

 

Om användaren matar in "test'apa" som användarnamn, och "gorilla" som lösenord kommer SQL-satsen att bli så här:

 

SELECT * FROM USERS WHERE USER='test'apa' AND PASS='gorilla'

 

Där jämför den "user" mer "test" sedan är strängen slut, och den kommer generera ett fel eftersom den inte förstår varför det står "apa'" i SQL-satsen.

 

Med hjälp av detta kan man mata in användarnamn och lösenord som innehåller SQL-kod, vilket kan användas för att i detta exempel förmodligen logga in som vilken användare som helst utan att veta lösenordet.

 

Man kan även ändra/tabort värden ur tabeller och tabeller i sig.

 

Never trust input.

Kolla ALLTID allting som kommer från QueryString eller Form som skall in i databas eller på annat sätt "behandlas".

 

Don't check if it's invalid. Check if it's valid

Om användarnamnet "förväntas" vara 1-10 tecken A-Z, så kolla inte efter apostrofer i det, utan verifiera att det är 1-10 tecken A-Z (med regular expressions till exempel).

 

Ciao,

Anders

 

Link to comment
Share on other sites

... att göra funktioner ...

 

:)

 

exempel:

 

function GetQueryNumber(name)

GetQueryNumber=0

on error resume next

GetQueryNumber=CInt(request.QueryString(name)

end function

 

Om du ska hämta ett tal från QueryString, så kan du här använda "GetQueryNumber" istället. Om det inte är ett tal, så får man värdet "0" istället.

 

nr = request.QueryString("babian")

blir

nr = GetQueryNumber("babian")

 

Ciao,

Anders

 

Link to comment
Share on other sites

Jag förstår inte riktigt varför jag ska använda det men jag har en bok om ASP här det är bara att det inte står GetQueryNumber eller nåt i innehållsförteckningen så jag hittar inte. Kanske kan man leta på något annat istället?

 

Link to comment
Share on other sites

 

Hmm.. "göra" skulle vara i fetstil. De funktionerna finns inte, men, jag rekommenderar att man gör dem, för att minska risken att man glömmer att kolla indata.

 

Ciao,

Anders

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...