webForumDet fria alternativet

update efter update?

43 svar · 478 visningar · startad av crisse6 · sida 2 av 3

crisse6Medlem sedan dec. 20002 526 inlägg
#21

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?

MattiasWMedlem sedan jan. 2000144 inlägg
#22

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)
crisse6Medlem sedan dec. 20002 526 inlägg
#23

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 :(

MattiasWMedlem sedan jan. 2000144 inlägg
#24

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.

crisse6Medlem sedan dec. 20002 526 inlägg
#25

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 ;)

crisse6Medlem sedan dec. 20002 526 inlägg
#26

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
%>
MattiasWMedlem sedan jan. 2000144 inlägg
#27

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") %>
MattiasWMedlem sedan jan. 2000144 inlägg
#28

Prova Session i stället för session. Stor bokstav alltså.

crisse6Medlem sedan dec. 20002 526 inlägg
#29

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)
MattiasWMedlem sedan jan. 2000144 inlägg
#30

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.

crisse6Medlem sedan dec. 20002 526 inlägg
#31

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]

MattiasWMedlem sedan jan. 2000144 inlägg
#32

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

crisse6Medlem sedan dec. 20002 526 inlägg
#33

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?

MattiasWMedlem sedan jan. 2000144 inlägg
#34

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.

crisse6Medlem sedan dec. 20002 526 inlägg
#35

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 ;)

LarsGMedlem sedan dec. 200012 464 inlägg
#36

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

crisse6Medlem sedan dec. 20002 526 inlägg
#37

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?

LarsGMedlem sedan dec. 200012 464 inlägg
#38

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

crisse6Medlem sedan dec. 20002 526 inlägg
#39

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!

LarsGMedlem sedan dec. 200012 464 inlägg
#40

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

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