Avatar billede nummer8 Nybegynder
21. april 2004 - 09:48 Der er 22 kommentarer og
1 løsning

Problemer med at lave et script

Jeg har været ved at lave et login system og fik lidt hjælp ( http://www.eksperten.dk/spm/490793 ). Men nu har jeg så problemer med at få det til at vise som jeg gerne vil have det til.

Sådan her skal det vises:

Ankommet personer
Dato - Tid - Info
21-04-2004 08:13  Hans Hansen er kommet og har været her i 2 timer og 15 min.

Ikke ankommet personer
Dato - Info
21-04-2004  Karsten er ikke kommet idag.
21-04-2004  Niels er syg.
21-04-2004  Kenneth har fri.

Den skal så vise total tid som folk der er kommet har været her. Selv hvis de har logget ud og ind flere gange (ryger skal logge ud og ind), så skal den bare lægge de tider sammen. Folk der ikke er kommet(hvis de ikke er logget ind) eller er syg/fri skal være i "Ikke ankommet". Det skulle gerne være så man kan vælge fra fx. 15-04-2004 til 21-04-2004(fx 2 input felter hvor man skriver det og trykker vis og så viser den fra de datoer men den skal stå til den dato det er idag og kun vise dem som standart).

Jeg bruger den samme database som er i det andet spm men der er bare tilføjet Syg og Fri som True/False felt efter Ind/Ud.

Hvis der er nogen der har tid til at hjælpe ville det være totalt nice ;)
Avatar billede mranders Nybegynder
21. april 2004 - 10:32 #1
er Bruger_Dato en tabel der logger hvilke datoer der bliver logget ind hver gang der bliver logget ind ?
Avatar billede nummer8 Nybegynder
21. april 2004 - 10:38 #2
Der er vist ikke en tabel der hedder Bruger_Dato.
Avatar billede mranders Nybegynder
21. april 2004 - 10:40 #3
tid = 0

strSQL = "Select * From Bruger_Dato where dato =<'" & request("fra") & "' and dato =>'" & request("fra") & "' order by dato" 

Set rs = Conn.Execute(strSQL)

Do

  strSQL2 = "Select * From Bruger_Tid where datoid ='" & rs("id") & "' order by dato"
 
  Set rs2 = Conn.Execute(strSQL2)
 
  Do

      tid = tid + rs2("GaaTid") - rs2("AnkomstTid")

  rs2.MoveNext
  Loop While Not rs.EOF

rs.MoveNext
Loop While Not rs.EOF


prøv det, er ikke sikker på jeg har forstået din database rigtigt
Avatar billede mranders Nybegynder
21. april 2004 - 10:40 #4
hvad er Bruger_Dato - Id/BrugerID (samme id som det fra Bruger)/Dato så ?
Avatar billede mranders Nybegynder
21. april 2004 - 10:41 #5
ok havde ikke set du havde ændret dit system
Avatar billede nummer8 Nybegynder
21. april 2004 - 10:45 #6
prøv at hente den database på det link i det andet spm. det er sådan som det er lavet nu ;)
Avatar billede mranders Nybegynder
21. april 2004 - 11:10 #7
sorry kan ikke lige få det til at virke
Avatar billede vbcoder Nybegynder
22. april 2004 - 07:50 #8
Hej - jeg har desværre lidt småtravlt men jeg skal nok kigge på hvad der kan gøres.

Jeg kunne dog godt have fornemmelsen af at vi skal splitte dato feltet op i dato og tid.

Jeg sad faktisk og legede lidt med det i går aftes - jeg har lagt en ny db på www.visualcoder.dk/eksperten/491674/jobreg.mdb

Jeg har også ændret en smule i koden der gemmer til databasen. Den splitter så dato kommer i et felt for sig og tid i et felt for sig

Tid er også af typen  dato/tid

Koden jeg har rettet er her:

'registrering
dato_tid = split(now, " ")

' første kørsel findes ingen registreringer for bruger
if oRsReg.eof then
    'opret ny komme registrering
    strSqlWriteReg = "INSERT INTO [tbl_reg] (bruger_id, dato, tid, ind, ud)" & _
                        " VALUES (" & bruger_id & "," & dato_tid(0) & ",#" & dato_tid(1) & "#,-1,0);"
