Avatar billede ban_me Nybegynder
08. maj 2005 - 22:18 Der er 13 kommentarer og
1 løsning

Problemer med log ind

Hej eksperter,

Få denne fejl i mit log ind system. Kan umiddelbart ikke se hvorfor, men den brokker sig åbentbart over noget SQL.


Her er fejlen:
-------------------------------
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.

/temp/pages/frontpage.asp, line 59



Her er koden. Fejlen ligger på den linje hvor jeg henter mest ind i min SQL streng:
---------------------------------
<%
if request.form("mode") = "check" then

    username = trim(replace(request.form("username"),"'","''" ))
    password = trim(replace(request.form("password"),"'","''" ))

    SQL = "Select Count(*) as Found from members where (username = '" & username  & "') and (password ='" & password  & "')"
    set RSfound = conn.Execute(SQL)

    if RSfound("Found") = 0 then
    Session("login") = ""

    SQL = "INSERT INTO log(userid,IP) VALUES('"
    SQL = SQL & 0 & "','"
      SQL = SQL & Request.ServerVariables("REMOTE_ADDR") & "')"
    set RSinsert = conn.Execute(SQL)

    errormsg = ""

  else
 
  strSQL = "SELECT user_id, username, password, authlevel FROM members, auth_levels where (username = '" & Request("username") & "') and (password ='" & Request("password") & "') AND auth_levels = roles.id"
  set RSfound = conn.Execute(strSQL)

    SQL = "UPDATE members SET lastlogin = '" & now() & "' WHERE id = " & RSfound("user_id")
    set RS = conn.execute(SQL)

    session("login") = "true"
    session("user_id") = RSfound("user_id")
    session("username") = RSfound("username")
    session("authlevel") = RSfound("authlevel")

    SQL = "INSERT INTO log(userid, IP) VALUES("
      SQL = SQL & RSfound("id") & ",'"   
    SQL = SQL & Request.ServerVariables("REMOTE_ADDR") & "')"
    set RSinsert = conn.Execute(SQL)


    Response.Redirect(session("lastpage"))
   
    end if
   
    else

    session("lastpage") = request.servervariables("HTTP_REFERER")

    end if



%>






<table width="618" height="99" border="0" cellpadding="0" cellspacing="0" class="normal">
  <tr>
    <td width="295" valign="top">
    <%
    if session("login") = "" then
    response.write("Du er ikke logget ind p&aring; systemet. Log ind eller Registrer dig")
    if session("login") = "true" then
    response.write("Du er logget korrekt ind på systemet")
    end if
    end if
    %>
    <br><br>
    <%
      response.write("<form name='login' method='post' action='default.asp?page=1'><input type='hidden' name='mode' value='check'>")
      %>
        <table width="295" height="24" border="0" cellpadding="0" cellspacing="0" class="normal">
        <tr>
          <td width="50%" height="19" align="left" valign="top"><% response.write("<input name='username' type='text' id='username' value='Brugernavn' class='textfields' size='24'>") %>            <br />          </td>
          <td width="50%" align="right" valign="top"><%response.write("<input name='password' type='password' id='password' value='Adgangskode' class='textfields' size='24'>")%></td>
        </tr>
      </table>
        <input name="login" type="submit" class="submitfield_quicklogin" value="Log ind &raquo;">
        <br>
        <br>
    &raquo;<a href="http://www.team-nopanic.dk/temp/forum/profile.php?mode=sendpassword&sid=d47bc5c5cadd379eed0b9de5d59213bd">&nbsp;Klik her hvis du er klar til at registrer dig som Online medlem </a><br>
      &raquo;<a href="http://www.team-nopanic.dk/temp/forum/profile.php?mode=sendpassword&sid=d47bc5c5cadd379eed0b9de5d59213bd">&nbsp;Klik her hvis du har glemt din adgangskode</a>
      </form>
