Just nu i M3-nätverket
Gå till innehåll

Behöver hjälp med inloggning/lösenordsskydd och koppling till databaser!


levva

Rekommendera Poster

Hej!

 

Jag vill att man ska logga in på min sida genom att ange användarnnamn och lösenord. Jag har läst spaltmeter med tips och ideér hur man lösenordsskyddar sina sidor, men jag får det inte att funka. Så här har jag gjort:

 

Först har jag skapat en databas i access med följande fält. Databasen heter userid.mdb (tabellen heter login) och ligger i en katalog som heter fpdb på webbhotellet.

 

ID | Räknare

User | Text

Losen | Text

 

Sedan har jag på min index sida lagt in följande formulär:

 

<FORM method="POST" action="confirm.asp" name="formular">

Användarnamn : <INPUT type="text" name="Anv"><BR>

Lösenord : <INPUT type="text" name="Passwd"><BR>

<INPUT type="submit" value="Logga in" name="Skicka">

</FORM>

 

Därefter har jag skapat en fil som heter confirm.asp. Den

kollar användarnamn och lösenord och ser ut så här:

 

<%

 

Dim RS, Conn, SQL, Anv, Passwd

 

' ** Hämtar det inskrivna : **

 

Anv = Replace(Trim(Request.Form("Anv")),"'","")

 

Passwd = Replace(Trim(Request.Form("Passwd")),"'","")

 

' ** KLART **

 

 

 

' *** Kollar så att det finns text i variablerna : ***

 

If Anv = "" Or Passwd = "" Then

 

Response.Redirect("index.htm")

 

End If

 

' *** KLART ***

 

 

 

Set Conn = Server.CreateObject("ADODB.Connection")

 

Set RS = Server.CreateObject("ADODB.RecordSet")

 

Conn.Open "DSN=kopplingsnamn"

 

SQL = "SELECT * FROM tabellnamn WHERE User = '" & Anv & "' AND Losen = '" & Passwd & "'"

 

' *** Öppnar upp databasen : ***

 

RS.Open SQL, Conn, 0, 1

 

 

 

' ** Kollar så att rätt info är inskriven, annars... ***

 

If RS.EOF = TRUE Then ' *** OM MAN SKREV FEL : ***

 

RS.Close

 

Conn.Close

 

Response.Redirect("fellogin.htm")

 

Else ' *** OM MAN SKREV RÄTT : ***

 

 

 

' *** KOLLAR SÅ ATT VERSALER/GEMENER STÄMMER OCKSÅ : ***

 

If Anv = RS("User") AND Passwd = RS("Losen") Then

 

Session.Timeout = 20

 

Session("UserId") = RS("ID")

 

RS.Close

 

Conn.Close

 

Response.Redirect("inloggad.htm")

 

Else ' *** Om det var fel : ***

 

RS.Close

 

Conn.Close

 

Response.Redirect("fellogin.htm")

 

End IF

 

 

End If

 

%>

 

 

 

 

Sedan har jag skapat en fil som heter kolla.shtml och den ser ut så här

<% If Session("UserId") = "" Then %>

 

<% Response.Redirect("fellogin.htm") %>

 

<% End If %>

 

 

Överst på varje sida som är lösenordsskyddad ligger följande include fil:

 

<!--#Include File="kolla.shtml"-->

 

Har jag gjort något fel?

 

Det jag tror att jag missat det är att göra kopplingen till databasen. Var gör man det och vart ska det ligga. Ska det ligga i någon speciell fil, något speciellt ställe i koden, ska filen heta något speciellt. Vad skriver man för att göra kopplingen? Jag har ingen aning. Vore hemskt tacksam för hjälp. Har helt kört fast.

 

Tack på förhand!

 

Mikael

 

Länk till kommentar
Dela på andra webbplatser

  • Svars 55
  • Skapad
  • Senaste svar
Anjuna Moon

Ändra raden

Conn.Open "DSN=kopplingsnamn"

till

Driver={Microsoft Access Driver (*.mdb)};Dbq=userid.mdb

 

