FrellaMedlem sedan feb. 200524 inlägg
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();
}
%>
Erik JuhlinMedlem sedan maj 20007 625 inlägg
Det är nog så här du menar:
var strSQL = "SELECT * FROM User WHERE User = '"+Anv+"'";
Eller ännu hellre:
var strSQL = "SELECT * FROM User WHERE User = '"+Anv.replace(/\'/g, "'")+"'";
Tror det ska funka. Är inte helt säker på hur JScript funkar i ASP.
FrellaMedlem sedan feb. 200524 inlägg
Den första satsen som du gav blir precis som innan, den verkar inte få in något så då omdirigerar den till index.html.
Den andra satsen frå jag error på, med objektet stöds inte.
GuffaMedlem sedan juni 2004533 inlägg
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.
FrellaMedlem sedan feb. 200524 inlägg
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");
}
%>
FrellaMedlem sedan feb. 200524 inlägg
Nu fick jag till det, jag var tvungen att ha med while-loopen för att det skulle fungera.
Tack för övrig hjälp.
@ndersMedlem sedan juni 200026 914 inlägg
nej, du ska inte ha med while-loopen.
Lägg det i en if-sats istället, där du kollar om recordsetet är EOF.