' efterfølgende kørsler
else
    'kontroller om den seneste er en ind eller ud registrering
    if oRsReg("ind") = -1 then '<-- så var sidste registrering en ind registrering
        strSqlWriteReg = "INSERT INTO [tbl_reg] (bruger_id, dato, tid, ind, ud)" & _
                                " VALUES (" & bruger_id & "," & dato_tid(0) & ",#" & dato_tid(1) & "#,0,-1);"
    else '<-- så var sidste registrering en ud registrering
        strSqlWriteReg = "INSERT INTO [tbl_reg] (bruger_id, dato, tid, ind, ud)" & _
                                " VALUES (" & bruger_id & "," & dato_tid(0) & ",#" & dato_tid(1) & "#,-1,0);"
    end if
end if
Avatar billede nummer8 Nybegynder
22. april 2004 - 09:25 #9
Det lyder da godt ;)

Jeg sidder selv lige og prøvet at få det til at virke men det er ikke så nemt igen ;(

Prøver med den nye kode der nu
Avatar billede nummer8 Nybegynder
22. april 2004 - 11:07 #10
Du har lige en fejl i den kode der. Du mangler # rundt om den til datoen ;)

        strSqlWriteReg = "INSERT INTO [tbl_reg] (bruger_id, dato, tid, ind, ud)" & _
                                " VALUES (" & bruger_id & ",#" & dato_tid(0) & "#,#" & dato_tid(1) & "#,-1,0);"
Avatar billede nummer8 Nybegynder
23. april 2004 - 08:31 #11
Ville lige høre om du havde fundet ud af noget ?

Jeg har selv fået lavet så den viser hvis de er syg, har fri eller ikke er kommet ;)
Avatar billede vbcoder Nybegynder
23. april 2004 - 09:24 #12
jeg har lavet noget
Avatar billede vbcoder Nybegynder
23. april 2004 - 09:25 #13
jeg fifler lidt med den her

http://vbcoder.dk/eksperten/491674/
Avatar billede vbcoder Nybegynder
23. april 2004 - 09:54 #14
koden til ovenstående link :

<%
Option explicit

dim oConn
dim oRsBruger
dim oRsReg
dim strSqlBruger
dim strSqlReg
dim strSqlWriteReg
dim bruger_navn
dim bruger_id
dim bruger_kode
dim dato_tid
dim dato

dim Moedetid
dim indStemplet
dim udStemplet
dim Minutter
dim TotalMinutter
dim ArbejdsTid


