Avatar billede chrisrj Forsker
30. august 2002 - 23:27 Der er 17 kommentarer og
1 løsning

Kompliceret problem med insert, update og form

Mit problem er dels at jeg ved ikke navnet på input felterne på formen, dels at jeg heller ikke ved om er en opdatering eller en ny post.

eksempel:

bruger 1 har tidligere oprettet en service og vil nu rette den samt tilføje en ny.

Formen er ikke noget problem, den virker fint.

Men, hvordan skal jeg lave update/insert delen?

her er lidt kode:

Formen
-----------

<%
tal = 1
do while not opslag.eof 'and tal < 4
%>
<tr bgcolor="#8b1a1a">
  <td width=150><font face="arial,helvetica" size="3"><%=tal%>. Service</font></td>
  <td width=350><input type="text" name="service<%=tal%>" size=70 value="<%=OPSLAG("service")%>"></td>
</tr>
<tr bgcolor="#8b1a1a">
  <td width=150><font face="arial,helvetica" size="2">Nuværende status:</font></td>
    <%if OPSLAG("konto") = "" then%>
      <td width=350><font face="arial,helvetica" size="2">Du har endnu ikke taget stilling til om denne service udføres med eller uden konto</font></td>
    <%else%>
      <td width=350><font face="arial,helvetica" size="2"><%=OPSLAG("konto")%></font></td>
    <%end if%>
</tr>
<tr bgcolor="#8b1a1a">
  <td width=150><font face="arial,helvetica" size="2">Konto</font></td>
  <td>
    <SELECT name="konto<%=tal%>">
        <option value="">Med eller uden
        <option value="">------------------- 
        <option value="Med">Med konto
        <option value="Uden">Uden konto
        <option value="Ikke relevant">Ikke relevant
    </select>
  </td>
</tr>
<tr bgcolor="#8b1a1a">
  <td><font face="arial,helvetica" size="2">Pris på <%=tal%>. service</font></td>
  <td width=350><input type="text" name="pris-service<%=tal%>" size=10 value="<%=OPSLAG("pris-service")%>"></td>
</tr>
<INPUT type="hidden" name="serviceid" value="<%=OPSLAG("id")%>">
<%
opslag.movenext
tal = tal + 1
loop
%>

her er mit fejlslagende forsøg på insert
-----------------------------------------------

do while Request.form("service" & tal) exsist

    service = Request.form("service"& tal)
    konto = Request.form("konto"& tal)
    pris_service = Request.form("pris-service"& tal)
    SQLservice = SQLservice & "insert into services (service, konto, brugerid, [pris-service]) values('" & service & "', " & "'" & kondom & "', " & "'" & id & "', " & "'" & pris_service & "')"

loop

skriv hvis det virker uforståeligt. :-)
Avatar billede chrisrj Forsker
31. august 2002 - 09:39 #1
Jeg har siddet med det her l*** hele dagen igår uden at komme meget videre.

Er der virkelig ingen der kan hjælpe mig???
Avatar billede solle Nybegynder
31. august 2002 - 10:22 #2
Du kunne prøve med:

do while Request.form("service" & tal) exsist

    service = Request.form("service"& tal)
    konto = Request.form("konto"& tal)
    pris_service = Request.form("pris-service"& tal)
    SQLservice = "insert into services (service, konto, brugerid, [pris-service]) values('" & service & "', " & "'" & kondom & "', " & "'" & id & "', " & "'" & pris_service & "')"
    Opslag.Execute(SQLservice)
loop

Eller


do while Request.form("service" & tal) exsist

    service = Request.form("service"& tal)
    konto = Request.form("konto"& tal)
    pris_service = Request.form("pris-service"& tal)
    SQLservice = SQLservice & "insert into services (service, konto, brugerid, [pris-service]) values('" & service & "', " & "'" & kondom & "', " & "'" & id & "', " & "'" & pris_service & "');"
loop
    Opslag.Execute(SQLservice)

Jeg regner med at ´kondom´ og ´id´ allerede har fået en værdi?

//Solle
Avatar billede chrisrj Forsker
31. august 2002 - 10:27 #3
id,ja
øhhh, kondom??? - det er vist en stavefejl... :-) der skulle naturligvis stå konto.
Avatar billede solle Nybegynder
31. august 2002 - 10:28 #4
Hehehe .. lidt af en stavefejl ;)
Avatar billede chrisrj Forsker
31. august 2002 - 10:34 #5
:) ja, jeg har nok haft tankerne et andet sted...

den kommer med denne fejl, når jeg bruger dit andet forslag:

Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D)
Typer stemmer ikke overens: '[string: "oral"]'
/gudesex.dk/www/ret_services.asp, line 38


linie 38:

do while Request.form("service" & tal) exsist

hvordan kan man lave "service" variablen dynamisk, så den kan hedde service1, service2,.... ovs. ?
Avatar billede chrisrj Forsker
31. august 2002 - 10:36 #6
eller kan man gøre det på en anden måde?
Avatar billede solle Nybegynder
31. august 2002 - 11:01 #7
Du kunne jo lave et ekstra felt i formularen der hed "antal", som du placerer efter dit loop i formularen, og give værdien af variablen "tal"!!!

Derved har du antal felter for hver, og kan lave en ´for-løkke´ ..
    antal_felter = request.form("antal")
    response.write antal_felter
    for i = 1 to antal_felter
        service = Request.form("service"& i)
        konto = Request.form("konto"& i)
        pris_service = Request.form("pris-service"& i)
        SQLservice = "insert into services (service, konto, brugerid, [pris-service]) values('" & service & "', " & "'" & kondom & "', " & "'" & id & "', " & "'" & pris_service & "')"
        MyDBConn.Execute (SQLservice)
    next

