Slå av egna felmeddelanden i webläsaren.
username får aldrig något värde.
username = request.form("username") osv
22 svar · 399 visningar · startad av magnusfernstrom
Hejsan!
Jag har lite problem med en sida som man skall kunna registrera sig på.
koden ser ut såhär:
<%
if Request.QueryString("action") = "register" then
Set db = server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("db.mdb")
SQL = "SELECT anv FROM members WHERE anv = '" & username & "'"
Set rs = db.Execute(SQL)
if rs.EOF or rs.BOF then
SQL = "INSERT INTO members (anv,pass,email,hemsida,bild,namn,presentation) VALUES ('" & Request.Form("username") & "', '" & Request.Form("password") & "', '" & Request.Form("namn") & "', '" & Request.Form("email") & "', '" & Request.Form("hemsida") & "', '" & Request.Form("bild") & "', '" & Request.Form("presentation") & "')"
db.Execute(SQL)
Response.Redirect("klart.asp")
else
Response.write "Upptaget!"
end if
end if
%>
<html>
<form name="frmRegister" method="post" action="register.asp?action=register">
Användarnamn:
<br>
<input type="text" name="username">
<br>
Lösenord:
<br>
<input type="password" name="password">
<br>
Namn:
<br>
<input type="text" name="namn">
<br>
E-mail:
<br>
<input type="text" name="email">
<br>
Hemsida:
<br>
<input type="text" name="hemsida" value="http://">
<br>
Bild:
<br>
<input type="text" name="bild">
<br>
Presentation:
<br>
<textarea name="presentation" cols="45" rows="7"></textarea>
<br>
<input type="submit" value="Registrera">
</form>
</html>
Problemen är följande:
När jag inte matar in något i fälten så blir det "error 500"
När jag matar in ' blir det också "error 500".
Jag hade replace kod innan, men den fungerade inte så jag tog bort den.
Frågan är nu, Varför blir det fel när fälten är tomma?
Och hur ser en korrekt replacekod ut?
Tacksam för svar.
Mvh Magnus Fernström
Slå av egna felmeddelanden i webläsaren.
username får aldrig något värde.
username = request.form("username") osv
Så en korrekt replace kod skulle alltså se ut på följande vis?
username = request.form("username")
username = Replace(Request.Form("username"), "'", "''")
Eller räcker det med
username = Replace(Request.Form("username"), "'", "''")
Ok, det problemet med felmeddelandet vid tomma fält fixade sig.
Jag hade inte tillåtit tomma fält i databasen. Så det är löst.
Men replace koden är det fortfarande problem med.
Några lösningar?
magnusfernstrom skrev:
Eller räcker det med
username = Replace(Request.Form("username"), "'", "''")
Det räcker. Du kan med fördel göra en funktion av replacen dock, så den är lättare att återanvända.
Och hur skall jag gå tillväga då?
Vad är problemet med replace-koden då? :q
Tja! Den vill helt enkelt "replaca" tecknet! :)
Ni kan ju pröva http://www24.brinkster.com/themad/db/register.asp
Koden är densamma som förut fast jag har lagt till replace koden.
magnusfernstrom skrev:
Och hur skall jag gå tillväga då?
Function SQLEncode(ByVal sString)
SQLEncode = Replace(trim(sString), "'", "''")
End Function
Response.write SQLEncode("'hackerkod'")
Ok tack Jesper T.
Men nu skall jag var riktigt jobbig.
Om jag vill ersätta koden med :
username = Replace(Request.Form("username"), "'", "''")
Hur gör jag då?
För det fungerar ju inte!
Pröva själv.
Är du helt hundra på att du kör replacen i denna rad:
SQL = "INSERT INTO members (anv,pass,email,hemsida,bild,namn,presentation) VALUES ('" & Request.Form("username") & "', '" & Request.Form("password") & "', '" & Request.Form("namn") & "', '" & Request.Form("email") & "', '" & Request.Form("hemsida") & "', '" & Request.Form("bild") & "', '" & Request.Form("presentation") & "')"
username = SQLEncode(request.form("username"))
Du kan ju köra funktionen direkt i din sqlfråga också.
Ursäkta att jag frågar er om koden och allt det där.
Men jag kan ju inget om sånt här :)
SQL = "INSERT INTO members (anv,pass,email,hemsida,bild,namn,presentation) VALUES ('" & SQLEncode(request.Form("username")) & "', '" & SQLEncode(request.Form("password")) & "', '" & SQLEncode(request.Form("namn")) & "', '" & SQLEncode(request.Form("email")) & "', '" & SQLEncode(request.Form("hemsida")) & "', '" & SQLEncode(request.Form("bild")) & "', '" & SQLEncode(request.Form("presentation")) & "')"
Kanske...
Tack så hemskt mycket; solbulle, Jesper T och @nders.
Hoppas det skall fungera nu.
Återkommer om det uppstår fler problem.
Mvh Magnus Fernström
Javisst!
Det fungerar som smort.
Men eftersom skapandet av något som har med webb att göra inte kan gå felfritt så.....ja.
När man skall registrera sig så blir det krångel.
Antingen så får man meddelandet om att namnet är upptaget vad man än skriver in. Eller så kan man registrera sig med samma användarnamn flera gånger.
Jag måste säga att detta är skumt.
Jag har aldrig varit med om att felet ändras.
Vad skall man göra nu då?
Någon som fortfarande orkar med mig? :P
magnusfernstrom skrev:
Någon som fortfarande orkar med mig? :P
Garanterat! :)
Hur ser din kod ut nu efter alla ändringar?
Mvh
Ok, så här ser koden ut nu:
<%
if Request.QueryString("action") = "register" then
Function SQLEncode(ByVal sString)
SQLEncode = Replace(trim(sString), "'", "''")
End Function
Set db = server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("db.mdb")
SQL = "SELECT anv FROM members WHERE anv = '" & username & "'"
Set rs = db.Execute(SQL)
if rs.EOF or rs.BOF then
SQL = "INSERT INTO members (anv,pass,email,hemsida,bild,namn,presentation) VALUES ('" & SQLEncode(request.Form("username")) & "', '" & SQLEncode(request.Form("password")) & "', '" & SQLEncode(request.Form("namn")) & "', '" & SQLEncode(request.Form("email")) & "', '" & SQLEncode(request.Form("hemsida")) & "', '" & SQLEncode(request.Form("bild")) & "', '" & SQLEncode(request.Form("presentation")) & "')"
db.Execute(SQL)
Response.Redirect("klart.asp")
else
Response.write "Upptaget!"
end if
end if
%>
<html>
<form name="frmRegister" method="post" action="register.asp?action=register">
Användarnamn:
<br>
<input type="text" name="username">
<br>
Lösenord:
<br>
<input type="password" name="password">
<br>
Namn:
<br>
<input type="text" name="namn">
<br>
E-mail:
<br>
<input type="text" name="email">
<br>
Hemsida:
<br>
<input type="text" name="hemsida" value="http://">
<br>
Bild:
<br>
<input type="text" name="bild">
<br>
Presentation:
<br>
<textarea name="presentation" cols="45" rows="7"></textarea>
<br>
<input type="submit" value="Registrera">
</form>
</html>
Du sätter aldrig variabeln username innan du försöker använda den i SQL-frågan.
Function SQLEncode(ByVal sString)
SQLEncode = Replace(trim(sString), "'", "''")
End Function
[b]username = SQLEncode(Request.Form("username"))[/b]
Set db = server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("db.mdb")
SQL = "SELECT anv FROM members WHERE anv = '" & username & "'"
mvh