If request.ServerVariables("REQUEST_METHOD") = "POST" then
    ' hent data fra form
    bruger_navn = replace(request.Form("navn"),"'","")
    bruger_kode = replace(request.form("kode"),"'","")
    ' felter skal være udfyldt
    if (trim(bruger_navn) = "") or (trim(bruger_kode) = "") then
        response.write("Forkert navn og kode")
        response.End()
    end if

    ' find bruger
    Set oConn = Server.CreateObject("ADODB.Connection")
    oConn.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".") & "/jobreg.mdb;PWD=admin;"
    strSqlBruger = "SELECT * FROM [tbl_bruger] WHERE [bruger_navn] = '" & bruger_navn & "' AND [bruger_kode] = '" & bruger_kode & "';"
    set oRsBruger = oConn.execute(strSqlBruger)

    ' bruger ikke fundet
    if oRSBruger.eof then
        Response.Write("Forkert navn og kode")
    else
        ' find registreringer på bruger
        ' sorter med nyeste øverst
        bruger_id = oRsBruger("bruger_id")
        strSqlReg = "SELECT * FROM [tbl_Reg] WHERE [bruger_id] = " & bruger_id & " ORDER BY [dato] DESC;"
        set oRsReg = oConn.execute(strSqlReg)

        'registrering
        dato_tid = split(now, " ")
        response.write (dato_tid(0) & "<BR>")
        response.write (dato_tid(1) & "<BR>")
        'response.end()
       
        ' første kørsel findes ingen registreringer for bruger
        if oRsReg.eof then
            'opret ny komme registrering
            strSqlWriteReg = "INSERT INTO [tbl_reg] (bruger_id, dato, tid, ind, ud) VALUES (" & bruger_id & "," & dato_tid(0) & ",#" & dato_tid(1) & "#,-1,0);"
        ' efterfølgende kørsler
        else
            'kontroller om den seneste er en ind eller ud registrering
            if oRsReg("ind") = -1 then '<-- så var sidste registrering en ind registrering
                strSqlWriteReg = "INSERT INTO [tbl_reg] (bruger_id, dato, tid, ind, ud) VALUES (" & bruger_id & ",#" & dato_tid(0) & "#,#" & dato_tid(1) & "#,0,-1);"
            else '<-- så var sidste registrering en ud registrering
                strSqlWriteReg = "INSERT INTO [tbl_reg] (bruger_id, dato, tid, ind, ud) VALUES (" & bruger_id & ",#" & dato_tid(0) & "#,#" & dato_tid(1) & "#,-1,0);"
            end if
        end if
        'opdater databasen
        oConn.execute (strSqlWriteReg)
        'skriv data for bruger
        set oRsReg = oConn.Execute(strSqlReg)
        response.Write("<table width=50% border=1><tr><td colspan=3>Registreringer for bruger " & bruger_navn & "</td></tr>")
        do while not oRsReg.Eof
            if oRsReg("Ind") = -1 then
                Response.Write("<tr><td>Ind stempling" & "</td>" & "<td>" & oRsReg("Dato") & "</td><td> Kl: " & oRsReg("tid") & "</td></tr>")
            else
                Response.Write("<tr><td>Ud stempling" &  "</td>" & "<td>" & oRsReg("Dato") & "</td><td> Kl: " & oRsReg("tid") & "</td></tr>")
            end if
            oRsReg.movenext
        loop
        response.Write("</table>")
        response.write("<table width=50% border=1><tr><td>Dato</td><td>Tid</td><td>Info</td>")
               
        dato = left(now,10)
        strSqlReg = "SELECT * FROM [tbl_reg] " & _
                    "WHERE [bruger_id] = " & oRsBruger("bruger_id") & " AND [Dato] = #" & dato & "#;"
                    '"WHERE [bruger_id] = " & oRsBruger("bruger_id") & " AND [Dato] = #" & dato & "# Order by [Tid] ASC;"
        set orsreg = oconn.execute(strsqlreg)
       
       
        Moedetid = left(orsreg("Tid"),5)
        Do until oRsReg.EOF
          'den første registrering skal være en indStemplet ellers fejl
          response.write (left(oRsReg("Tid"),5) & "<br>")
          Indstemplet = timertilminutter(left(orsreg("Tid"),5))
          oRsReg.MoveNext
          if not oRsReg.Eof then
            response.write (left(oRsReg("Tid"),5) & "<br>")
            UdStemplet = timertilminutter(left(oRsReg("Tid"),5))
      else
        response.write (mid(now,12,5) & "<br>")
        Udstemplet = timertilminutter(mid(now,12,5))
      end if
      Minutter = Udstemplet - Indstemplet
      TotalMinutter = TotalMinutter + Minutter
          if not oRsReg.Eof then
            oRsReg.MoveNext
          end if
        loop
       
        response.write (totalminutter  & "<br>")
        Arbejdstid = udregntid(totalMinutter)
        response.write ("<tr><td>" & Dato & "</td><td>" & Moedetid & "</td><td>" & bruger_navn & " er kommet og har været her " & arbejdstid & ".</td></tr>")
        response.write("</table")
       
        response.Write("<p><a href=" & chr(32) & "default.asp" & chr(32) & ">Ny registrering</a></p>")
        oRsReg.close
        set oRsReg = nothing
    end if

    oRsBruger.close

    oConn.close
    set oRsBruger = nothing
    set oConn = nothing
    set strSqlBruger = nothing
    set strSqlReg = nothing
    set strSqlWriteReg = nothing

Else
%>
<form name="form1" method="post" action="default.asp">
  <p>Navn<br>
    <input type="text" name="navn">
    <br>
    Kode
    <br>
    <input type="text" name="kode">
  </p>
  <p>
    <input type="submit" name="Submit" value="Registrering" >
</p>
  <p>&nbsp;
    </p>
  <p>&nbsp;    </p>
</form>
Følgende er i databasen (skriv navn som det står)<br>
<table border="1" width="50%">
<tr>
<td>Anders And</td><td>112233</td>
</tr>
<tr>
<td>Mickey Mouse</td><td>112244</td>
</tr>
<tr>
<td>Fedtmule</td><td>112255</td>
</tr>
</table>

<% End if %>

<%


Function udregnTid(tid)

   
    Dim timer
    Dim minutter
    tid = cint(tid)
   
    minutter = tid MOD 60   
    do until tid < 60
      tid = tid - 60
      timer = timer +1
    loop
   
    udregnTid = Timer & " time(r) og " & Minutter & " minut(ter)."

End Function

Function timerTilMinutter(tid)

    Dim dummy
    Dim timer
    Dim minutter
   
    tid = cstr(tid)
    dummy = Split(tid, ":")

    minutter = cint(dummy(1)) + cint(dummy(0) * 60)

    timerTilMinutter = minutter