//Solle
Avatar billede chrisrj Forsker
31. august 2002 - 11:33 #8
det her er RET mærkeligt!!

Når jeg opdatere formen, bliver indtallet af services mindre og mindre!?!?!?

Og, hvis ikke er mærkeligt nok, laver den også en response.redirect som er udkommenteret!!!
Avatar billede chrisrj Forsker
31. august 2002 - 11:41 #9
nå, ja, det er ikke SÅ mærkerligt alligevel... jeg havde opdateret det forkert fil..
Avatar billede chrisrj Forsker
31. august 2002 - 11:46 #10
Nu kommer denne fejl:

Der opstod en Microsoft VBScript-kørselsfejl (0x800A01A8)
Et objekt er obligatorisk: ''
/gudesex.dk/www/ret_services.asp, line 34

linie 34:

Opslag.Execute (SQLservice)

hvis udkommentere den linie og sætter en response.write ind, får jeg dette:

insert into services (service, kondom, brugerid, [pris-service]) values('oral', '', '12', '500');insert into services (service, kondom, brugerid, [pris-service]) values('testeron', '', '12', '2000');insert into services (service, kondom, brugerid, [pris-service]) values('test', '', '12', '1000');insert into services (service, kondom, brugerid, [pris-service]) values('test', '', '12', '1000');insert into services (service, kondom, brugerid, [pris-service]) values('teser', '', '12', '1500');insert into services (service, kondom, brugerid, [pris-service]) values('hfghgfhgf', '', '12', '2000');insert into services (service, kondom, brugerid, [pris-service]) values('Indtast ny service', '', '12', 'Indtast pris på ny service');insert into services (service, kondom, brugerid, [pris-service]) values('tere', '', '12', '4578');insert into services (service, kondom, brugerid, [pris-service]) values('Indtast ny service', '', '12', 'Indtast pris på ny service');
insert into services (service, kondom, brugerid, [pris-service]) values('oral', '', '12', '500');insert into services (service, kondom, brugerid, [pris-service]) values('testeron', '', '12', '2000');insert into services (service, kondom, brugerid, [pris-service]) values('test', '', '12', '1000');insert into services (service, kondom, brugerid, [pris-service]) values('test', '', '12', '1000');insert into services (service, kondom, brugerid, [pris-service]) values('teser', '', '12', '1500');insert into services (service, kondom, brugerid, [pris-service]) values('hfghgfhgf', '', '12', '2000');insert into services (service, kondom, brugerid, [pris-service]) values('Indtast ny service', '', '12', 'Indtast pris på ny service');insert into services (service, kondom, brugerid, [pris-service]) values('tere', '', '12', '4578');insert into services (service, kondom, brugerid, [pris-service]) values('Indtast ny service', '', '12', 'Indtast pris på ny service');

Jeg har prøvet uden ;, det virker heller.
Det er 18 insert linier, men der er kun 9 på formen? hvorfor fordobler den antallet?
Avatar billede chrisrj Forsker
31. august 2002 - 11:47 #11
tsk,tsk kondomer ud over det hele...

prøver lige at rette det..
Avatar billede chrisrj Forsker
31. august 2002 - 11:49 #12
hmm, det er det samme... :(
Avatar billede chrisrj Forsker
31. august 2002 - 12:06 #13
Jeg nu prøvet noget nyt, men der kommer en timeout:

SET opslag = Server.CreateObject("ADODB.Connection")
    SQLstringK = "SELECT * FROM services WHERE brugerid="&id&""
    SET opslag = Connection.Execute(SQLstringK)

if request.querystring("knap")="Opdater profil" then
tal = 1
SQLservice = ""
opdater = false
antal_felter = request.form("antal")
    response.write antal_felter & "<br>"
    for i = 1 to antal_felter
        service = Request.form("service"& i)
        konto = Request.form("konto"& i)
        pris_service = Request.form("pris-service"& i)
        servicesid = Request.form("serviceid")
        opslag.movefirst
        do while not opslag.eof
        if opslag("id") = servicesid then
            opdater = true
        else
        end if
        loop
        if opdater = false then
            SQLservice = SQLservice & "insert into services (service, konto, brugerid, [pris-service]) values('" & service & "', " & "'" & konto & "', " & "'" & id & "', " & "'" & pris_service & "');"
        else
            SQLservice = SQLservice & "update services set service='" & service & "', konto='" & konto & "', brugerid='" & id & "', [pris-service]='" & pris_service & "' where id=" & servicesid &""
        end if
        opdater = false
    next
response.write sqlservice & "<br>"
        'Opslag.Execute (SQLservice)

Kan du gennemskue om det virker eller om det "bare" tager lang tid?
Avatar billede chrisrj Forsker
31. august 2002 - 12:37 #14
Hva' Solle tænker du over det eller har du opgivet?

please, hjælp mig...
Avatar billede chrisrj Forsker
31. august 2002 - 14:31 #15
nå, der sker åbenbart ikke mere her...
Avatar billede solle Nybegynder
31. august 2002 - 14:40 #16
jo, jeg har bare ikke kigget før nu ..
send filerne så skal jeg lave det for dig!

solle@solle.dk

solle
Avatar billede chrisrj Forsker
31. august 2002 - 22:25 #17
Desværre... Jeg har klaret det på anden side, se evt. http://www.eksperten.dk/spm/252509
Avatar billede solle Nybegynder
01. september 2002 - 08:15 #18
ok, fedt
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