Se till att du har rätt sökväg till userid.mdb

 

Länk till kommentar
Dela på andra webbplatser

Hej!

 

Jag har nu ändrat det till följande (skrivet på en rad):

 

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=\fpdb\userid.mdb"

 

men jag får det inte att fungera. Vet inte om jag anget fel sökväg.

 

I rooten på webbhotellet ligger en mapp som heter fpdb och i den ligger en fil som heter userid.mdb

 

Är det något annat som jag har missat?

 

M.v.h.

 

Mikael

 

 

 

Länk till kommentar
Dela på andra webbplatser

Testa med mapPath istället:

 

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq="

& Server.MapPath("fpdb\userid.mdb")

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

 

Länk till kommentar
Dela på andra webbplatser

Har nu ändrat till:

 

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&amp; Server.MapPath("fpdb\userid.mdb")

 

men då får jag upp följande fel

 

HTTP 500 - Internt serverfel Internet Explorer

Ett problem uppstod med sidan du försöker nå och den kan inte visas. (syftar på sidan confirm.asp)

 

Vad är det som är fel?

 

Länk till kommentar
Dela på andra webbplatser

För det första ska det vara ett &-tecken och inte & amp;, alltså:

 

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq="& Server.MapPath("fpdb\userid.mdb")

 

Det ska dessutom stå på en och samma rad.

 

För att se detaljerade felmeddelanden så måste du bockat ur Visa egna http-felmeddelanden i Internet Explorer som du hittar under Verktyg -> Internet-alternativ -> Avancerat (ganska långt ner i listan).

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

[inlägget ändrat 2004-07-25 11:45:17 av OZn]

Länk till kommentar
Dela på andra webbplatser

Hej igen!

 

Nu slipper jag felmeddelandet, men jag blir inte inloggad.

 

Vet inte om jag har angett fel sidor i confirm.asp

 

index.htm är den sida där du fyller i inloggningsformuläret

och inloggad.htm är den sida du kommer till, borde kanske ha en sida där det står fel användarnamn och eller lösen. Går det bra att sidorna är placerade i rooten? Eller måste någon sida ligga där databasen ligger?

 

Fattar inte riktigt vilka sidor som ska stå var i confirm.asp. Vet inte riktigt vad koden betyder.

 

M.v.h.

 

Mikael

 

Länk till kommentar
Dela på andra webbplatser

Så som koden är skriven så ska dina redirect-sidor ligga i samma mapp (eller rooten) som confirm.asp.

 

Förslagsvis skriver du ut någon text nu när du felsöker istället för att köra Response.Redirect.

 

Exempelvis kan du ersätta:

Response.Redirect("inloggad.htm")

 

med:

Response.Write("Du är inloggad")

 

Sen ersätter redirect-en när man inte är inloggad (tomt recordset)

Response.Redirect("fellogin.htm")

 

med:

Response.Write("Du har angivit fel användarnamn och/eller lösenord")

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

 

Länk till kommentar
Dela på andra webbplatser

Hej igen!

 

Kan du förklara/ändra i koden. Jag har fått hjärnsläpp totalt! En har jag ändrat!

 

<%

 

Dim RS, Conn, SQL, Anv, Passwd

 

 

 

' ** Hämtar det inskrivna : **

 

Anv = Replace(Trim(Request.Form("Anv")),"'","")

 

Passwd = Replace(Trim(Request.Form("Passwd")),"'","")

 

' ** KLART **

 

 

 

' *** Kollar så att det finns text i variablerna : ***

 

If Anv = "" Or Passwd = "" Then

 

Response.Redirect("index.htm")

 

End If

 

' *** KLART ***

 

 

 

Set Conn = Server.CreateObject("ADODB.Connection")

 

Set RS = Server.CreateObject("ADODB.RecordSet")

 

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("fpdb\userid.mdb")

 

SQL = "SELECT * FROM tabellnamn WHERE User = '" & Anv & "' AND Losen = '" & Passwd & "'"

 

' *** Öppnar upp databasen : ***

 

RS.Open SQL, Conn, 0, 1

 

 

 