End Function


%>
Avatar billede nummer8 Nybegynder
23. april 2004 - 09:57 #15
Og btw jeg fandt en fejl her igår som jeg ikke kunne rette mig selv.

Når man glemmer og logge ud en dag så bliver den næste dag når man logger ind en "log ud"
Avatar billede vbcoder Nybegynder
23. april 2004 - 10:00 #16
Den kan nok løses ved at lave et opslag på datoen og checke om der er nogen registreringer for den faktiske dato.

Hvis der ingen er må det jo være en indregistrering.

I øvrigt virker time sammenlægningen ikke hvis det er hen over midnat.
Avatar billede nummer8 Nybegynder
23. april 2004 - 10:16 #17
hmm altid godt når man får en "HTTP 500 - Intern serverfejl"..

kan ikke finde ud af hvad der skulle være fejl i.
Avatar billede vbcoder Nybegynder
23. april 2004 - 10:18 #18
funktioner - internetindstillinger - avanceret - fjern flueben i vis meddelser om uskadelige http-fejl
Avatar billede vbcoder Nybegynder
23. april 2004 - 10:19 #19
i øvrigt har jeg haft insektsprayen fremme mod koden :

<%
Option explicit

dim oConn
dim oRsBruger
dim oRsReg
dim strSqlBruger
dim strSqlReg
dim strSqlWriteReg
dim bruger_navn
dim bruger_id
dim bruger_kode
dim dato_tid
dim dato

dim Moedetid
dim indStemplet
dim udStemplet
dim Minutter
dim TotalMinutter
dim ArbejdsTid


If request.ServerVariables("REQUEST_METHOD") = "POST" then
    ' hent data fra form
    bruger_navn = replace(request.Form("navn"),"'","")
    bruger_kode = replace(request.form("kode"),"'","")
    ' felter skal være udfyldt
    if (trim(bruger_navn) = "") or (trim(bruger_kode) = "") then
        response.write("Forkert navn og kode")
        response.End()
    end if

    ' find bruger
    Set oConn = Server.CreateObject("ADODB.Connection")
    oConn.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(".") & "/jobreg.mdb;PWD=admin;"
    strSqlBruger = "SELECT * FROM [tbl_bruger] WHERE [bruger_navn] = '" & bruger_navn & "' AND [bruger_kode] = '" & bruger_kode & "';"
    set oRsBruger = oConn.execute(strSqlBruger)

    ' bruger ikke fundet
    if oRSBruger.eof then
        Response.Write("Forkert navn og kode")
    else
        ' find registreringer på bruger
        ' sorter med nyeste øverst
        bruger_id = oRsBruger("bruger_id")
        strSqlReg = "SELECT * FROM [tbl_Reg] WHERE [bruger_id] = " & bruger_id & " ORDER BY [dato] DESC;"
        set oRsReg = oConn.execute(strSqlReg)

        'registrering
        dato_tid = split(now, " ")
       
        ' første kørsel findes ingen registreringer for bruger
        if oRsReg.eof then
            'opret ny komme registrering
            strSqlWriteReg = "INSERT INTO [tbl_reg] (bruger_id, dato, tid, ind, ud) VALUES (" & bruger_id & "," & dato_tid(0) & ",#" & dato_tid(1) & "#,-1,0);"
        ' efterfølgende kørsler
        else
            'kontroller om den seneste er en ind eller ud registrering
            if oRsReg("ind") = -1 then '<-- så var sidste registrering en ind registrering
                strSqlWriteReg = "INSERT INTO [tbl_reg] (bruger_id, dato, tid, ind, ud) VALUES (" & bruger_id & ",#" & dato_tid(0) & "#,#" & dato_tid(1) & "#,0,-1);"
            else '<-- så var sidste registrering en ud registrering
                strSqlWriteReg = "INSERT INTO [tbl_reg] (bruger_id, dato, tid, ind, ud) VALUES (" & bruger_id & ",#" & dato_tid(0) & "#,#" & dato_tid(1) & "#,-1,0);"
            end if
        end if

        'opdater databasen
        oConn.execute (strSqlWriteReg)

        'skriv data for bruger
        set oRsReg = oConn.Execute(strSqlReg)
        response.Write("<table width=50% border=1><tr><td colspan=3>Registreringer for bruger " & bruger_navn & "</td></tr>")
        do while not oRsReg.Eof
            if oRsReg("Ind") = -1 then
                Response.Write("<tr><td>Ind stempling" & "</td>" & "<td>" & oRsReg("Dato") & "</td><td> Kl: " & oRsReg("tid") & "</td></tr>")
            else
                Response.Write("<tr><td>Ud stempling" &  "</td>" & "<td>" & oRsReg("Dato") & "</td><td> Kl: " & oRsReg("tid") & "</td></tr>")
            end if
            oRsReg.movenext
        loop
        response.Write("</table>")
        response.write("<table width=50% border=1><tr><td>Dato</td><td>Tid</td><td>Info</td>")
               
        dato = left(now,10)
        strSqlReg = "SELECT * FROM [tbl_reg] " & _
                    "WHERE [bruger_id] = " & oRsBruger("bruger_id") & " AND [Dato] = #" & dato & "#"

        set orsreg = oconn.execute(strsqlreg)
               
        if not orsreg.eof then
          Moedetid = left(orsreg("Tid"),5)
        else
          Moedetid = mid(now,12,5)
        end if
       
        Do until oRsReg.EOF
          'den første registrering skal være en indStemplet ellers fejl
          Indstemplet = timertilminutter(left(orsreg("Tid"),5))
          oRsReg.MoveNext
          if not oRsReg.Eof then
            UdStemplet = timertilminutter(left(oRsReg("Tid"),5))
      else
        Udstemplet = timertilminutter(mid(now,12,5))
      end if
      Minutter = Udstemplet - Indstemplet
      TotalMinutter = TotalMinutter + Minutter
          if not oRsReg.Eof then
            oRsReg.MoveNext
          end if
        loop
       
        Arbejdstid = udregntid(totalMinutter)
        response.write ("<tr><td>" & Dato & "</td><td>" & Moedetid & "</td><td>" & bruger_navn & " er kommet og har været her " & arbejdstid & ".</td></tr>")
        response.write("</table")
       
        response.Write("<p><a href=" & chr(32) & "default.asp" & chr(32) & ">Ny registrering</a></p>")
        oRsReg.close
        set oRsReg = nothing
    end if

    oRsBruger.close

    oConn.close
    set oRsBruger = nothing
    set oConn = nothing
    set strSqlBruger = nothing
    set strSqlReg = nothing
    set strSqlWriteReg = nothing
