Jag har en sida där jag har ett antal rader med kryssrutor som var och en symboliserar om en stuga är bokad en viss vecka. Varje rad av kryssrutor är "kopplad" till respektive rads/stugas ID-nummer.
Sidans syfte är att man ska kunna uppdatera dessa kryssrutor genom att föra in kryssrutevärdena rad efter rad till databasen. Jag skickar alltså vidare värdena i formuläret till en dataupptagarsida. Det är här problemet uppkommer.
Hur gör jag för att rad efter rad:s kryssrutor ska läggas in i databasen vid respektive ID-nummer? Koden jag skrivit nu (på upptagarsidan) funkar inte, men jag lägger in den ändå så att ni kan se den nuvarande koden. Är medveten om att den/jag kan vara helt åt h-e, men jag är inget ASP-geni precis. Jag får inget felmeddelande utan hamnar på upptagarsidan, men fälten i DBn uppdateras inte.
Problemet med den nuvarande koden är väl att den bara lägger in den första radens (ID-numrets) kryssrutor? Hur gör jag alltså så att varje rads kryssrutevärden ska föras in i DBn? Lite svårt att förklara, men jag hoppas ni greppar ungefär hur jag menar.
Tack för svaret, men informationen vill fortfarande inte läggas in i DBn. Kryssrutornas kod (på formulärsidan) ser ut så här:
<input type="checkbox" name="v35" value="1" <% If RS("v35") = true Then %> CHECKED <% End If %>>
Jag har inget problem att här infoga kryssrutornas värde från DBn till formulärets kryssrutor via ovanstående kod. Men vid uppdatering av forumläret hamnar jag alltså fortfarande på dataupptagningssidan utan att uppdaterade fält läggs in i DBn. Så här ser den relevanta koden på upptagarsidan ut nu:
Jo, det ser jag nu, men hur går jag tillväga för att infoga respektive stugas (stugID:s) bokningar (kryssrutor) i DBn? Såvitt jag kan se så skickas även stugID:t vidare från formuläret. Här är ASP-koden från formulärsidan som fångar upp stugor från ett visst område och presenterar dem och dess bokningar så att användaren kan klicka in nya bokningar och ta bort gamla:
<%
kategori = request.form("kategori")
Set Connection = Server.CreateObject("ADODB.Connection")
cnpath="DBQ=" & server.mappath("\mapp\databas.mdb")
connection.open "DRIVER={Microsoft Access Driver (*.mdb)}; " & cnpath
SQL = "SELECT * FROM tblStuginfo_1 WHERE Kategori = '" & kategori & "'"
set RS = Connection.Execute(SQL)
%>
<form method="POST" action="bokning.asp">
...
<%
' --- Efter fem rader läggs rubrikerna (veckonumerna) in så att det blir lättare att läsa när det är många poster
WHILE NOT RS.EOF
FOR i = 1 to 5
' --- Byter färg på bakgrunden i varannan tabellrad
counter = counter + 1
If counter Mod 2 = 0 then
color = "FFFFFF"
Else
color = "#F1F1F1"
End If
%>
' --- Stug-ID läggs längst till vänster i tabellen
<%= RS("StugID") %>
' --- Så här ser varje cell med kryssruta ut:
<td width="38" align="center" valign="middle" height="25" bgcolor="<% =color %>">
<input type="checkbox" name="v23" value="1" <% If RS("v23") = true Then %> CHECKED <% End If %>
<%
RS.MoveNext
IF RS.EOF THEN EXIT FOR
NEXT
%>
...
<%
WEND
%>
...
<input type="submit" value="Uppdatera bokning" name="B1">
...
<%
RS.close
SET RS = NOTHING
connection.close
%>
Det är ju eventuellt många stugor vars veckor ska uppdateras utefter vad användaren klickat i för kryssrutor på föregående sida. Kan felet ha något med DET att göra eller är det nåt annat i SQL-satsen som spökar?
Ok, det borde jag ju ha tänkt på. Nu kommer jag iaf vidare och enligt min utskrivning av SQL-satsen så ska de värden jag kryssar för i kryssrutorna uppdateras, men tyvärr läggs inga värden till i DBn.
Kan det ha med koden för kryssrutevärdet i formuläret?
<input type="checkbox" name="v23" value="1" <% If RS("v23") = true Then %> CHECKED <% End If %>
Jag skickar ju vidare värdet 1 om kryssrutan i formuläret är ikryssad och i DBn har jag valt Ja/Nej (kryssruta) som datatyp. Men greppar egentligen Access att värdet 1 innebär att kryssrutan i DBn ska kryssas i?
Funktionsmässigt gör det ingen större skillnad. Men strukturen på koden gör det lättare att kommentera och därmed lättare att felsöka, bygga om och förså koden vid ett senare tillfälle.
Ok, jag förstår. Du har alltså flera stugor som du vill uppdatera samtidigt. (Jag tänkte att det var så att du jobbade med en stuga i taget.)
Det som händer är att du lägger ut flera fält i ditt formulär som har samma namn och då kommer de värden som finns i de fälten att slås samman till en komma-separerad lista.
Det man får göra är att se till att de olika fälten får olika namn, tex så att man har ett löpnummer (du kan använda counter till exempel)
<input type='HIDDEN' name='stugID<%= counter%>' value='<%=rs("stugID")%>'>
<td width="38" align="center" valign="middle" height="25" bgcolor="<% =color %>">
<input type="checkbox" name="v23_<%= counter%>" value="1" <% If RS("v23") = true Then %> CHECKED <% End If %> >
sen så får du lägga till ett hidden fält som anger hur många stugor som du har
Det fungerade tyvärr inte. Update-koden hinner inte ens köras. Får felmeddelandet:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: '[string: "1, 2, 3, 4, 5, 5"]'
/webtester/bokning.asp, line 10
Rad 10 är:
FOR i = 0 to Request.Form("counter")
Är dock osäker på ett par saker i ditt föregående inlägg.
1. Jag placerar koden som anger hur många stugor jag har (<input type='HIDDEN' name='stugID' value='<%=rs("stugID")%>'> ) i slutet av loopen. Detta är väl korrekt?
2. Funderar på om du skrivit fel i slutet av din kod eller om det är JAG som gjort fel i min tidigare kod? Du skrev:
sql = SQL = "UPDATE tblStuginfo_1....
och
connect.execute sql,,128
528 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a