Just nu i M3-nätverket
Gå till innehåll

Checkbox!


Dahlgren

Rekommendera Poster

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

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

 

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]

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

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

 

Länk till kommentar
Dela på andra webbplatser

 

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

 

Länk till kommentar
Dela på andra webbplatser

 

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

 

Länk till kommentar
Dela på andra webbplatser

... 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

 

Länk till kommentar
Dela på andra webbplatser

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?

 

Länk till kommentar
Dela på andra webbplatser

 

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

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...