okej, ska testa brw´s skript lite... men vadå, ser att det brw har skapat ser lite konstig för mig som är nybörjare... man byter bara ut databas till typ users.mdb eller?
update efter update?
43 svar · 478 visningar · startad av crisse6 · sida 2 av 3
Glömde en sak.
Du har fortfarande inte ändrat i andrat.asp
Ändra
SQL = "UPDATE users SET username = '" & request.form("username") & "', password = '" & request.form("password") & "', e-post = '" & request.form("e-post") & "', namn = '" & request.form("namn") & "', efternamn = '" & request.form("efternamn") & "', mobil = '" & request.form("mobil") & "', bor = '" & request.form("bor") & "', fakta = '" & request.form("fakta") & "' WHERE username = '" & session("username") & "'"
Databas.Execute(SQL)
Till
SQL = "UPDATE users SET username = '" & request.form("username") & "', password = '" & request.form("password") & "', e-post = '" & request.form("e-post") & "', namn = '" & request.form("namn") & "', efternamn = '" & request.form("efternamn") & "', mobil = '" & request.form("mobil") & "', bor = '" & request.form("bor") & "', fakta = '" & request.form("fakta") & "' WHERE id = '" & session("id") & "'"
Databas.Execute(SQL)
men en end if måste ju finnas med :q
annars går det ej, men tycker du att det är okej om jag har idg´s skript så länge eftersom det troligen inte är några "hackers §jr" på min lilla, lilla community :)
kan du "baka" in end if i vilken del av kontroll koden den ska va? asså, nu går det bara att logga in om man är admin användare :(
Hmmm
man byter bara ut databas till typ users.mdb eller
Fel spår
scriptet använder samma tabell som din inloggning gör, du behöver inga nya databaser.
Skillnaden ligger framför allt i hur scriptet letar upp användaren i tabellen.
I ditt fall skulle det kunna se ut så här:
Nu är jag väldigt snäll. Beror på att jag jobbar hemma och känner mig lite uttråkad :)
<% '====================================================================================================================== %>
<% ' Kontrollera användarnamn, lösenord och behörighet %>
<% '====================================================================================================================== %>
<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\groda\users.mdb"
Set RecSet = Server.CreateObject("ADODB.Recordset") %>
<% Visa = "SELECT * FROM users"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic
X = FALSE
Do Until X = TRUE OR RecSet.EOF
If RecSet("Username") = Session("Username") Then
X = TRUE
Exit Do
End If
RecSet.MoveNext
Loop
If X = TRUE Then
Y = FALSE
Do Until Y = TRUE OR RecSet.EOF
If RecSet("Password") = Session("Password") Then
Y = TRUE
Exit Do
End If
RecSet.MoveNext
Loop
End If
If X = FALSE Then
Response.Write "Jag tror nog att du råkade skriva in fel användarnamn!"
ElseIf Y = FALSE Then
Response.Write "Du kan nog ha anget ett ogiltligt lösenord!"
If X = TRUE AND Y = TRUE Then
session("id") = RecSet("id")
End If
%>
Till
<% '====================================================================================================================== %>
<% ' Kontrollera användarnamn, lösenord och behörighet %>
<% '====================================================================================================================== %>
<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\groda\users.mdb"
SQLStmt = "SELECT * FROM users WHERE login = '" & Session("Username") & "' AND password = '" & Session("Password") & "'"
Set RecSet = Connection.Execute(SQLStmt)
If RecSet.EOF Then
Response.Write "Jag tror nog att du råkade skriva in fel användarnamn eller lösenord!"
Else
session("id") = RecSet("id")
Men som sagt. Gör en sak i taget.
tänkte på en sak, när man ska skriva in sitt lösen och username i formuläret, så är det method post och action login.asp, det kanske är in login.asp som vi ska fibbla lite med sessioner...???? här är den koden:
login.asp:
<% Response.Buffer = TRUE %>
<!-- #include file="adovbs.inc" -->
<html>
<body bgcolor="#e16745" text="white" link="white" vlink="black" alink="red">
<title>Inloggning och användardatabas</title><font face="Verdana" size="2" color="red"><b>
<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\groda\users.mdb"
Set RecSet = Server.CreateObject("ADODB.Recordset") %>
<% '====================================================================================================================== %>
<% ' Kontrollera användarnamn, lösenord och behörighet %>
<% '====================================================================================================================== %>
<% Visa = "SELECT * FROM users"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic
X = FALSE
Do Until X = TRUE OR RecSet.EOF
If RecSet("Username") = Request.Form("Username") Then
X = TRUE
Exit Do
End If
RecSet.MoveNext
Loop
If X = TRUE Then
Y = FALSE
Do Until Y = TRUE OR RecSet.EOF
If RecSet("Password") = Request.Form("password") Then
Y = TRUE
Exit Do
End If
RecSet.MoveNext
Loop
End If
If X = FALSE Then
Response.Write "antingen skriver du in rätt användarnamn eller så sluta försök att hacka dig in!"
ElseIf Y = FALSE Then
Response.Write "fel lösenord, nolla!"
End If
If X = TRUE AND Y = TRUE Then
Session("username") = Request.Form("username")
Session("password") = Request.Form("password") %>
<% '====================================================================================================================== %>
<% ' Script för inloggade med A-access %>
<% '====================================================================================================================== %>
<% If RecSet("Access") = "A" Then
Session("access") = "A" %>
<font size="1" face="verdana, arial">
Du är nu inloggad med A-access! Som ger tillgång till ändringar m.m...<p>
<ul>
<li><a href="admin.asp?alt=createuser">Skapa ny användare</a>
<li><a href="admin.asp?alt=viewusers">Lista användare</a>
<li><a href="a-normal.asp">Gå till en vanlig sida</a>
<li><a href="logout.asp">Logga ut</a>
<li><a href="nyhet.asp">Ny nyhet</a>
<li><a href="raderaperson.asp">Radera medlem</a>
</ul>
</font>
<% End If %>
<% '====================================================================================================================== %>
<% ' Script för inloggade med B-access %>
<% '====================================================================================================================== %>
<% If RecSet("Access") = "B" Then
Session("access") = "B" %>
<% Response.Redirect "start.asp" %>
<% '=Session("Password") %>
<% '=Session("Username") %>
Du är nu inloggad som användare!
<% Else %>
<% End If
End If
RecSet.Close
Connect.Close %>
</font></b></html>
mkt kod igen ;)
fick detta felmeddelande vid test av din kod:
Kompileringsfel i Microsoft VBScript error '800a03ea'
Syntaxfel
/groda/checkb2.inc, line 5
Else
^
och då använde jag denna kod:(obs! denna kod ligger i en inkluderingsfil som kolla om man har rätt lösen osv..)
<% '====================================================================================================================== %>
<% ' Kontrollera användarnamn, lösenord och behörighet %>
<% '====================================================================================================================== %>
<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\groda\users.mdb"
SQLStmt = "SELECT * FROM users WHERE login = '" & Session("Username") & "' AND password = '" & Session("Password") & "'"
Set RecSet = Connection.Execute(SQLStmt)
If RecSet.EOF Then
Response.Write "Jag tror nog att du råkade skriva in fel användarnamn eller lösenord!"
Else
session("id") = RecSet("id")
End If
%>
Eftersom du sa inloggningen var en inc-fil så är den förmodligen en del av en asp-sida.
Inc-filer kan sluta mitt i en if-sats.
När sedan asp sidan är klar måste dock if-satsen vara sluten med End if.
Man måste se det i sin helhet.
Blev lite förbryllad när du visade hela loginsidan.
Den inc-filen som du visade är ju inte med vid inloggningen. Här gäller andra regler.
Lösning:
Byt ut
If X = TRUE AND Y = TRUE Then
Session("username") = Request.Form("username")
Session("password") = Request.Form("password") %>
Till
If X = TRUE AND Y = TRUE Then
Session("id") = RecSet("id")
Session("username") = Request.Form("username")
Session("password") = Request.Form("password") %>
Prova Session i stället för session. Stor bokstav alltså.
en bit på väg, nu går det att logga in som vanligt, behöver ingen querystring vid hämtning av ens info, samt inga felmeddelanden ända tills andrat.asp där jag får detta meddelande:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i UPDATE-uttryck.
/groda/andrat.asp, line 182
och så här ser update satsen ut:
SQL = "UPDATE users SET username = '" & request.form("username") & "', password = '" & request.form("password") & "', e-post = '" & request.form("e-post") & "', namn = '" & request.form("namn") & "', efternamn = '" & request.form("efternamn") & "', mobil = '" & request.form("mobil") & "', bor = '" & request.form("bor") & "', fakta = '" & request.form("fakta") & "' WHERE id = '" & session("id") & "'"
Databas.Execute(SQL)
Ett tips. Skriv ut SQL'en till sidan före du anropar databasen.
Typ:
Response.Write "SQL:" & SQL
Kan bero på ett knastecken i formuläret. Om man i någon av fälten knappar in ett tecken som krockar med SQL'en du skickar till databasen så kommer du få ett felmeddelande.
Om du såg i brw's inloggning
[kod]FixaTecken(Request.Form("login")) ]/kod]
så anropar han FixaTecken med inmatningsfältetn från formulären som parameter. Detta för att filtrera bort ev. knastecken från användaren.
Jag tror FixaTecken funktionen finns att hämta här på wF.
jag fattar inte ngt av vad du snackar om... :( alltså hur ska jag lägga min kära update kod i mitt skript?
[kod]
<%
Set Databas = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("users.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & MdbFilePath & ";"
SQL = "UPDATE users SET username = '" & request.form("username") & "', password = '" & request.form("password") & "', e-post = '" & request.form("e-post") & "', namn = '" & request.form("namn") & "', efternamn = '" & request.form("efternamn") & "', mobil = '" & request.form("mobil") & "', bor = '" & request.form("bor") & "', fakta = '" & request.form("fakta") & "' WHERE id = '" & session("id") & "'"
Databas.Execute(SQL)
%>
[kod]
Eftersom det är SQL'en som är fel brukar det hjälpa en om man får se SQL'en i klartext.
Om det tex. är fel i en where sats eller liknande.
Eftersom du bygger upp SQL'en med hjälp av en hel del olika ihopklipp skulle man vilja se hur SQL'en ser ut innan den skickas till Databasen. Skriv då ut den på sidan istället för att anropa databsen. Då måste kanske oxå ta bort ev redirects som skickar dig vidare. Annars ser man ju inte SQL'en
Databasen rapporterar bara att SQL'en var fel. Det är omöjligt att se felet om man inte först får se SQL'en i klartext.
Hajjaru
jaja, detta har jag gjort förrut (tror jag :e )
så här blev mitt resultat:
SQL:UPDATE users SET username = 'crisse6', password = '913288', e-post = 'crisse6@hotmail.com', namn = 'Cristoffer', efternamn = 'Övergaard', mobil = '0704450087', bor = 'Billdal', fakta = 'mm…..' WHERE id = '6'
ja, det var vad den skrev ut med Response.Write grejen... ser du ngt fel?
LarsG skrev
Att använda e-post som kolumnnamn är inget bra då bindestreck betyder minus i SQL. Jag skulle nog döpa om den kolumnen.
Låta bli att uppdatera e-postfältet.
Dvs. ta bort det från SQL'en och prova på nytt.
Om det gick bra får du byta namn på fältet.
nä, nu börjar jag bli trött på denna j*kla kod! inget illa mot någon, jag är bara lite arg på UPDATE-satser eftersom jag hade ett UPDATe-problem för några veckor sedan x(
iaf, över till koden, det blev tyvärr ingen skillnad vid borttagning av e-post men jag tror det blev ett nytt fel meddelande vid borttagning, är inte säker men nu får jag detta meddelande:
SQL:UPDATE users SET Username = 'crisse6', Password = '913288', Namn = 'Cristoffer', Efternamn = 'Övergaard', Mobil = '0704450087', Bor = 'Billdal', Fakta = 'mm' WHERE id = '6'
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][Drivrutin för ODBC Microsoft Access] Typblandningsfel i villkorsuttryck.
/groda/andrat.asp, line 183
denna kod gäller för det meddelandet:
<%
Set Databas = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("users.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & MdbFilePath & ";"
SQL = "UPDATE users SET Username = '" & request.form("Username") & "', Password = '" & request.form("Password") & "', Namn = '" & request.form("Namn") & "', Efternamn = '" & request.form("Efternamn") & "', Mobil = '" & request.form("Mobil") & "', Bor = '" & request.form("Bor") & "', Fakta = '" & request.form("Fakta") & "' WHERE id = '" & session("id") & "'"
Response.Write "SQL:" & SQL
Databas.Execute(SQL)
%>
hoppas det hjälper något för er experter ;)
Din kolumn ID är väl av typen tal. I så fall skall man inte ha '' vid det värdet, dvs
SQL = "UPDATE users SET Username = '" & request.form("Username") & "', Password = '" & request.form("Password") & "', Namn = '" & request.form("Namn") & "', Efternamn = '" & request.form("Efternamn") & "', Mobil = '" & request.form("Mobil") & "', Bor = '" & request.form("Bor") & "', Fakta = '" & request.form("Fakta") & "' WHERE id = " & session("id")
------------------
essentitia preter non sans multiplicandum
tack för all hjälp grabbar! Nu funkar det, men jag har två frågor:
1. hur ska jag göra så att man INTE kan ta ett användarnamn som redan finns i databasen?
2. hur gör jag så att man efter ha klickat på "Ändra" knappen så kommer det upp en popup och att man sedan skickas typ till en annan sida efter man klickat Ok på rutan?
Fråga 1)
Innan du gör insert med det nya namnet så gör en select:
sqlStr = "select 1 from users where username = '" & newUserName & "'"
set Rs = conn.execute (sqlStr)
if RS.Eof then
'insert new user
else
Response.write NewUserName & " är upptaget, välj ett annat "
end if
Du kan också definiera att kolumnen username skall vara unik.
Fråga 2 har väl inte så mycket med ASP att skaffa, så den hör väl mer hemma i Javaskriptforument. (Dvs jag kan inte svara på det.)
------------------
essentitia preter non sans multiplicandum
vad är det för fel nu då?:
det där med kollen av användarnamn funkar inte som det ska
andrat.asp
<%
Set Databas = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("users.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & MdbFilePath & ";"
SQL2 = "select 1 from users where username = '" & newUserName & "'"
set RsKolla = conn.execute (SQL2)
if RsKolla.Eof then
SQL = "UPDATE users SET Username = '" & request.form("Username") & "', Password = '" & request.form("Password") & "', Namn = '" & request.form("Namn") & "', Efternamn = '" & request.form("Efternamn") & "', Mobil = '" & request.form("Mobil") & "', Bor = '" & request.form("Bor") & "', Fakta = '" & request.form("Fakta") & "' WHERE id = " & session("id")
Databas.Execute(SQL)
else
Response.write NewUserName & " är upptaget, välj ett annat "
end if
%>
får ett felmeddelande om att objekt krävs!
Jag kollade inte så noga vad dina variabler hette utan jag tänkte att du skulle byta ut dom så att det passar din kod.
Så här då:
Set Databas = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("users.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ= " & MdbFilePath & ";"
SQL2 = "select 1 from users where username = '" & request.form("Username") & "'"
set RsKolla = database.execute (SQL2)
if RsKolla.Eof then
SQL = "UPDATE users SET Username = '" & request.form("Username") & "', Password = '" & request.form("Password") & "', Namn = '" & request.form("Namn") & "', Efternamn = '" & request.form("Efternamn") & "', Mobil = '" & request.form("Mobil") & "', Bor = '" & request.form("Bor") & "', Fakta = '" & request.form("Fakta") & "' WHERE id = " & session("id")
Databas.Execute(SQL)
else
Response.write request.form("Username") & " är upptaget, välj ett annat "
end if
%>
------------------
essentitia preter non sans multiplicandum