Avatar billede wildthing Nybegynder
11. november 2002 - 11:08 Der 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...:)
Avatar billede loss Nybegynder
11. november 2002 - 11:34 #1
som du selv så rigtig skriver, bliver der ved "not checked" ikke sendt nogle værdier med.. og dermed kan du ikke tildele dette til en Var..

Du skal hertil bruge endnu en if then sætning....

Når du i dit loop tildeler Querystringsne til Variablerne skal du lave følegnde IF THEN sætning

IF VAR = "" THEN
VAR = "OFF"
END IF
Avatar billede wildthing Nybegynder
11. november 2002 - 11:43 #2
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

fejlbeskeden er: An array index is out of range.
Avatar billede loss Nybegynder
11. november 2002 - 11:47 #3
Nej nemlig... det burde da ellers virke.... med det andet der, jeg bruger det hele tiden, godt nok ikke lige i løkker..

Ikke fordig det burde betyde noget, men har du prøvet med POST istedet for GET.. Man ved sq aldrig..
Avatar billede loss Nybegynder
11. november 2002 - 11:50 #4
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

Det er sådan du har prøvet ik ?
Avatar billede wildthing Nybegynder
11. november 2002 - 11:56 #5
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)
Avatar billede wildthing Nybegynder
11. november 2002 - 13:29 #6
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.

altså. problemet er at submitte en ændring.

Ved ikke om det hjalp nogen nogetsomhelst
Avatar billede loss Nybegynder
11. november 2002 - 14:22 #7
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 )
{
 
    document.Submit_Form.hiddennavn.value = "Off"
} 
  Else
  {
  document.Submit_Form.hiddennavn.value = "On"
  }
   
    document.formnavn.submit();
}
</script>
Avatar billede wildthing Nybegynder
11. november 2002 - 14:31 #8
God ide, vil tro det kunne bruges. arbejder lige lidt på det.:)
Avatar billede loss Nybegynder
11. november 2002 - 14:54 #9
Så skal du i din form lave en

<form name="" action="" method="" onsubmit="setAction()">
Avatar billede loss Nybegynder
11. november 2002 - 15:00 #10
eller en button med en onclick="setAtion()"
Avatar billede wildthing Nybegynder
11. november 2002 - 15:03 #11
Jep ... Den har jeg ... Krøllen ligger i at der er flere felter med samme
navn ... Dit eksempel checker et felt...

Så jeg grubler lige lidt mere ;-)
Avatar billede loss Nybegynder
11. november 2002 - 15:10 #12
havde du ikke en tæller ?..
så kan du jo bare lave et loop inde i funktionen
Avatar billede loss Nybegynder
11. november 2002 - 15:19 #13
og lave et loop der opretter Hidden input felte
Avatar billede wildthing Nybegynder
11. november 2002 - 15:55 #14
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>
Avatar billede loss Nybegynder
11. november 2002 - 16:26 #15
super du fik det til at virke...... så er du jo nok glad resten af dagen (medmindre en nyt prob kommer :) )..

// LOSS
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester