webForumDet fria alternativet

Sql Update, Syntaxfel

7 svar · 211 visningar · startad av Harback

HarbackMedlem sedan juni 2001206 inlägg
#1

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
#2

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
#3

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
#4

Jo, det går väl bra att göra således.

------------------
essentitia preter non sans multiplicandum

HarbackMedlem sedan juni 2001206 inlägg
#5

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
#6

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
#7

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
#8

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

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