12. januar 2003 - 17:55Der er
52 kommentarer og 1 løsning
Login System..Fejl
Er der nogen der kan se en fejl i dette her? Det virker ikke. Der skal btw ikke være nogen database angivelse, jeg bruger global.
<% function fixSring(strInput) if len(strInput) > 0 then outString = replace(strInput,"'","") fixSring = outString else fixSring = strInput end if end function
if Request.ServerVariables("REQUEST_METHOD") = "POST" then Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open Application("Provider") strSQL= "SELECT * FROM users WHERE (username = '" & username & "' AND password='" & password & "');" Set rs = Conn.Execute (strSQL)
if not rs.EOF then if (username = rs("username")) then session("loginOK") = "jeps" session("username") = rs("username") session("time") = Now() end if end if
rs.Close Conn.Close Set rs = Nothing Set Conn = Nothing end if
Dit database-kald ser heller ikke helt rigtigt ud:
Du skriver:
Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.RecordSet") strSQL= "SELECT * FROM users WHERE (username = '" & username & "' AND password='" & password & "')"
Altså med en anden connection-string OG vigtigst - du har ; sidst i dit sql-kald ... det er en fejl!
Jeg ville til Access 2000 skrive:
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Data Source=...fysisk sti til databasen...\database.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"
wups, der sneg sig en fejl ind - glem det jeg skriv kl. 18:11:48 Jeg mente:
Dit database-kald ser heller ikke helt rigtigt ud:
Du skriver:
Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.RecordSet") strSQL= "SELECT * FROM users WHERE (username = '" & username & "' AND password='" & password & "');"
Jeg ville til f.eks. Access 2000 skrive:
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Data Source=...fysisk sti til databasen...\database.mdb;Provider=Microsoft.Jet.OLEDB.4.0;" strSQL= "SELECT * FROM users WHERE (username = '" & username & "' AND password='" & password & "')"
Altså med en anden connection-string OG vigtigst - du har ; sidst i dit sql-kald ... det er en fejl!
niceday>> Application("Provider") er en applikation-variabel som givetvis indeholder hans connectionstring. Og et semikolon sidst i et sql-kald er ikke en fejl, bare unødvendigt. Man kan godt sende flere sql-kald afsted på én gang, de skal så bare adskilles med semikolon.
Jeg har været ude for at ; giver fejl ved visse databasetyper - derfor vil jeg bare være på den sikre side, hvis han engang skifter connection-string til en anden database. Men du har ret - det er en unødvendighed... sorry :-)
Jeg har lige rettet det du skrev, det virker ikke.. Det er 2002.
Her er min global.asp: <script runat="server" language="VbScript"> Sub Application_OnStart() Application("Provider") = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.Mappath("data.mdb")
Der er godt nok 3 andre include. 2 af dem er HTML, én er ASP, Top 10 stemt. Som ikke bruger Application("Provider"), men har database angivelse i selve koden.
<% function fixSring(strInput) if len(strInput) > 0 then outString = replace(strInput,"'","") fixSring = outString else fixSring = strInput end if end function
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
Set Conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open Application("Provider") Set Conn = Server.CreateObject("ADODB.Connection") strSQL= "SELECT * FROM users WHERE (username = '" & username & "' AND password='" & password & "')" Set rs = Conn.Execute (strSQL)
if not rs.EOF then if (username = rs("username")) then session("loginOK") = "jeps" session("username") = rs("username") session("time") = Now() end if end if
rs.Close Conn.Close Set rs = Nothing Set Conn = Nothing end if
Hvis ovenstående ikke virker, så synes jeg du skal prøve at gøre koden lidt mere simpel og så bygge op derfra. Nok kan fejlen ikke ligge så mange steder, men ved at tilføje elementer til en simpel kode kan du hele tiden se når fejlen pludselig kommer. F.eks. synes jeg du skal fjerne dine includes osv.
Response.Write "<input type=""submit"" value=""Login" class=""knap"" />" Skal du lige ændre til Response.Write "<input type=""submit"" value=""Login"" class=""knap"" />"
Jeg prøver ikke selv fordi det virker fra min pc. Hvorfor ved jeg ikke. Men det virker ikke fra andre. Da jeg skrev det sidste indlæg, virkede det hos mig og fra min kones pc. Derfor troede jeg det virkede.
Ang. <form action, action må ikke bestemmes, da login virker overalt på sitet. Hvis der skrives action=default.asp, er det ikke den måde det er lavet på.
niceday, jeg prøver at fjerne includes i default.asp.
hvis login-scriptet skal fungere fra alle sider, kan du jo bare lade den kalde en anden side, som tjekker login og derefter sender dig tilbage til den side du kommer fra. Så kan du godt saette en action attribut på formen...
Jeg har længe haft problemer med min default.asp. Den ville ikke lave en tabel 100% i højden. Den ville ikke acceptere class elementer. Alle andre undersider havde ikke dette problem. De andre undersider havde kun indholdet i midten, hvor der i toppen var include=top og i bunden include=bottom, for at vise resten.
Nu har jeg lige taget midter indholdet af siden (forsiden) og lavet default.asp om med dette indhold, og så include=top.asp i toppen, og include=bottom i bunden for at vise resten af siden.
Dette har lige løst mine andre problemer, og hvad der er galt aner jeg overhovedet ikke.
Hvis man åbner et nyt vindue, og skriver sidens navn..Så virker login ikke.. Hvis man så trykker på en film eller trailer i menuen. Så virker login efter den nye side er loaded...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.