webForumDet fria alternativet

signup & inloggning samt replace ' problem

24 svar · 527 visningar · startad av G8 · sida 2 av 2

G8Medlem sedan jan. 20011 213 inlägg
#21

Njae... är inte så säker på att man escape-ar med backslash...

Microsoft OLE DB Provider for ODBC Drivers fel '80040e09' 

[TCX][MyODBC]You have an error in your SQL syntax near 's','G8/'s','qF9gNxJj','','minmail@provider.ru','23','Oslo\'s','197','Cable',' at line 1 

/signup_user2.asp, rad 72

Notera att där det står 'G8/'s' ska det vara ett backslash, men forumet vill inte skriva ut det, vet inte varför...

Detta när jag försöker lägga till en ny användare...

Kan man inte escape-a genom att sätta replace "'", ""

alltså, ersätta en ' med ingenting alls? eller blir det knas då med?

//G8

@ndersMedlem sedan juni 200032 969 inlägg
#22

Det är klart du kan, men det blir ju fel. Det sparas ju inte rätt saker då.

Men ju mer jag tänker på det, desto säkrare blir jag på att mitt förra inlägg är felaktigt. Använder man MySQL med PHP escape:ar du med backslash, men det är möjligt att det är MyODBC som vill ha escape, och då ska det nog vara dubbla apostrofer.

Alltså: Ta tillbaka den funktionen som du hade innan. Men, skriv ut INSERT-frågan med response.write istället för att exekvera den. Hur ser det ut?

Mvh,

G8Medlem sedan jan. 20011 213 inlägg
#23

Inmatat:
G8's, G8's, Oslo's

Med fixa(username), fixa(nick), fixa(city):
G8''''s,G8''s,Oslo''s

genom att bara skriva ut username, nick, city:
G8''s,G8's,Oslo's

Jag fattar mfortfarande inte varifrån username får sin extra ' om jag bara sätter username=request.form("username") om nick och city bara får en '

använder alltså:

username = Request.Form("username")
nick = Request.Form("nick")
city = Request.Form("city")

och sätter bara fixa() i själva SQL strängen... helskumt

?

/me håller på att bli galen

G8Medlem sedan jan. 20011 213 inlägg
#24

Ok, jag har fått ordning på själva anskrivningen i databsen av ny användare nu iaf.

Blev visst ganska mkt text+kod här så det är möjligt att det blir en redigering senare... håll till godo så länge.

Jag antar att det hade att göra med följande:

stm = "SELECT * FROM users WHERE username = '"& fixa(username) &"' OR email = '"& fixa(email) &"' "

där username tilldelas ytterligare en ' vilket i slutändan leder till att username blir Peter''''s istället för Peter's när det skrivs in, eftersom jag längre ner körde:

stm = "INSERT INTO users (username,nick,password,email,age,city,country,uppkoppling,lagid,registrering) "
stm = stm & " VALUES ('"&fixa(username)&"','"&nick&"','"&pwd&"','"&email&"','"&age&"','"&city&"','"&usercountry&"','"&uppkoppling&"',100,'#"&now&"#') "  
connection.execute(stm)

Själva Jmail problemet löste jag genom att köra request.form("värde") på allt som skulle med i mailet och får ju på så sätt exakt den data som användaren har knapat in i formuläret.

Hela sidan efter att ha fixat problemet:

<%
function fixa(fix)
fix = Replace(fix,"'", "''")
fix = Replace(fix,"|","")

fixa = fix
end function

username = fixa(Request.Form("username"))
nick = fixa(Request.Form("nick"))
email = fixa(Request.Form("email"))
city = fixa(Request.Form("city"))
age = fixa(Request.Form("age"))
usercountry = fixa(Request.Form("usercountry"))
uppkoppling = fixa(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 = '"& username &"' OR email = '"& 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="abcdefghjkmpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ123456789"   '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 ('"&username&"','"&nick&"','"&pwd&"','"&email&"','"&age&"','"&city&"','"&usercountry&"','"&uppkoppling&"',100,'#"&now&"#') "  
connection.execute(stm)

'##Jmail
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 = "Here is the information that you have registered with us:" & vbCrLf & "Username: "& request.form("username")
if not msg.Send("mail.webhotell.se" ) then
    Response.write "<pre>" & msg.log & "</pre>"
else
    MYMESSAGE = Server.URLEncode("Welcome to Mittdomän.com<br>Please wait...")
	Response.Redirect ("delay.asp?DELAY_TIME=3&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=3&DELAY_MESSAGE=" & MYMESSAGE & "&REDIRECT_URL=javascript:history.back(1)")
end if
end sub
%>

Nu är det bara problemet med inloggningen kvar där jag inte kan logga in med ett användarnamn som innehåller '...

<%
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 username = '"& fixa(username) &"' AND password= '"&fixa(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...<p>")
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
%>

Peter's blir föjldaktligen Peter''s, och eftersom att det inte finns något konto med två ' så kan jag inte logga in... hur ska man lösa detta enklast? Väljer jag bort fixa() så avbryter jag ju SQLsträngen...

Tack för all hjälp hittils

//G8

G8Medlem sedan jan. 20011 213 inlägg
#25

Kan meddela att jag nu har skrivit om alltihopa och nu funkar det, lite konstigt dock eftersom jag inte ser några direkta skillnader om man jämnför koden... :q

Ja ja, det funkar nu iaf och det är det viktigaste. :e

Vill ni se kod så säg till...

Tack för all hjälp iaf :)

//G8

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