Märker även att det blir knas med Jmail, då man får ett mail med sina uppgifter så skrivs Peter''s ut istället för Peter's...
Göra en Replace(fix,"''", "'") bara för Jmail eller?
24 svar · 533 visningar · startad av G8
Kör en funktion som ser ut så här
function fixa(fix)
fix = Replace(fix,"'", "''")
fix = Replace(fix,"|","")
fixa = fix
end function
Jag använder den när jag skriver in bl. a. username i databasen. Om man då vill använda sig av ett username som Peter's så skrivs det åxå in som Peter's i databasen, men när man loggar in så använder jag samma funktion, vilket då skapar problem eftersom att Peter's blir Peter''s med två ' istället för en.
Är det dumt/onödigt att köra replace på username vid inloggning, vilket verkar vara en bra sak att göra, eller hur ska man gå runt detta?
Förslag, synpunkter?
Tack
//G8
Märker även att det blir knas med Jmail, då man får ett mail med sina uppgifter så skrivs Peter''s ut istället för Peter's...
Göra en Replace(fix,"''", "'") bara för Jmail eller?
Det är bara för strängar som du använder i SQL-satser som du skall använda funktionen.
Hur ser din login-funktion ut?
hela sidan som kollar login:
<%
response.buffer=true
function fixa(fix)
fix = Replace(fix,"'", "''")
fix = Replace(fix,"|","")
fixa = fix
end function
username = fixa(Request.Form("username"))
password = fixa(Request.Form("password"))
If Request.Form("rem") = "true" Then
Response.Cookies("username") = username
Response.Cookies("username").Expires = date() + 365
Response.Cookies("password") = password
Response.Cookies("password").Expires = date() + 365
End If
set connection = Server.CreateObject("ADODB.Connection")
Connection.Open "databasen"
stm = "SELECT username, password, inactive, id FROM Users WHERE Users.username = '"&username&"' AND password= '"&password&"' AND Inactive = 0"
set rs = connection.execute(stm)
If NOT(Rs.BOF AND Rs.EOF) Then
session("userid") = rs("id")
session("user") = rs("id") & status
session("username") = rs("username")
session("password") = rs("password")
URL = request.querystring("URL")
MYMESSAGE = Server.URLEncode("Logging in.<p>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL="&URL&"")
Else
MYMESSAGE = Server.URLEncode("An error has accured.<p>Please check your username and password!<p>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
End If
rs.close
set rs = nothing
connection.close
set connection = nothing
%>
response.buffer=true
function fixa(fix)
fix = Replace(fix,"'", "''")
fix = Replace(fix,"|","")
fixa = fix
end function
username = Request.Form("username")
password = Request.Form("password")
If Request.Form("rem") = "true" Then
Response.Cookies("username") = username
Response.Cookies("username").Expires = date() + 365
Response.Cookies("password") = password
Response.Cookies("password").Expires = date() + 365
End If
set connection = Server.CreateObject("ADODB.Connection")
Connection.Open "databasen"
stm = "SELECT username, password, inactive, id FROM Users WHERE Users.username = '"& fixa(username) &"' AND password= '"&fixa(password) &"' AND Inactive = 0"
Menar du att jag skriver så himla slarvig kod?
Nått förslag på hur jag ska göra med Jmail då? Jag inkluderar bara plain text och skriver in det i mailet med hjälp av:
"Username: "&username
Skulle jag möta dig på krogen LarsG kan du räkna med gratis öl
Det funkar inte iaf, nu skriver den username som Peter''''s med fyra ' istället... ?
Hur ser den koden ut då?
Vilken, koden till Jmail? Den andra koden ser du ju ovanför annars
Jag kommer inte åt det nu iaf, sitter på jobbet tyvärr...
Får ta det ikväll när jag kommit hem istället...
Ja, det var väl i jmail-koden du hade problem med en massa apostrofer? Posta den koden i kväll då.
(Du ska alltså inte behöva göra några ändringar på variabeln username, utan endast som LarsG skrev i SQL-frågan. Du behöver inte köra någon rensningsfunktion när du ska lägga in variabeln i din jmail-kod.)
Om jag missuppfattar problemet, posta all relevant kod, så ska vi nog kunna hitta felet.
Mhv,
Jag vet hur jag kan göra med Jmail koden nu...
Istället för att sätta username = request.form("username") och sedan kalla på det i Jmail koden med hjälp av " & username & " så kan jag ju lika gärna använda mig av request.form("username") direkt i Jmail, och får ju på så sätt exakt det som skrivits in i formuläret...
Ser du några problem att göra på det sättet, med tanke på att jag kör en replace ' längre upp?
//G8
Nej, det är inga problem att göra på det sättet. Jag förstår bara inte varför du måste göra förändringar i värdet av variabelns värde. Det rärcker gott och väl att bara replace:ar i SQL-fråga o.dyl., utan att tilldela variabeln det nya värdet.
Men visst, kör med request.form om du känner för det.
Mvh,
Jo, det var så jag med tänkte... repace i SQL frågan och sedan request.form i Jmail, då borde det ju bli rätt..
Ja ja, får testa när jag kommer hem från jobbet som sagt...
//G8
Så länge du bara gör replacen i sql-frågan kan du använda samma variabel nere i jmail-koden. Då har den ju samma värde som request.form. När du ändå har använt request och lagt in värdet i en variabel är det ju helt klart smidigast att använda den variabeln.
Mvh,
Ok, lite fortsättning på problemet då då...
Så här ser min sida ut som skriver in nya användare i databasen samt skickar iväg ett email till dom med deras uppgifter (jo, mkt kod, jag vet...):
<%
function fixa(fix)
fix = Replace(fix,"'", "''")
fix = Replace(fix,"|","")
fixa = fix
end function
username = Request.Form("username")
nick = Request.Form("nick")
email = Request.Form("email")
city = Request.Form("city")
age = Request.Form("age")
usercountry = Request.Form("usercountry")
uppkoppling = Request.Form("userconnection")
admin = 0
approved = 0
if username ="" then
MYMESSAGE = Server.URLEncode("An error has accured!<p>You must enter a <b>username</b>!<br>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
End if
if nick ="" then
MYMESSAGE = Server.URLEncode("An error has accured!<p>You must enter a <b>nick</b>!<br>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
End if
if email ="" then
MYMESSAGE = Server.URLEncode("An error has accured!<p>You must enter an <b>e-mail address</b>!<br>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
End if
if city ="" then
MYMESSAGE = Server.URLEncode("An error has accured!<p>You must enter a <b>city</b>!<br>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
End if
if NOT isnumeric(age) then
MYMESSAGE = Server.URLEncode("An error has accured!<p>Only digits are allowed in the <b>age</b> field!<br>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
End if
if age ="" then
MYMESSAGE = Server.URLEncode("An error has accured!<p>You must enter your <b>age</b>!<br>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
else
admember
end if
sub admember
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "databasen"
set rs = Server.CreateObject("ADODB.Recordset")
stm = "SELECT * FROM users WHERE username = '"& fixa(username) &"' OR email = '"& fixa(email) &"' "
Set rs = connection.execute(STM)
if rs.eof then
'## Randomize lösenord
randomize
pwdlen=8 'Hur långt ska lösenordet vara
pwd=""
pwdchr="abcdefghjkmpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ1234567890" 'Vilka tecken ska genereras
chrlen=len(pwdchr)
for n=1 to pwdlen
x=Int((chrlen - 1 + 1) * Rnd + 1)
pwd=pwd & mid(pwdchr,x,1)
next
stm = "SELECT * FROM users WHERE 1 = 2 "
stm = "INSERT INTO users (username,nick,password,email,age,city,country,uppkoppling,lagid,registrering)"
stm = stm & " VALUES ('"& fixa(username) &"','"&fixa(nick)&"','"&pwd&"','"&fixa(email)&"','"&fixa(age)&"','"&fixa(city)&"','"&fixa(usercountry)&"','"&fixa(uppkoppling)&"',100,'#"&now&"#') "
connection.execute(stm)
'##Jmail kod
set msg = Server.CreateOBject( "JMail.Message" )
msg.Logging = true
msg.silent = true
msg.From = "noreply@mittdomän.com"
msg.FromName = "mittdomän.com"
msg.AddRecipient request.form("email"), request.form("nick")
msg.Subject = "Welcome to Mittdomän.com"
msg.Body = "Thank you for joining Mittdomän.com." & vbCrLf & "Here is the information that you have registered with us:" & vbCrLf & vbCrLf & "Username: " & username & vbCrLf & "Password: " & pwd & vbCrLf & "Nick: " & nick & vbCrLf & "E-Mail: " & email & vbCrLf & "Age: " & age & vbCrLf & "City: " & city & vbCrLf & "Connection: " & uppkoppling & vbCrLf & vbCrLf & "Please visit [url]http://www.Mittdomän.com[/url] and log in with you new account." & vbCrLf & vbCrLf & "The Mittdomän.com Crew."
if not msg.Send("mail.webhotellet.se" ) then
Response.write "<pre>" & msg.log & "</pre>"
else
MYMESSAGE = Server.URLEncode("Welcome to Mittdomän.com!<br>Your account have been successfully created.<br>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=5&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=default.asp")
end if
else
MYMESSAGE = Server.URLEncode("Username is already taken.<br><br>Please wait...")
Response.Redirect ("delay.asp?DELAY_TIME=5&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
end if
end sub
%>
Problem 1: När username skrivs in i databasen så blir en ' inskrivet som två ''. Detta gäller inte något utav de andra fälten, där blir det som det ska vara, en ' blir inskrivet som en '.
Problem 2: När mailet skickas iväg till användaren med uppgifterna så blir en ' skrivet som fyra '''' när det gäller username. Alla andra enkel ' skrivs som två '', vilket åxå är fel...
Problem 3: Rubriken i mailet som användaren får skriv nått i stil med: =?iso-8859-1?Q?MittDomän=... sitället för Welcome to Mittdomän.com
Nån som har en susning?
Mvh
//G8
I mailet som Jmail skickar så skriver den alltså:
Username: G8''''s
Password: FZHZseAH
Nick: G8''s
E-Mail: minmail@provider.ru
Age: 23
City: Oslo''s
Connection: Cable
Detta om jag fyller ut formuläret med:
Username: G8's
Nick: G8''s
E-Mail: minmail@provider.ru
Age: 23
City: Oslo's
Connection: Cable
Det konstiga här är ju att username får '''' när det inte ens har ändrats (fix) från request.form("username"), samt att city får '' när inte det heller har ändrats sedan request.form("city")... helskumt tycker jag, eller har jag missat nått?
Kanske ska nämna att jag använder MySQL om det nu skulle spela nån roll, men det tror jag inte...
RED: Nja, osäker på vad jag skrev så...
G8 skrev:
Kanske ska nämna att jag använder MySQL om det nu skulle spela nån roll, men det tror jag inte...
Jo, det spelar nog roll. I MySQL escape:ar man med backslash. Du bör alltså ändra fixa-funktionen till följande:
function fixa(fix)
fix = Replace(fix,"'", "\\'")
fix = Replace(fix,"|","")
fixa = fix
end function
Jag är inte säker på att det löser problemet, och jag är inte ens säker på att jag har rätt. Men prova kan man?
Mvh,