Avatar billede pretsmann Nybegynder
05. april 2005 - 15:31 Der er 26 kommentarer og
2 løsninger

Special tegn i tekstfelt

Hej

Hvordan kan det være der opstår fejl hver gang der tastes ' i et tekstfelt (Access db)?

Og er der evt. en som kan give et eksempel på hvordan dette undgåes?
Avatar billede keysersoze Guru
05. april 2005 - 15:40 #1
det er ikke databasen der fejler - det er din sql. kort fortalt slutter en ' i et tekstfejl en anden ' (nemlig den der angiver start på indputstring til tekstfelt) og så kommer der en masse ekstra underlige tegn og en afsluttende ' som også er forkert... altså du skal gøre for at undgå fejl er at erstatte ' med '' - fx;

insert into tabel (tekstfejl) values ('" & replace(var,"'","''") & "')
Avatar billede pretsmann Nybegynder
05. april 2005 - 15:55 #2
hmm ja jeg har nok indsat den forkert?:
sql = "INSERT INTO annoncer(tekstfejl, brugernavn, Region, Adresse, Postnr, Postby, Type, Periode, Rum, Stoerrelse, Koekken, Bad, Indgang, Husdyr, Indflytdag, Indflytmdr, Indflytaar, Leje, Forbrug, Depositum, Beskrivelse, Telefon, Email, Status) VALUES ('" & replace(var,"'","''") & "', '" & Server.HTMLEncode(Request("Brugernavn")) & "', '"& Server.HTMLEncode(Request("Region")) & "', '" & Server.HTMLEncode(Request("Adresse")) & "', '" & Server.HTMLEncode(Request("Postnr")) & "', '" & Server.HTMLEncode(Postby) & "', '"&Server.HTMLEncode(Request("Type"))& "', '" & Server.HTMLEncode(Request("Periode")) & "', '"&Server.HTMLEncode(Request("Rum"))& "', '" & Server.HTMLEncode(Request("Stoerrelse")) & "', '"&Server.HTMLEncode(Request("Koekken"))& "', '" & Server.HTMLEncode(Request("Bad")) & "', '"&Server.HTMLEncode(Request("Indgang"))& "', '" & Server.HTMLEncode(Request("Husdyr")) & "', '"&Server.HTMLEncode(Request("Indflytdag"))& "', '" & Server.HTMLEncode(Request("Indflytmdr")) & "', '"&Server.HTMLEncode(Request("Indflytaar"))& "', '" & Server.HTMLEncode(Request("Leje")) & "', '" & Server.HTMLEncode(Request("Forbrug")) & "', '"&Server.HTMLEncode(Request("Depositum"))& "', '" & Server.HTMLEncode(Beskrivelse) & "', '"&Server.HTMLEncode(Request("Telefon"))& "', '"&Server.HTMLEncode(Request("Email"))& "', '"& Server.HTMLEncode(Request("Status")) & "')"

Der kommer flg. fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression ''Mmk'', '', 'Kan kontaktes pr e-mail', 'Afventer')'.

/login_udlejer_annonce-ny.asp, line 109

