webForumDet fria alternativet

signup & inloggning samt replace ' problem

24 svar · 527 visningar · startad av G8

G8Medlem sedan jan. 20011 213 inlägg
#1

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

G8Medlem sedan jan. 20011 213 inlägg
#2

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?

LarsGMedlem sedan dec. 200012 464 inlägg
#3

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?

G8Medlem sedan jan. 20011 213 inlägg
#4

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
%>
LarsGMedlem sedan dec. 200012 464 inlägg
#5
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"
G8Medlem sedan jan. 20011 213 inlägg
#6

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 :birp

G8Medlem sedan jan. 20011 213 inlägg
#7

Det funkar inte iaf, nu skriver den username som Peter''''s med fyra ' istället... ?

@ndersMedlem sedan juni 200032 969 inlägg
#8

Hur ser den koden ut då?

G8Medlem sedan jan. 20011 213 inlägg
#9

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...

@ndersMedlem sedan juni 200032 969 inlägg
#10

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,

G8Medlem sedan jan. 20011 213 inlägg
#11

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

@ndersMedlem sedan juni 200032 969 inlägg
#12

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,

G8Medlem sedan jan. 20011 213 inlägg
#13

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

@ndersMedlem sedan juni 200032 969 inlägg
#14

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,

G8Medlem sedan jan. 20011 213 inlägg
#15

Du har så rätt @nders... Jag återkommer framåt kvällen med resultat etc.

Tack

//G8

G8Medlem sedan jan. 20011 213 inlägg
#16

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

G8Medlem sedan jan. 20011 213 inlägg
#17

usch, blev lite rörigt det där ser jag... :(

Hoppas du klarar av att läsa koden iaf...

//G8

G8Medlem sedan jan. 20011 213 inlägg
#18

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...

solbulleMedlem sedan mars 20015 287 inlägg
#19

RED: Nja, osäker på vad jag skrev så...

@ndersMedlem sedan juni 200032 969 inlägg
#20

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,

144 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)