Else
%>
<form name="form1" method="post" action="default.asp">
  <p>Navn<br>
    <input type="text" name="navn">
    <br>
    Kode
    <br>
    <input type="text" name="kode">
  </p>
    <input type="submit" name="Submit" value="Registrering" >
</form>
<font size ="-1">
Følgende er i databasen (skriv navn som det står)<br>
<table border="1">
<tr>
<td>Anders And</td><td>112233</td>
</tr>
<tr>
<td>Mickey Mouse</td><td>112244</td>
</tr>
<tr>
<td>Fedtmule</td><td>112255</td>
</tr>
</table>
</font>
<% End if %>
<%
Function udregnTid(tid)
    Dim timer
    Dim minutter
    tid = cint(tid)
   
    timer = 0
    minutter = tid MOD 60   
    do until tid < 60
      tid = tid - 60
      timer = timer + 1
    loop
      udregnTid = Timer & " time(r) og " & Minutter & " minut(ter)."
End Function

Function timerTilMinutter(tid)

    Dim dummy
    Dim timer
    Dim minutter
 
    tid = cstr(tid)
    dummy = Split(tid, ":")
    minutter = cint(dummy(1)) + cint(dummy(0) * 60)
    timerTilMinutter = minutter

End Function
%>
Avatar billede vbcoder Nybegynder
23. april 2004 - 10:20 #20
jeg smutter - skal ud i landskabet og bestille noget ;-)
Avatar billede vbcoder Nybegynder
23. april 2004 - 10:22 #21
hvis man reloader siden poster man til databasen igen så det skal nok ændres på en måde så det ikke kan ske
Avatar billede nummer8 Nybegynder
23. april 2004 - 11:36 #22
hmm der er en fejl i det.

Den siger at en som har været der fra 08:00 til nu (11:34) har været der i 4 timer og 18 minutter.

Hvis du lige vil skrive din mail så kan jeg sende mit til dig så du kan se det. For det er lavet om efter det du har lavet.

Holder lige pause nu til kl 12 men så er jeg her igen ;)
Avatar billede nummer8 Nybegynder
23. april 2004 - 12:27 #23
hmm tror det virker nu ;)

havde glemt at sætte tingene til 0 efter brug ;)
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