line 109 = rs.execute(sql)
Avatar billede busschou Praktikant
05. april 2005 - 16:12 #3
Ja du skal sætte den rundt om dine tekst felter
feks skal
Server.HTMLEncode(Request("Adresse"))
være
Server.HTMLEncode(Replace(Request("Adresse"),"'","""))
Avatar billede pretsmann Nybegynder
05. april 2005 - 16:35 #4
Ja nu brokker den over slutningen af denne linie:

'" & Server.HTMLEncode(Replace(Beskrivelse),"'",""") & "'

Det skal bruges på feltet Beskrivelse som ser lidt anderledes ud...
Avatar billede busschou Praktikant
05. april 2005 - 16:42 #5
Server.HTMLEncode(Replace(Beskrivelse),"'","''")
Avatar billede busschou Praktikant
05. april 2005 - 16:42 #6
såen ...sorry :o)
Men jeg vil foreslå dig at putte det på alle felter af typen tekst
Avatar billede busschou Praktikant
05. april 2005 - 16:43 #7
Det kan være svært at se forskellen på
Server.HTMLEncode(Replace(Beskrivelse),"'",""")
og
Server.HTMLEncode(Replace(Beskrivelse),"'","''")
På min skærm
Men forskellen er om det er gåseøjne eller to enkeltplinger :o)
Avatar billede busschou Praktikant
05. april 2005 - 16:45 #8
meen hey
hedder det ikke
Server.HTMLEncode(Replace(Request("Beskrivelse"),"'","''")
istedet for
Server.HTMLEncode(Replace(Beskrivelse),"'","''")
Avatar billede pretsmann Nybegynder
05. april 2005 - 16:51 #9
Nah, nu kommer:
Microsoft VBScript runtime error '800a01c2'

Wrong number of arguments or invalid property assignment: 'Replace'

Nej beskrivelse ser således ud:
                        ' stort begyndelses bogstav
                        Beskrivelse = Request("Beskrivelse")
                        Beskrivelse = UCase(left(Beskrivelse,1)) & mid(Beskrivelse,2)
Avatar billede busschou Praktikant
05. april 2005 - 16:53 #10
ok
Avatar billede busschou Praktikant
05. april 2005 - 16:54 #11
Server.HTMLEncode(Replace(Beskrivelse),"'","''")
skal være
Server.HTMLEncode(Replace(Beskrivelse,"'","''"))
Avatar billede busschou Praktikant
05. april 2005 - 16:55 #12
kuk i paranteserne.... :o(
Avatar billede busschou Praktikant
05. april 2005 - 16:57 #13
hvis jeg var mig (og det er jeg jo hehe)
Så tror jeg at jeg ville lave dem alle uden for sql for at gøre sql´en mere overskuelig
Altså deklærere
Adresse = Replace(Request("Adresse"),"'","''")
osv og så bruge Adresse ligesom du briger Beskrivelse i din sql
Men det er bare en ide evt til en anden gang :o)
Avatar billede pretsmann Nybegynder
05. april 2005 - 17:02 #14
hmm så kommer

[Microsoft][ODBC Microsoft Access Driver] Number of query values and destination fields are not the same
Avatar billede busschou Praktikant
05. april 2005 - 17:03 #15
så prøver du indsætte flere eller færre værdier end du har opgivet
prøv lige send din sql
Avatar billede pretsmann Nybegynder
05. april 2005 - 17:05 #16
sql = "INSERT INTO annoncer(tekstfejl, brugernavn, Region, Adresse, Postnr, Postby, Type, Periode, Rum, Stoerrelse, Koekken, Bad, Indgang, Husdyr, Indflytdag, Indflytmdr, Indflytaar, Leje, Forbrug, Depositum, Beskrivelse, Telefon, Email, Status) VALUES ('" & Server.HTMLEncode(Request("Brugernavn")) & "', '"& Server.HTMLEncode(Request("Region")) & "', '" & Server.HTMLEncode(Request("Adresse")) & "', '" & Server.HTMLEncode(Request("Postnr")) & "', '" & Server.HTMLEncode(Postby) & "', '"&Server.HTMLEncode(Request("Type"))& "', '" & Server.HTMLEncode(Request("Periode")) & "', '"&Server.HTMLEncode(Request("Rum"))& "', '" & Server.HTMLEncode(Request("Stoerrelse")) & "', '"&Server.HTMLEncode(Request("Koekken"))& "', '" & Server.HTMLEncode(Request("Bad")) & "', '"&Server.HTMLEncode(Request("Indgang"))& "', '" & Server.HTMLEncode(Request("Husdyr")) & "', '"&Server.HTMLEncode(Request("Indflytdag"))& "', '" & Server.HTMLEncode(Request("Indflytmdr")) & "', '"&Server.HTMLEncode(Request("Indflytaar"))& "', '" & Server.HTMLEncode(Request("Leje")) & "', '" & Server.HTMLEncode(Request("Forbrug")) & "', '"&Server.HTMLEncode(Request("Depositum"))& "', '" & Server.HTMLEncode(Replace(Beskrivelse,"'","''")) & "', '"&Server.HTMLEncode(Request("Telefon"))& "', '"&Server.HTMLEncode(Request("Email"))& "', '"& Server.HTMLEncode(Request("Status")) & "')"
Avatar billede busschou Praktikant
05. april 2005 - 17:19 #17
du mangler at hive den første "tekstfejlt" ind som den første efter VALUES ('"
Avatar billede pretsmann Nybegynder
05. april 2005 - 17:25 #18
nu ser den således ud:
sql = "INSERT INTO annoncer(tekstfejl, brugernavn, Region, Adresse, Postnr, Postby, Type, Periode, Rum, Stoerrelse, Koekken, Bad, Indgang, Husdyr, Indflytdag, Indflytmdr, Indflytaar, Leje, Forbrug, Depositum, Beskrivelse, Telefon, Email, Status) VALUES ('" & replace(var,"'","''") & "', '" & Server.HTMLEncode(Request("Brugernavn")) & "', '"& Server.HTMLEncode(Request("Region")) & "', '" & Server.HTMLEncode(Request("Adresse")) & "', '" & Server.HTMLEncode(Request("Postnr")) & "', '" & Server.HTMLEncode(Postby) & "', '"&Server.HTMLEncode(Request("Type"))& "', '" & Server.HTMLEncode(Request("Periode")) & "', '"&Server.HTMLEncode(Request("Rum"))& "', '" & Server.HTMLEncode(Request("Stoerrelse")) & "', '"&Server.HTMLEncode(Request("Koekken"))& "', '" & Server.HTMLEncode(Request("Bad")) & "', '"&Server.HTMLEncode(Request("Indgang"))& "', '" & Server.HTMLEncode(Request("Husdyr")) & "', '"&Server.HTMLEncode(Request("Indflytdag"))& "', '" & Server.HTMLEncode(Request("Indflytmdr")) & "', '"&Server.HTMLEncode(Request("Indflytaar"))& "', '" & Server.HTMLEncode(Request("Leje")) & "', '" & Server.HTMLEncode(Request("Forbrug")) & "', '"&Server.HTMLEncode(Request("Depositum"))& "', '" & Server.HTMLEncode(Replace(Beskrivelse,"'","''")) & "', '"&Server.HTMLEncode(Request("Telefon"))& "', '"&Server.HTMLEncode(Request("Email"))& "', '"& Server.HTMLEncode(Request("Status")) & "')"


og der kommer:
Microsoft][ODBC Microsoft Access Driver] The INSERT INTO statement contains the following unknown field name: 'tekstfejl'. Make sure you have typed the name correctly, and try the operation again
Avatar billede busschou Praktikant
05. april 2005 - 17:27 #19
Her er de felter du indsætter i
(tekstfejl, brugernavn, Region, Adresse, Postnr, Postby, Type, Periode, Rum, Stoerrelse, Koekken, Bad, Indgang, Husdyr, Indflytdag, Indflytmdr, Indflytaar, Leje, Forbrug, Depositum, Beskrivelse, Telefon, Email, Status)
Den siger at tekstfejl ikke eksisterer i din database?
Avatar billede busschou Praktikant
05. april 2005 - 17:28 #20
men hvad er det du har sat ind?
& replace(var,"'","''") &  <-- Hvad er det?
Avatar billede busschou Praktikant
05. april 2005 - 17:29 #21
hvis det er taget lige ud fra keysersoze´s eksempel så skal der jo ikke så "var"
Så skal der vel stå Server.HTMLEncode(Tekstfejl) eller noget ligesom i alle de andre??
Avatar billede pretsmann Nybegynder
05. april 2005 - 17:29 #22
Svar: keysersoze
05/04-2005 15:40:03
Avatar billede pretsmann Nybegynder
05. april 2005 - 17:42 #23
haha næh, der står nu:
sql = "INSERT INTO annoncer(tekstfejl, brugernavn, Region, Adresse, Postnr, Postby, Type, Periode, Rum, Stoerrelse, Koekken, Bad, Indgang, Husdyr, Indflytdag, Indflytmdr, Indflytaar, Leje, Forbrug, Depositum, Beskrivelse, Telefon, Email, Status) VALUES ('" & replace(tekstfejl,"'","''") & "', '" & Server.HTMLEncode(Request("Brugernavn")) & "', '"& Server.HTMLEncode(Request("Region")) & "', '" & Server.HTMLEncode(Request("Adresse")) & "', '" & Server.HTMLEncode(Request("Postnr")) & "', '" & Server.HTMLEncode(Postby) & "', '"&Server.HTMLEncode(Request("Type"))& "', '" & Server.HTMLEncode(Request("Periode")) & "', '"&Server.HTMLEncode(Request("Rum"))& "', '" & Server.HTMLEncode(Request("Stoerrelse")) & "', '"&Server.HTMLEncode(Request("Koekken"))& "', '" & Server.HTMLEncode(Request("Bad")) & "', '"&Server.HTMLEncode(Request("Indgang"))& "', '" & Server.HTMLEncode(Request("Husdyr")) & "', '"&Server.HTMLEncode(Request("Indflytdag"))& "', '" & Server.HTMLEncode(Request("Indflytmdr")) & "', '"&Server.HTMLEncode(Request("Indflytaar"))& "', '" & Server.HTMLEncode(Request("Leje")) & "', '" & Server.HTMLEncode(Request("Forbrug")) & "', '"&Server.HTMLEncode(Request("Depositum"))& "', '" & Server.HTMLEncode(Replace(Beskrivelse,"'","''")) & "', '"&Server.HTMLEncode(Request("Telefon"))& "', '"&Server.HTMLEncode(Request("Email"))& "', '"& Server.HTMLEncode(Request("Status")) & "')"

Men det gir samme fejl
Avatar billede busschou Praktikant
05. april 2005 - 17:43 #24
hvordan så din sql ud oprindeligt?
Det keyserzone skrev var jo et eksempel hvor du måtte rette det til
"var" betyder jo bare "dit felt"
så du skal ikke skrive
replace(var,"'","''")
men
replace(Tekstfejl,"'","''") 
eller hvad det nu hedder fra den form det kommer fra :o)
Avatar billede busschou Praktikant
05. april 2005 - 17:44 #25
Microsoft][ODBC Microsoft Access Driver] The INSERT INTO statement contains the following unknown field name: 'tekstfejl'. Make sure you have typed the name correctly, and try the operation again
------------
Det betyder at din tabel "annoncer" ikke indeholder feltet "tekstfejl"
Er du sikker på det ikke heller "tekstFejl" eller andet?
Avatar billede pretsmann Nybegynder
05. april 2005 - 17:55 #26
ups ja da tekstfejl blev rettet til beskrivelse skete der noget :-)

tak for hjælpen hvordan deles points?
Avatar billede busschou Praktikant
05. april 2005 - 18:00 #27
jamen har du så ikke to felter med beskrivelse?
point deler du som du synes de er fortjent :o)
Avatar billede pretsmann Nybegynder
05. april 2005 - 18:07 #28
Nej der er kun 1 felt med beskrivelse
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