Avatar billede steen_hansen Forsker
15. juni 2005 - 00:21 Der er 22 kommentarer og
1 løsning

ASP og MySQL - UPDATE-problem

Jeg dimensioner en masse:

<%
Dim showemail
If Lcase(Request.Form("showemail")) = "on" Then
    showemail = "true"
Else
    showemail = "false"
End If
%>



Opdaterer databasen:

<%
SQL = "UPDATE profiles SET showlastseen=" & showlastseen & ", showstatus=" & showstatus & ", address1='" & Trim(SQLEncode(Request.Form("address1"))) & "', showaddress1=" & showaddress1 & ", address2='" & Trim(SQLEncode(Request.Form("address2"))) & "', showaddress2=" & showaddress2 & ", zip='" & Trim(SQLEncode(Request.Form("zip"))) & "', showzip=" & showzip & ", email='" & Trim(SQLEncode(Request.Form("email"))) & "', showemail=" & showemail & ", phoneathome='" & Trim(SQLEncode(Request.Form("phoneathome"))) & "', showphoneathome=" & showphoneathome & ", cellphone1='" & Trim(SQLEncode(Request.Form("cellphone1"))) & "', showcellphone1=" & showcellphone1 & ", cellphone2='" & Trim(SQLEncode(Request.Form("cellphone2"))) & "', showcellphone2=" & showcellphone2 & ", description='" & Trim(SQLEncode(Request.Form("description"))) & "', lastseen='" & Now() & "', lastIP='" & SQLEncode(Request.ServerVariables("REMOTE_ADDR")) & "' WHERE username='" & SQLEncode(Session("username")) & "'"
%>



Sådan her ser et af felterne ud:

<tr>
    <td align="left" class="td1">E-mailadresse:</td>
    <td align="left" class="td2"><input type="text" name="email" style="width: 208px;" value="<%=Server.HTMLEncode(NoNull(RS("email")))%>" class="input1"></td>
    <td align="left" class="td3">&nbsp;</td>
    <td class="td4"><input type="checkbox" id="showemail" name="showemail"<% if RS("showemail") = True Then %> checked<% End If %>></td>
</tr>



Det giver denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]Unknown column 'false' in 'field list'

/edituser.asp, line 130

(Linie 130 er den ovenstående UPDATE-sætning)



Hvor går det galt? Databasen er MySQL
Avatar billede erikjacobsen Ekspert
15. juni 2005 - 03:17 #1
Hvilken type er showemail?

Der findes ikke en boolsk type i mysql. du kan fx. lave det til et talfelt, og bruge
0 for false og 1 for true. Eller et tekstfelt og bruge 'false' og 'true' (husk '-erne)
Avatar billede lenn Nybegynder
15. juni 2005 - 07:56 #2
Kan du ikke lige sætte mogle linienumre på?
Avatar billede nielle Nybegynder
15. juni 2005 - 08:32 #3
Prøv at udskrive - bare som debug - din SQL inden at du udfører den:

<%
SQL = "UPDATE profiles SET showlastseen=" & showlastseen & ", showstatus=" & showstatus & ", address1='" & Trim(SQLEncode(Request.Form("address1"))) & "', showaddress1=" & showaddress1 & ", address2='" & Trim(SQLEncode(Request.Form("address2"))) & "', showaddress2=" & showaddress2 & ", zip='" & Trim(SQLEncode(Request.Form("zip"))) & "', showzip=" & showzip & ", email='" & Trim(SQLEncode(Request.Form("email"))) & "', showemail=" & showemail & ", phoneathome='" & Trim(SQLEncode(Request.Form("phoneathome"))) & "', showphoneathome=" & showphoneathome & ", cellphone1='" & Trim(SQLEncode(Request.Form("cellphone1"))) & "', showcellphone1=" & showcellphone1 & ", cellphone2='" & Trim(SQLEncode(Request.Form("cellphone2"))) & "', showcellphone2=" & showcellphone2 & ", description='" & Trim(SQLEncode(Request.Form("description"))) & "', lastseen='" & Now() & "', lastIP='" & SQLEncode(Request.ServerVariables("REMOTE_ADDR")) & "' WHERE username='" & SQLEncode(Session("username")) & "'"
Response.Write "DEBUG: " & SQL & "<br>"
%>

I 9 ud af 10 tilfælde skyldes den der slags fejl at SQL’en indeholder noget andet end det man forventede.
Avatar billede steen_hansen Forsker
15. juni 2005 - 20:52 #4
erikjacobsen:

1. showemail = tinyint
2. MySQL er stadig forholdsvis nyt for mig: Hvad hedder talfeltet?
3. Med tekstfelt mener du varchar(5)?
4. Kan du give et eksempel med 'true' og 'false'?


lenn: line 130 = SQL = "UPDATE profiles SET showlastseen=" & showlastseen .......



nielle: jeg kan ikke rigtigt se, at dit eksempel udskriver? Eller hva'? :)
Avatar billede steen_hansen Forsker
15. juni 2005 - 20:53 #5
nielle: Sorry, prøver det lige af :)
Avatar billede steen_hansen Forsker
15. juni 2005 - 21:01 #6
nielle:

