Har skapat en inloggningssida nu men får den inte att fungera, kanske är den helt åt helvete. Men det tror jag inte, den kommer aldrig till while-loopen och inga värden sätts in i db_pass tex.
Någon som vet vad felet är?
<%@ Language=JavaScript %>
<%
var Anv = Request("user");
var Pass = Request("pass");
var conn = Server.CreateObject("ADODB.Connection");
conn.open = "Driver={Microsoft Access Driver (*.mdb)};dbq=c:/inetpub/wwwroot/test/user.mdb";
var strSQL = "SELECT * FROM User WHERE User = '+Anv+'";
rsMedlemmar = conn.Execute(strSQL);
while(rsMedlemmar && !rsMedlemmar.EOF)
{
var db_pass = rsMedlemmar("Password");
var db_user = rsMedlemmar("User");
if(Anv == db_user)
{
if(Pass == db_pass)
{
Response.Redirect("index.html");
}
}
else
{
Response.Redirect("default.asp");
}
rsMedlemmar.MoveNext();
}
%>
Du kan inte använda Javascript i ASP, däremot JScript:
<%@ Language=JScript %>
Att det inte fungerar med replace på Anv beror på att det är ett objekt av type IStringList, inte en sträng. Request.Form och Request.Querystring returnerar alltid en IStringList. Dessutom bör du inte använda Request(), utan specificera varifrån du vill hämta värdet.
Så här plockar du ut den första strängen ur objekten:
var Anv = Request.Form("user")(1);
var Pass = Request.Form("pass")(1);
Nu kan du använda Eriks kod, med den lilla modifieringen att den ersätter apostroferna med dubbla apostrofer istället för att ersätta apostroferna med apostrofer:
var strSQL = "SELECT * FROM User WHERE User = '"+Anv.replace(/'/g, "''")+"'";
Nu är Anv och Pass strängar, så nu ska jämförelsen fungera också.
Varför loopar du igenom recordsetet? Det kan väl inte finnas flera användare med samma användarnamn?
Glöm inte att du måste stänga recordsetet och databaskopplingen innan du anropar redirect.
Tackar, fungerde perfekt nu att logga in om jag anger rätt user och password. Och om jag anger rätt User men fel pass så skickas den tillbaka till inloggningsrutan. Men skriver jag däremot fel användarnamn så får jag följande felmeddelande.
Feltyp:
ADODB.Field (0x800A0BCD)
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
/check.asp, line 15
<%@ Language=JScript %>
<%
var Anv = Request.Form("user")(1);
var Pass = Request.Form("pass")(1);
var conn = Server.CreateObject("ADODB.Connection");
conn.open = "Driver={Microsoft Access Driver (*.mdb)};dbq=c:/inetpub/wwwroot/test/user.mdb";
var strSQL = "SELECT * FROM User WHERE User = '"+Anv.replace(/'/g, "''")+"'";
rsLogin = conn.Execute(strSQL);
var db_pass = rsLogin("Password");
var db_user = rsLogin("User");
if(Anv == db_user && Pass == db_pass)
{
rsLogin.Close();
Response.Redirect("index.html");
}
else
{ rsLogin.Close();
Response.Redirect("default.asp");
}
%>