znyderMedlem sedan dec. 2002172 inlägg Hej... nu har jag suttit här i 2 timmar och försökt fixa en grej...
Jag har en spelsida där man kan välja GENRES på spelen.
Jag har 14 checkboxes med olika genres (siffror i value)
och ett spel som har X antal genres redan.
Så här kan det se ut:
SPEL_ID | GENRE
142 | 45
142 | 34
Och om jag nu väljer i checkboxarna såhär:
ha kvar 45
lägga till 26
ta bort 34
Att lägga till och behålla genres är inga problem, men att jämföra med databasen att den som ska tas bort är ett annat problem..
För om ngn nu bara klicka på ÄNDRA NU! knappen så skickas den till adminsidan utan några egentliga ändringar... lite jobbigt.
Den kod jag använder är denna:
For i = 1 to 14
IDnummer = "genre_" & i
IF CBool(Request.Form(IDnummer)) THEN
'response.write Request.Form(IDnummer) & "<BR>"
min_SQL = min_SQL & " AND (NOT genre=" & Request.Form(IDnummer) & ")"
END IF
Next
SET RStemp = MinCon.Execute("SELECT * FROM genre_spel WHERE spel_ID=" & Request.QueryString("ID") & "" & min_SQL & "")
Do While NOT RStemp.EOF
andring = andring + 1
MinCon.Execute("INSERT INTO [genre_spel] ([spel_ID], [genre], [godkand], [datum]) "&_
"Values(" & Request.QueryString("ID") & ", " & RStemp("genre") & ", 'rem', '" & now & "')")
RStemp.MoveNext
Loop
For i = 1 to 14
IDnummer = "genre_" & i
IF CBool(Request.Form(IDnummer)) THEN
SET RStemp = MinCon.Execute("SELECT * FROM genre_spel WHERE spel_ID=" & Request.QueryString("ID") & " AND genre=" & Request.Form(IDnummer) & "")
IF RStemp.EOF THEN
andring = andring + 1
MinCon.Execute("INSERT INTO [genre_spel] ([spel_ID], [genre], [godkand], [datum]) "&_
"Values(" & Request.QueryString("ID") & ", " & Request.Form(IDnummer) & ", 'nej', '" & now & "')")
END IF
END IF
Next
Jag behöver verkligen hjälp...
GuffaMedlem sedan juni 2004533 inlägg Genre i plural blir genrer. Blev lite fundersam på vad "genres" var för något...
Ifall du sätter samma namn på checkboxarna så kan du få en kommaseparerad lista med id:n med hjälp av metoden IStringList.Values:
genre = Request.Form("checkboxarna")
Den kan du sedan använda för att lägga till och ta bort genrer:
"delete from genre_spel where spel_ID=" & id & " and genre not in (" & genre & ")"
"insert into genre_spel (spel_ID,genre) select " & id & ",genre from genrer where genre in (" & genre & ") and genre not in (select genre from genre_spel where spel_ID=" & id & ")"
J.N.Medlem sedan apr. 20031 660 inlägg HEJ!
guffa har i princip rätt för att lösa problemet, men jag hade inte löst det så.
När du redigerar ett spel antar jag att du markerat de som ska vara med enligt databasen?
Annars blir det jobbigt att redigera.
Eftersom alla chkboxar har samma namn, kommer de i en kommaseparerad lista.
När du postar formuläret, börjar du med att rader alla genre för just detta spel_id!
Därefter stoppar du in de du precis markerat:
g_arr= split(genre_id,",")
For i=0 To Ubound(arr)
Databas.Execute("INSERT INTO tbl (spel_id, genre) VALUES (" & spel_id & ", " & g_arr(i) & ")")
Next
Tricket är att inte bry sig om om checkboxen ska läggas till, ändras eller tas bort!
Ta bort alla, lägg till de nya alltså.
GuffaMedlem sedan juni 2004533 inlägg Johnnys metod fungerar också, men den gör en hel del jobb i onödan.
Att slå ihop listan till en kommaseparerad sträng och sedan dela upp den igen till en array är ju som att gå över ån efter vatten. Det är ju bara att loopa igenom listan:
For each strValue in Request.Form("checkboxarna")
Databas.Execute "INSERT INTO tbl (spel_id, genre) VALUES (" & spel_id & ", " & CLng(strValue) & ")",,128
Next
Men två databasfrågor är ju fortfarande snabbare än femton...
J.N.Medlem sedan apr. 20031 660 inlägg HEJ!
Den andra raden (INSERT) är inte alldeles enkel att förstå, tänkte jag, och ville visa en enklare kod (för ögat).
Att det är onödigt att dela upp genre_id har du rätt i, det är enklare med din kod.