DEBUG: UPDATE profiles SET showlastseen=false, showstatus=false, address1='Min adresse nr. XX', showaddress1=false, address2='', showaddress2=false, zip='', showzip=false, email='min@email.dk', showemail=false, phoneathome='', showphoneathome=false, cellphone1='', showcellphone1=false, cellphone2='', showcellphone2=false, description='Mere profiltekst kommer senere.', lastseen='15-06-2005 20:55:09', lastIP='min.ip.adresse.lige_nu' WHERE username='steen_hansen'

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]Unknown column 'false' in 'field list'

/edituser.asp, line 134


Det virker som om, det er dét med de boolske værdier, der skal ændres. Jeg er gået fra MS Access over til MySQL, så der er nok en del, der skal rettes til. :)

Hvis jeg lige kan få genopfrisket hvad et talfelt hedder, så kunne jeg prøve at tjekke på, om værdien er 1 eller 0. Er værdien 0, ønsker man ikke at vise de respektive data. Omvendt ønsker man at vise dem, hvis værdien er 1. Det må være sådan? :)
Avatar billede nielle Nybegynder
15. juni 2005 - 21:32 #7
Det er lige præcis det er der galt: MySQL bruger 0 og 1 i stedet for true og false (eller er det false or tue? Jeg kan aldrig huske hvilken).

Når din update indeholder ting som:

showaddress2=false

- så opfatter MySQL derfor ikke dit ”false” som en bool-værdi. I stedet tror MySQL derfor at false simpelthen er navnet på et af de andre felter i din tabel. Da den forståeligt nok ikke kan finde et sådant felt brokker den sig med:

Unknown column 'false' in 'field list'
Avatar billede steen_hansen Forsker
15. juni 2005 - 21:53 #8
Så virker det sq!

Jeg ændrede

<%
Dim showemail
If Lcase(Request.Form("showemail")) = "on" Then
    showemail = "true"
Else
    showemail = "false"
End If
%>

til

<%
Dim showemail
If Lcase(Request.Form("showemail")) = "on" Then
    showemail = "1"
Else
    showemail = "0"
End If
%>


og


<input type="checkbox" id="showemail" name="showemail"<% if RS("showemail") = True Then %> checked<% End If %>>

til

<input type="checkbox" id="showemail" name="showemail"<% if RS("showemail") = 1 Then %> checked<% End If %>>

Jeg mangler bare lige at rette fra tinyint til tal. Hvad er det den hedder?


erikjacobsen, nielle, lægger I lige et svar?
Avatar billede nielle Nybegynder
15. juni 2005 - 21:56 #9
Svar :^)
Avatar billede steen_hansen Forsker
15. juni 2005 - 21:57 #10
Jeg mangler bare lige at rette fra tinyint til tal. Hvad er det den hedder?
Avatar billede erikjacobsen Ekspert
15. juni 2005 - 21:59 #11
tinyint er god nok - den behøver du ikke ændre, da den allerede er et tal ;)

Jeg samler slet ikke på point, tak.
Avatar billede steen_hansen Forsker
15. juni 2005 - 22:03 #12
Jeg havde helt glemt, at du stiltiende protesterer mod pointræsset, Erik. Du får istedet 1000 tak. Guttermand :)

nielle, du får hele dynen, 100 point tak for hjælpen :)
Avatar billede nielle Nybegynder
15. juni 2005 - 23:06 #13
Så bukker jeg pænt og takker :^)
Avatar billede steen_hansen Forsker
13. juli 2005 - 00:44 #14
nielle, jeg er lige rendt ind i det samme problem af en eller anden årsag. Jeg har kortet lidt af, og samtidigt rettet databasen til:

            mySQLstr = "UPDATE profiles SET " & _
                "showlastseen='" & showlastseen & "', " & _
                "showstatus='" & showstatus & "', " & _
                "showfirstname='" & showfirstname & "', " & _
                "firstname='" & Trim(SQLEncode(Request.Form("firstname"))) & "', " & _
                "showmiddlename='" & showmiddlename & "', " & _
                "middlename='" & Trim(SQLEncode(Request.Form("middlename"))) & "', " & _
                "showlastname='" & showlastname & "', " & _
                "lastname='" & Trim(SQLEncode(Request.Form("lastname"))) & "', " & _
                "showaddress1='" & showaddress1 & "', " & _
                "address1='" & Trim(SQLEncode(Request.Form("address1"))) & "', " & _
                "showaddress2='" & showaddress2 & "', " & _
                "address2='" & Trim(SQLEncode(Request.Form("address2"))) & "', " & _
                "showzip='" & showzip & "', " & _
                "zip='" & Trim(SQLEncode(Request.Form("zip"))) & "', " & _
                "showemail='" & showemail & "', " & _
                "email='" & Trim(SQLEncode(Request.Form("email"))) & "', " & _
                "showphoneathome='" & showphoneathome & "', " & _
                "phoneathome='" & Trim(SQLEncode(Request.Form("phoneathome"))) & "', " & _
                "showcellphone1='" & showcellphone1 & "', " & _
                "cellphone1='" & Trim(SQLEncode(Request.Form("cellphone1"))) & "', " & _
                "showcellphone2='" & showcellphone2 & "', " & _
                "cellphone2='" & Trim(SQLEncode(Request.Form("cellphone2"))) & "', " & _
                "showphoneatwork='" & showphoneatwork & "', " & _
                "phoneatwork='" & Trim(SQLEncode(Request.Form("phoneatwork"))) & "', " & _
                "showcellphoneatwork='" & showcellphoneatwork & "', " & _
                "cellphoneatwork='" & Trim(SQLEncode(Request.Form("cellphoneatwork"))) & "', " & _
                "description='" & Trim(SQLEncode(Request.Form("description"))) & "', " & _
                "WHERE username='" & SQLEncode(Session("username")) & "'"

                Response.Write "DEBUG: " & SQL & "<br>"

            Conn.Execute mySQLstr
            Conn.Close



DEBUG:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE username='steen_hansen'' at line 1

edituser.asp, line 234 = Conn.Execute mySQLstr


Har du tid/lyst til at kigge på den? Jeg kan ikke se fejlen, og opretter gerne et nyt spørgsmål.
Avatar billede erikjacobsen Ekspert
13. juli 2005 - 00:48 #15
Lav
          "description='" & Trim(SQLEncode(Request.Form("description"))) & "', " & _
til
          "description='" & Trim(SQLEncode(Request.Form("description"))) & "' " & _
Avatar billede steen_hansen Forsker
13. juli 2005 - 01:12 #16
Hej igen, erik :)

Det hjalp desværre ikke, men det oprindelige er da også rigtigt nok, er det ikke?
Avatar billede erikjacobsen Ekspert
13. juli 2005 - 01:14 #17
Nej, du må ikke have et komma lige før en WHERE. Det skulle gerne virke - eller i det mindste give en anden fejl.
Avatar billede nielle Nybegynder
13. juli 2005 - 06:44 #18
erikjacobsen har ganske ret i at det komma, som er i slutningen af den 1. af denne kodestump, vil generere en SQL fejl:

"description='" & Trim(SQLEncode(Request.Form("description"))) & "', " & _
        "WHERE username='" & SQLEncode(Session("username")) & "'"

Umiddelbart kan jeg ikke se andet (men jeg har nu heller ikke lige vildt meget tid her om morgenen). Imidlertid har du jo stadig din DEBUG udskrift så kunne du ikke lige poste her hvad den resulterer i?

PS: Husk nu at slette DEBUG udskriften når du er helt færdig. Den skal ikke med i den færdige version af koden.
Avatar billede steen_hansen Forsker
13. juli 2005 - 07:16 #19
nielle, jeg er klar over det kun er til at debugge med, den er ikke med ellers :)

DEBUG:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-nt]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE username='steen_hansen'' at line 1

edituser.asp, line 234 = Conn.Execute mySQLstr
Avatar billede steen_hansen Forsker
13. juli 2005 - 07:29 #20
Erik, så ikke lige dit indlæg fra 13/07-2005 01:14:29, da havde jeg lukket ned og var på vej i seng. Men det er jo rigtigt, jeg havde heller ikke komma i det oprindelige lige før WHERE. Det er sket efter jeg har fjernet et par linier, og jeg havde glemt at fjerne kommaet. Jeg skylder en kvajebajer, sorry :)
Avatar billede nielle Nybegynder
13. juli 2005 - 18:03 #21
Din debug:

Response.Write "DEBUG: " & SQL & "<br>"

- udskriver ikke det interesante. Prøv at rette den til:

Response.Write "DEBUG: " & mySQLstr & "<br>"
Avatar billede steen_hansen Forsker
13. juli 2005 - 18:41 #22
Sorry, men det VAR det komma, der skulle fjernes, og så spiller det igen :)
Avatar billede nielle Nybegynder
13. juli 2005 - 19:11 #23
Cool :^)
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