' ** Kollar så att rätt info är inskriven, annars... ***

 

If RS.EOF = TRUE Then ' *** OM MAN SKREV FEL : ***

 

RS.Close

 

Conn.Close

 

Response.Redirect("index.htm")

 

Else ' *** OM MAN SKREV RÄTT : ***

 

 

 

' *** KOLLAR SÅ ATT VERSALER/GEMENER STÄMMER OCKSÅ : ***

 

If Anv = RS("User") AND Passwd = RS("Losen") Then

 

Session.Timeout = 20

 

Session("UserId") = RS("ID")

 

RS.Close

 

Conn.Close

 

Response.Write("Du är inloggad")

 

Else ' *** Om det var fel : ***

 

RS.Close

 

Conn.Close

 

Response.Redirect("index.htm")

 

End IF

 

 

 

End If

 

%>

 

 

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Om mappen fpdn ligger i roten så ska raden se ut så här:

 

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("/fpdb/userid.mdb")

 

(du hade använd backslash istället för slash. Backslash (\) används för "hårda" sökvägar och (/) för virtuella och det är just en virtuell sökväg som mappath mappar om till en hård.)

[inlägget ändrat 2004-07-25 12:31:25 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Om din egen kod är rätt eller fel har jag tyvärr inte tid att kolla men nu har jag ersatt alla redirect med ett relevant felmeddelande.

 

[log]<%

 

Dim RS, Conn, SQL, Anv, Passwd

 

 

 

' ** Hämtar det inskrivna : **

 

Anv = Replace(Trim(Request.Form("Anv")),"'","")

 

Passwd = Replace(Trim(Request.Form("Passwd")),"'","")

 

' ** KLART **

 

 

 

' *** Kollar så att det finns text i variablerna : ***

 

If Anv = "" Or Passwd = "" Then

 

'Response.Redirect("index.htm")

Response.Write("Något av fälten var tomma. Fyll i båda")

 

End If

 

' *** KLART ***

 

 

 

Set Conn = Server.CreateObject("ADODB.Connection")

 

Set RS = Server.CreateObject("ADODB.RecordSet")

 

Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("fpdb\userid.mdb")

 

SQL = "SELECT * FROM tabellnamn WHERE User = '" & Anv & "' AND Losen = '" & Passwd & "'"

 

' *** Öppnar upp databasen : ***

 

RS.Open SQL, Conn, 0, 1

 

 

 

' ** Kollar så att rätt info är inskriven, annars... ***

 

If RS.EOF = TRUE Then ' *** OM MAN SKREV FEL : ***

 

RS.Close

 

Conn.Close

'Response.Redirect("index.htm")

Response.Write("Fel användarnamn och/eller lösenord")

 

Else ' *** OM MAN SKREV RÄTT : ***

 

 

 

' *** KOLLAR SÅ ATT VERSALER/GEMENER STÄMMER OCKSÅ : ***

 

If Anv = RS("User") AND Passwd = RS("Losen") Then

 

Session.Timeout = 20

 

Session("UserId") = RS("ID")

 

RS.Close

 

Conn.Close

 

Response.Write("Du är inloggad")

 

Else ' *** Om det var fel : ***

 

RS.Close

 

Conn.Close

'Response.Redirect("index.htm")

Response.Write("Fel användarnamn och/eller lösenord")

 

End IF

 

 

 

End If

 

%>[/log]

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

[inlägget ändrat 2004-07-25 12:44:30 av OZn]

Länk till kommentar
Dela på andra webbplatser

Helt rätt Anjuna Moon, men i det här läget var det enklare med en "hård" sökväg. Jag tror dessutom att vi kommit förbi den biten...

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

 

Länk till kommentar
Dela på andra webbplatser

Hej igen!

 

Tack för att ni försöker att hjälpa mig.

 

Följande felmeddelande kommer upp.

 

Något av fälten var tomma. Fyll i båda

Microsoft VBScript runtime error '800a01a8'

 

Object required: ''

 

/confirm.asp, line 34

 

Jag börjar fundera om fälten i databasen heter fel i förhållande till confirm.asp

 

För i confirm.asp står det

 

' ** Hämtar det inskrivna : **

 

Anv = Replace(Trim(Request.Form("Anv")),"'","")

 

Passwd = Replace(Trim(Request.Form("Passwd")),"'","")

 

' ** KLART **

 

men fälten i databasen heter

 

ID | Räknare

User | Text

Losen | Text

 

 

 

M.v.h.

 

Mikael

 

 

[inlägget ändrat 2004-07-25 13:03:26 av levva]

Länk till kommentar
Dela på andra webbplatser

Eftersom du har Set Conn = Server.CreateObject("ADODB.Connection") måste du ändra till:

 

Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("fpdb\userid.mdb")

 

Sen är det alltid bra om du postar raden som felmeddelandet pekar på.

 

Fälten i databasen jämför du i SQL-strängen (SELECT * FROM tabellnamn WHERE User = blabla AND Losen = blabla") Namnen Anv och Passwd är bara namnen på dina inputfält så allt ser ut att vara i sin ordning.

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

[inlägget ändrat 2004-07-25 13:19:24 av OZn]

Länk till kommentar
Dela på andra webbplatser

Följande fel kommer i stället:

 

Något av fälten var tomma. Fyll i båda

Microsoft OLE DB Provider for ODBC Drivers error '80040e37'

 

[Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot find the input table or query 'tabellnamn'. Make sure it exists and that its name is spelled correctly.

 

/confirm.asp, line 40

 

Rad 40 ser ut enligt följande:

 

RS.Open SQL, Conn, 0, 1

 

M.v.h.

 

Mikael

 

 

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Vad heter din tabell i databasen?

I det här fallet ska den alltså heta Tabellnamn.

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

[inlägget ändrat 2004-07-25 13:28:15 av OZn]

Länk till kommentar
Dela på andra webbplatser

Jo men öppna userid.mdb och titta vad tabellen heter, alltså där du har ID, User, Losen

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

 

Länk till kommentar
Dela på andra webbplatser

Då ersätter du följande rad:

 

SQL = "SELECT * FROM tabellnamn WHERE User = '" & Anv & "' AND Losen = '" & Passwd & "'"

 

Med:

SQL = "SELECT * FROM Login WHERE User = '" & Anv & "' AND Losen = '" & Passwd & "'"

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

 

Länk till kommentar
Dela på andra webbplatser

Det börjar nog närma sig en lösning

 

Följande fel kommer upp nu

 

Något av fälten var tomma. Fyll i bådaFel användarnamn och/eller lösenord

 

M.v.h.

 

Mikael

 

Länk till kommentar
Dela på andra webbplatser

Skriver du in något i login-fälten?

 

Bättre om du gör en koll med Len istället för ""

 

Ersätt:

If Anv = "" Or Passwd = "" Then

 

med:

If Not Len(Anv) > 0 Or Not Len(Passwd) > 0 Then

 

Sen undrar jag om du skriver in ett användarnamn och lösenord som finns i databasen?

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

 

Länk till kommentar
Dela på andra webbplatser

Japp jag skriver något i loginfälten. Japp de finns i databasen.

 

Har ändrat till Len istället.

 

Men får upp samma felmeddelande som innan, d.v.s.

 

Något av fälten var tomma. Fyll i bådaFel användarnamn och/eller lösenord

 

Det verkade ju så lätt att skapa en inloggningshistoria, men icke sa Nicke! Önskar att skolorna vore lite mer förklarande.

[inlägget ändrat 2004-07-25 14:00:02 av levva]

Länk till kommentar
Dela på andra webbplatser

Jag kanske är blind men kolla så det som du skriver i fälten postas som de ska:

 

Lägg till:

Response.Write("Användarnamn: " & Anv & "<br>")

Response.Write("Lösenord: " & Passwd)

 

Efter raderna:

Anv = Replace(Trim(Request.Form("Anv")),"'","")

Passwd = Replace(Trim(Request.Form("Passwd")),"'","")

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

[inlägget ändrat 2004-07-25 14:08:30 av OZn]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...