11. november 2002 - 11:08Der er
14 kommentarer og 1 løsning
Checkbox - opdater flere records med et submit
Efter at ha' læst de fleste tidligere indlæg omkring checkboxes tillader jeg mig nu alligevel at spørge ekspertpanelet til råds.
Jeg har på listeform et SQL udtræk fra en database, hvor en af kolonnerne er checkboxes. Det er lykkedes mig at få dem korrekt hvist ved hjælp af følgende if sætning som afhængig af Access DBs indhold sætter inputboxen tl checked eller "":
If rs.fields("OK")=true then
response.write("<td width=50 align=center><INPUT TYPE=checkbox NAME=OK checked></td>") Else response.write("<td width=50 align=center><INPUT TYPE=checkbox NAME=OK></td>") value=off>") end if
Så lang så godt.
Når jeg nu har rettet i flere af kolonnernes værdier og der i blandt fjernet eller checked nogle flueben i checkbox kolonnen, ønsker jeg med een submit knap at opdatere DB. Dette gøres med "GET" og jeg ser at jeg overfører fint record efter record i adresselinien øverst (typisk 5-10 records). I den anden ende på "opdater.asp" siden har jeg en counter der læser værdierne af kolonerne en efter en og kalder en "sub" hvor der opdateres i DB. Det kører bare, MEN kun hvis checkboxene alle er "true" eller "on" om man vil.
Ved submit kan jeg se at hvis checkboxen er off("") ja så sendes der intet input fra checboxen. Derved går der ged i arrayen på "opdater.asp". Hvis der er 10 records og en af dem er "ikke-checked", ja så vil der kun være 9 værdier.
koden for min opdater.asp ser således ud:
dim sTaller2, sKvalifikation, iCounter, iKrav, iTrin, sOK, lAjourdato if Request.QueryString.Count > 0 then for iCounter = 1 to Request.Item("tæller2").count sTaller2 = Request.Item("tæller2")(iCounter) sKvalifikation = Request("kvalifikation")(iCounter) iKrav = Request("krav")(iCounter) iTrin = Request("trin")(iCounter) sOK = Request("ok")(iCounter) response.write icounter lAjourdato = Request("ajourføringsdato")(iCounter) Call PerformUpdate(sTaller2, sKvalifikation, ikrav, iTrin, sOK, lAjourdato) next end if
--------------- Håber I kan hjælpe en nødstedt...:)
AI bliver først for alvor en del af arbejdet, når teknologien integreres i den måde, vi arbejder på. At have adgang til AI betyder ikke nødvendigvis, at medarbejderne er klar til at bruge den.
Nej så let tror jeg ikke det går. Har prøvet, og gjort det igen. Problemet er at (formoder jeg) at link strengen ikke indeholder noget som helst. ALtså
ex. på del af streng hvor det går godt(checkbox = checked, OK er min variabel) &trin=4&OK=on&dato=45645 osv....
sådan ser stumpen ud ved "no": &trin=4&dato=45645 osv.... kort sagt OK findes ikke
dim sTaller2, sKvalifikation, iCounter, iKrav, iTrin, sOK, lAjourdato if Request.QueryString.Count > 0 then for iCounter = 1 to Request.Item("tæller2").count sTaller2 = Request.Item("tæller2")(iCounter) sKvalifikation = Request.querystring("kvalifikation")(iCounter) iKrav = Request.querystring("krav")(iCounter) iTrin = Request.querystring("trin")(iCounter) sOK = Request.querystring("ok")(iCounter) IF sOK = "" THEN sOK = "OFF" END IF response.write icounter lAjourdato = Request.querystring("ajourføringsdato")(iCounter) Call PerformUpdate(sTaller2, sKvalifikation, ikrav, iTrin, sOK, lAjourdato) next end if
Jeps. som jg ser det skal sOK indeholde 10 værdier hvis tæller2 og andre variabler gør det. Med kun 9 opstår array fejlen Jeg har også prøvet lidt med at sende en værdi afsted fra afsend.asp filen uden held (endnu)
Hmm det der er galt er min afsender. Hvis jeg kigger på den igen er det klart at det går galt, men ikke helt klart hvordan jeg løser det. For at få checkboxene vist rigtigt har jeg lavet følgende if sætning:
If rs.fields("OK")=true then response.write("<td width=50 align=center><INPUT TYPE=checkbox checked></td>") Else response.write("<td width=50 align=center><INPUT TYPE=checkbox ></td>") response.write("<input type=hidden name=OK value=off>") end if
ved opdataring er ppoblemet bare at hvis DB står til "on" i forvejen ja så vil sætningen altid være sand uanset om jeg fjerner fluebenet eller ej, men den submittede værdi af variablen "OK" eksisterer ikke hvis jeg hjar fjernet fluebenet (se tidligere bid af adresselinien). Hvis DB i forvejen var "no" vil sætningen være false og den sidste response.write vil afsende OK=off.
Du kunne lave en submit Funktion, der tildeler en Input type=hidden den value den nu skal have inden der submittes.. kan ikke lige huske if then fra javascripåt men noget lign det her
<script language="javascript"> function setAction() {
if (document.Submit_Form.checkboxnavn.checked == false ) {
Jeg kender ikke meget til Java, men har lige fået lidt støtte fra en der ved noget om det. Tak for ideen. Full score til Loss ....
for en ordens skyld er her scriptet der checker checkboxen på klienten inde siden sendes til serveren. Drved har vi styr på alle værdier i arrayen
<script language="javascript"> function DoSubmit() { var checkBoxes = document.getElementsByName("check"); var hiddenChecks = document.getElementsByName("hiddencheck"); var i = 0; while (checkBoxes(i) != null){ hiddenChecks(i).value = checkBoxes(i).checked; i++; } } </script>
super du fik det til at virke...... så er du jo nok glad resten af dagen (medmindre en nyt prob kommer :) )..
// LOSS
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.