Avatar billede kalp Novice
08. maj 2005 - 22:20 #1
kan du fortælle hvilken linje den brokker sig på? så vi kan kigge direkte på den? og prøv at udskrive sql'en .. fejlen lyder som om en af de værdier en skal sætte en muligvis er tom eller ikke findes.
Avatar billede kalp Novice
08. maj 2005 - 22:21 #2
hvis det er denne

SQL = "Select Count(*) as Found from members where (username = '" & username  & "') and (password ='" & password  & "')"
    set RSfound = conn.Execute(SQL)

så lav lige dette

SQL = "Select Count(*) as Found from members where (username = '" & username  & "') and (password ='" & password  & "')"
response.write (sql)
    set RSfound = conn.Execute(SQL)

og kopir linjen herind.
Avatar billede ban_me Nybegynder
08. maj 2005 - 22:37 #3
Det er denne linje:
strSQL = "SELECT user_id, username, password, authlevel FROM members, auth_levels where (username = '" & Request("username") & "') and (password ='" & Request("password") & "') AND auth_levels = roles.id"
  set RSfound = conn.Execute(strSQL)
Avatar billede kalp Novice
08. maj 2005 - 22:40 #4
strSQL = "SELECT user_id, [username], [password], authlevel FROM members, auth_levels where (username = '" & Request("username") & "') and (password ='" & Request("password") & "') AND auth_levels = roles.id"
response.write (strSQL)
  set RSfound = conn.Execute(strSQL)

og kopir linjen herind.

men det ser ud til det er fordi du har

user_id, [username], [password], authlevel 

altså 4 med.. men kun requester 3.
Avatar billede kalp Novice
08. maj 2005 - 22:41 #5
strSQL = "SELECT username, password, authlevel FROM members, auth_levels where (username = '" & Request("username") & "') and (password ='" & Request("password") & "') AND auth_levels = roles.id"
  set RSfound = conn.Execute(strSQL)

prøv den
Avatar billede kalp Novice
08. maj 2005 - 22:42 #6
så det er ikke for at forvirre dig:) men det der er mellem SELECT og FROM altså

SELECT user_id, username, password, authlevel FROM

det skal du efter FROM delen requeste og fylde ud i samme rækkefølge... dvs. først requeste user_id, så username osv.
Avatar billede busschou Praktikant
09. maj 2005 - 07:51 #7
kalp >> huh?
plum >> Der er noget galt :o)
---
strSQL = "SELECT user_id, username, password, authlevel FROM members, auth_levels where (username = '" & Request("username") & "') and (password ='" & Request("password") & "') AND auth_levels = roles.id"
---
Du vælger fra to tabeller "members" og "auth_levels". Derfor skal du for det første specificere hvilke felter du henter hvorfra
Fx hvis "user_id" kommer fra "members" så hedder det "members.user_id"
En anden ting er det sidste du skriver:
---
"AND auth_levels = roles.id"
---
Hvis auth_levels er en tabel kan du ikke sige den skal være lig med et id. Og når du skriver "roles.id" så tror jeg den vil lede i en tabel "roles" efter "id"
Du har allerede requestet username og password. Så det er i øvrigt dobbelt konfekt at gøre det igen
Hvis det er fordi du har "username" og "password" og nu ønsker "authlevel" i en anden tabel som skal sammenlignes på et ID du ikke kender. Så skal du benytte INNER JOIN
Noget ala
---
strSQL = "SELECT username, password, authlevel FROM members, auth_levels where (username = '" & Request("username") & "') and (password ='" & Request("password") & "') AND auth_levels = roles.id"
Avatar billede busschou Praktikant
09. maj 2005 - 07:53 #8
kom til at sende inden jeg var færdig...det sidste var vist noget vås..burde kunne gøres sådan her
strSQL = "SELECT members.username, members.password, auth_levels.authlevel FROM members, auth_levels where (members.username = '" &username& "') and (members.password ='" &password& "') AND auth_levels.id = members.id"
Avatar billede busschou Praktikant
09. maj 2005 - 08:02 #9
i øvrigt er der vist en svipser her:
----
if session("login") = "" then
  response.write("Du er ikke logget ind p&aring; systemet. Log ind eller Registrer dig")
  if session("login") = "true" then
    response.write("Du er logget korrekt ind på systemet")
  end if
