webForumDet fria alternativet

Fel i SQL-satsen?(ASP, Javascript)

ASPur ASP

6 svar · 318 visningar · startad av Frella

Medlem sedan feb. 200524 inlägg
Frågan#1

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();
}
%>
Medlem sedan maj 200010 687 inlägg
#2

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.

Medlem sedan feb. 200524 inlägg
#3

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.

Medlem sedan juni 2004533 inlägg
#4

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.

Medlem sedan feb. 200524 inlägg
#5

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");
}
%>
Medlem sedan feb. 200524 inlägg
#6

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.

Medlem sedan juni 200032 967 inlägg
#7

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.

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