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
solbulleMedlem sedan mars 20015 287 inlägg 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?
@ndersMedlem sedan juni 200032 969 inlägg
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å?
@ndersMedlem sedan juni 200032 969 inlägg 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.
Jesper TMedlem sedan nov. 20017 144 inlägg
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.
solbulleMedlem sedan mars 20015 287 inlägg Ä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") & "')"
solbulleMedlem sedan mars 20015 287 inlägg username = SQLEncode(request.form("username"))
Du kan ju köra funktionen direkt i din sqlfråga också.
Åh herregud!
Nej det gör jag ju inte :r x(
Så hur skall då koden se ut för det?
Ursäkta att jag frågar er om koden och allt det där.
Men jag kan ju inget om sånt här :)
solbulleMedlem sedan mars 20015 287 inlägg 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
@ndersMedlem sedan juni 200032 969 inlägg
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>
@ndersMedlem sedan juni 200032 969 inlägg 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