HarbackMedlem sedan juni 2001206 inlägg Hej.
Jag håller på att göra ett inloggningssystem men jag ett problem. Jag har gjort ett fält i tabellen users i Access som heter fldCount där det ska lagras hur många gånger användaren loggat in. Men jag får inte uppdateringen riktigt att fungera. Det blir ett Syntax-error på Updaten.
Nägon som kan hitta felet?
<%
strName = Request.Form("Name")
strPass = Request.Form("Pass")
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("databas.mdb")
strSQL = "SELECT * FROM tblUsers WHERE fldUser = '" & strName & "' AND fldPass = '" & strPass & "'"
Set objRS = objConn.Execute(strSQL)
If objRS.BOF = True OR objRS.EOF Then
Response.Write "Du har angivit ett felaktigt användarnamn eller lösenord!"
objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing
Else
If objRS("fldUser") = strName And objRS("fldPass") = strPass Then
Session("user") = objRS("fldUser")
Session("pass") = objRS("fldPass")
intCount = objRS("fldCount") -- 1
strSQL = "UPDATE tblUsers SET fldCount = " & intCount & ", WHERE fldUser= '" & strName & "' AND fldPass= '" & strPass & "'"
Set objRS = objConn.Execute(strSQL)
objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing
Response.Redirect "menu.asp"
End If
End If %>
------------------
MVH
Harback
LarsGMedlem sedan dec. 200012 464 inlägg Det skall inte vara något komma framför where i din update.
= " & intCount & " WHERE fldUser
Du kan förenkla din kod väldigt mycket
<%
strName = Request.Form("Name")
strPass = Request.Form("Pass")
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("databas.mdb")
sql = "UPDATE tblUsers " & _
" SET fldCount = fldCount + 1 " & _
" WHERE fldUser= '" & strName & "' &_
" AND fldPass= '" & strPass & "'"
objConn.execute sql,rowsAffected,128
if rowsAffected = 0 then
Response.Write "Du har angivit ett felaktigt användarnamn eller lösenord!"
end if
objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing
Response.Redirect "menu.asp"
%>
------------------
essentitia preter non sans multiplicandum
HarbackMedlem sedan juni 2001206 inlägg Tack så mycket för det snabba svaret. Det fungerade båda två lösningarna men jag har en fråga angående din lösning.
Är följande exempel (med sessioner) säkert för senare validering av besökarna på andra sidor?
<%
strName = Request.Form("Name")
strPass = Request.Form("Pass")
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("databas.mdb")
strSQL = "UPDATE tblUsers " & _
" SET fldCount = fldCount + 1 " & _
" WHERE fldUser= '" & strName & "' " & _
" AND fldPass= '" & strPass & "'"
objConn.execute strsql,rowsAffected,128
if rowsAffected = 0 then
Response.Write "Du har angivit ett felaktigt användarnamn eller lösenord!"
else
Session("user") = strName
Session("pass") = strPass
objConn.Close
Set objConn = Nothing
Response.Redirect "menu.asp"
End If
%>
------------------
MVH
Harback
[Redigerat av Harback den 09 aug 2001]
LarsGMedlem sedan dec. 200012 464 inlägg Jo, det går väl bra att göra således.
------------------
essentitia preter non sans multiplicandum
HarbackMedlem sedan juni 2001206 inlägg Hej igen.
Går det på något sätt att lägga till i din kod att om man har nummer 1 i fältet fldAdmin så skickas man vidare till en annan sida för administratörer? Då behöver man göra en ytterliggare SQL-sats med Select va? Eller går det att lösa på något bättre sätt?
------------------
MVH
Harback
LarsGMedlem sedan dec. 200012 464 inlägg Visst, om du vill hämta någon information i samband med så är det väl bäst att utgå från din kod.
strName = Request.Form("Name")
strPass = Request.Form("Pass")
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("databas.mdb")
strSQL = "SELECT fldAdmin FROM tblUsers WHERE fldUser = '" & strName & "' AND fldPass = '" & strPass & "'"
Set objRS = objConn.Execute(strSQL)
If objRS.BOF = True OR objRS.EOF Then
Response.Write "Du har angivit ett felaktigt användarnamn eller lösenord!"
login = false
Else
login = true
Session("user") = strName
Session("pass") = strPass
fldAdmin = objRs("fldAdmin")
strSQL = "UPDATE tblUsers SET fldCount = fldCount + 1 WHERE fldUser= '" & strName & "' AND fldPass= '" & strPass & "'"
objConn.Execute strSQL,,128
end if
objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing
if login then
if cint(fldAdmin) = 1 then
response.redirect "admin.asp"
else
Response.Redirect "menu.asp"
end if
else
'hantering av felaktig inloggning
end if
------------------
essentitia preter non sans multiplicandum
HarbackMedlem sedan juni 2001206 inlägg Tack så mycket LarsG!
En sak till, vad betyder ,,128 execute-satsen?
objConn.Execute strSQL[b],,128[/b]
------------------
MVH
Harback
LarsGMedlem sedan dec. 200012 464 inlägg 128 innebär att man inte skapar något recordset överhuvudtaget. Om man inte anger det skapar ado ett tomt och stängt recordset när man gör execute på en fråga som inte returnerar några poster. Det blir en liten prestandafördel på det sättet, vet inte exakt hur mycket det betyder, förmodlugen ganska lite.
------------------
essentitia preter non sans multiplicandum