end if
----
Den vil jo aldrig logge en ind, da det du skriver er :
"tjek om man _ikke_ er logget ind. Hvis man ikke er logget in så tjek om man _er_ logget ind"
Skal nok rettes til
----
if session("login") = "" then
  response.write("Du er ikke logget ind p&aring; systemet. Log ind eller Registrer dig")
elseif session("login") = "true" then
  response.write("Du er logget korrekt ind på systemet")
end if
Avatar billede busschou Praktikant
09. maj 2005 - 08:11 #10
og og og :o)
Jeg glemte i indlægget 07:53:00 at det hed members.user_id , ved ikke hvad det tilsvarende hedder i auth_levels
Men efter du har sat dine sessions så indsætter du i din "log" tabel
Der bruger du selv -RSfound("id")- , som måske nok så skal være -RSfound("user_id")- afhængig af hvilket navn som er det rigtige? :o)
Avatar billede ban_me Nybegynder
09. maj 2005 - 09:49 #11
NU har jeg lavet lidt om på mine navne, og min kode ser nu sådan her ud. problemet er bare at jeg nu også får følgende fejl. Linje 75 er der hvor jeg sender brugeren tilbage til ?page=1:
----------------------------------------------
Response object error 'ASP 0158 : 80004005'

Missing URL

/temp/pages/frontpage.asp, line 75

A URL is required.



Kode:
----------------------
<%
    if request.form("mode") = "check" then

    username = trim(replace(request.form("username"),"'","''" ))
    password = trim(replace(request.form("password"),"'","''" ))

    SQL = "Select Count(*) as Found from members where (nick = '" & username  & "') and (password ='" & password  & "')"
    set RSfound = conn.Execute(SQL)

    if RSfound("Found") = 0 then
    Session("login") = ""

    SQL = "INSERT INTO log(userid,IP) VALUES('"
    SQL = SQL & 0 & "','"
      SQL = SQL & Request.ServerVariables("REMOTE_ADDR") & "')"
    set RSinsert = conn.Execute(SQL)

    errormsg = ""

  else

  strSQL = "SELECT members.id, nick, password, authlevel FROM members, roles where (nick = '" & Request("username") & "') and (password ='" & Request("password") & "') AND role = roles.id"
  set RSfound = conn.Execute(strSQL)

    SQL = "UPDATE members SET lastlogin = '" & now() & "' WHERE id = " & RSfound("id")
    set RS = conn.execute(SQL)

    session("login") = "true"
    session("memberID") = RSfound("ID")
    session("username") = RSfound("nick")
    session("authlevel") = RSfound("authlevel")

    SQL = "INSERT INTO log(userid, IP) VALUES("
      SQL = SQL & RSfound("id") & ",'"   
    SQL = SQL & Request.ServerVariables("REMOTE_ADDR") & "')"
    set RSinsert = conn.Execute(SQL)


    Response.Redirect(session("?page=1"))
   
    end if
    end if
   

%>
Avatar billede busschou Praktikant
09. maj 2005 - 10:52 #12
har du en session som hedder "?page=1" ? Det lyder usansyndligt
En session har et navn.. og det er muligt at indholdet er lig "?page=1" men tror ikke navnet er det
session("side") = "hej.asp?page=1"
Response.Redirect(Session("side"))
sådan vil det virke
Avatar billede ban_me Nybegynder
09. maj 2005 - 17:37 #13
Mange tak - der er ingen problemer nu. Ligger i lige et svar ?
Avatar billede busschou Praktikant
09. maj 2005 - 19:32 #14
yes her kommer et svar :o) godt det virker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester