Avatar billede jensdreier Nybegynder
17. januar 2005 - 09:41 Der er 33 kommentarer og
1 løsning

Problem med "elseif" og sessions

Hej tag et kig på den linje her.
elseif Session("online") <> True AND rs("admin") <> false then
^
Det ville jo aldrig gå uden den linje her

strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
Set rs = Conn.Execute(strSQL)
^
I den tabel ligger rs=("admin") som er en checkbox.

Men jeg kan ikke rigtig finde ud af at smede de 2 koder sammen uden det giver fejl, og jeg forstår enlig også godt hvorfor det giver fejl. Jeg kan bare ikke se en løsning på det

For sætter man det sådan her sammen
"
strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
Set rs = Conn.Execute(strSQL)
elseif Session("online") <> True AND rs("admin") <> false then
"
"
elseif Session("online") <> True AND rs("admin") <> false then
strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
Set rs = Conn.Execute(strSQL)
"
Så vil min tabel fremkaldelse, vil min elseif ikke fungere da den ikke ved hvor den skal få rs=("admin") fra.

Og gør jeg sådan her
"
elseif
strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
Set rs = Conn.Execute(strSQL)
Session("online") <> True AND rs("admin") <> false then
"
giver det også fejl, Logisk nok.

Nogen der kan give mig et fingerpej i den rigtige retning ?
Avatar billede medions Nybegynder
17. januar 2005 - 09:44 #1
prøv sådan her:

ElseIf CBool(Session("online")) <> True AND CBool(rs("admin")) <> False Then

//>Rune
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:01 #2
<% ElseIf CBool(Session("online")) <> True AND CBool(rs("admin")) <> False Then
  strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
  Set rs = Conn.Execute(strSQL)
%>
giver
Microsoft VBScript runtime error '800a000d'

Type mismatch: 'rs'

/stakroge/index.asp, line 134
Avatar billede netro Nybegynder
17. januar 2005 - 10:05 #3
Du har ikke noget recordsæt (rs) inden dit if-statement.
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:07 #4
Nemmerlig. men sætter jeg det ind før if går koden også i kage da den vil forvente IF og ikke min kode

i får lige hele koden
<% If Session("online") <> True then %>
<form method="post" action="tjek.asp">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="101%" height="80">
  <tr>
    <td width="100%" colspan="2" height="11"></td>
  </tr>
  <tr>
    <td width="31%" height="22"><b><font face="Arial" size="2">Bruger:</font></b></td>
    <td width="90%" height="22">
    <input type="text" name="Brugernavn" size="15" style="color: #000000; border: 1px dotted #000000; background-color: #FFFFFF"></td>
  </tr>
  <tr>
    <td width="31%" height="25"><b><font face="Arial" size="2">Kode:</font></b></td>
    <td width="90%" height="25">
    <input type="text" name="Adgangskode" size="15" style="color: #000000; border: 1px dotted #000000; background-color: #FFFFFF"></td>
  </tr>
  <tr>
    <td width="31%" height="22">&nbsp;</td>
    <td width="84%" height="22" align="right">
    <p align="left">
    <input type="submit" value="Log ind" style="color: #000000; font-family: Arial; font-size: 8pt; font-weight: bold; border: 0px solid #000000; background-color: #FFFFFF"></td>
  </tr>
  </table>
  </form>
  <p align="center"><b><font face="Arial" size="1"><a href=",">Glemt Kode?</a><br>
  <a href="tilmeld.asp">Tilmeld mig</a></font></b></td>
</tr>
</table>
<% ElseIf CBool(Session("online")) <> True AND CBool(rs("admin")) <> False Then
  strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
  Set rs = Conn.Execute(strSQL)
%>
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="96%" height="61">
  <tr>
    <td width="100%" height="61">
    <p align="center"><b><font face="Arial" size="2"><A href="admin.asp">Admin</a><br>Du er logget på som : <% response.write rs("brugernavn") %> </font>
    </b>
    <p align="center"><b><font size="2" face="Arial"><a href="logud.asp">Log Af</a></font></b></td>
  </tr>
  </table>
  </table>
  <%
  else
  strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
  Set rs = Conn.Execute(strSQL)
  %>
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="96%" height="61">
  <tr>
    <td width="100%" height="61">
    <p align="center"><b><font face="Arial" size="2">Du er logget på som : <% response.write rs("brugernavn") %> </font>
    </b>
    <p align="center"><b><font size="2" face="Arial"><a href="logud.asp">Log Af</a></font></b></td>
  </tr>
  </table>
  </table>
<% end if %>
Avatar billede netro Nybegynder
17. januar 2005 - 10:08 #5
Kan du ikke bare udføre forespørgslen allerførst?

strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
Set rs = Conn.Execute(strSQL)
if ... then
  ...
elseif not Session("online") AND rs("admin") then
  ...
end if
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:10 #6
Nej for så eksitere den session ikke :( og derfor kan man så ikke sammenligne den med "rs"
Avatar billede netro Nybegynder
17. januar 2005 - 10:12 #7
Jeg kan ikke lige se, hvor du tildeler værdien til din session?
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:14 #8
gør jeg i en anden fil 2 sec.
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("stakroge.mdb")
Conn.Open DSN

Dim strBrugernavn, strAdgangskode
strBrugernavn = Trim(Replace(request.form("Brugernavn"),"'","''" ))
strAdgangskode = Trim(Replace(request.form("Adgangskode"),"'","''" ))

SQL = "SELECT * FROM bruger where brugernavn = '" & strBrugernavn & "' AND adgangskode = '" & strAdgangskode & "'"
Set rs = Conn.Execute(SQL)

If Not (rs.BOF Or rs.EOF) Then
Session("ID") = rs("ID")
Session("online") = True
Response.redirect "index.asp"

Else

Response.redirect "Index.asp"

End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:15 #9
den fil ovenover er tjek.asp
Avatar billede netro Nybegynder
17. januar 2005 - 10:15 #10
Okay, men ovenstående kode bliver vel også afviklet inden den første, når nu du åbner databasen i førstnævnte?
Avatar billede netro Nybegynder
17. januar 2005 - 10:18 #11
Klodset formuleret. tjek.asp afvikles før den kode, du oprindeligt postede, ik'?
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:21 #12
ja for når du submmitter formen under
"<% If Session("online") <> True then %>
(form)
<% end if %>"
så sender den datarene til tjek.asp som så (hvis bruger og adgangskode er ok) sender en vidre til index.asp
og altefter om "rs("admin")" i tabellen er krydset af skal give et "admin" link eftra.
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:25 #13
hovsa ikke "end if" men "elseif"
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:27 #14
Klodset formuleret. tjek.asp afvikles før den kode, du oprindeligt postede, ik'? <- tjek.asp afvikles hvis du submitter formen :)
Avatar billede netro Nybegynder
17. januar 2005 - 10:32 #15
Ja, det kan jeg se nu, men hvis brugeren ryger til tjek.asp, og bliver godkendt, tildeles dine session-variabler jo en værdi, som du kan bruge på din formularside.
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:35 #16
strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
Set rs = Conn.Execute(strSQL)
^ er det ikke også det jeg gør ? WHERE ID=" & Session("ID") <- ?

med den linje kalder jeg jo den bruger frem jeg er logget på som. og kan undersøge om admin=true
Avatar billede netro Nybegynder
17. januar 2005 - 10:39 #17
Godt, hvis din session-variabler har en værdi, hvad er så problemet? ;)
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:41 #18
øøøh, ok www.badenudist.dk/stakroge
user jk
pass jk
prøv selv :D
Avatar billede netro Nybegynder
17. januar 2005 - 10:43 #19
Ja, jeg kan godt se fejlen der. Det var derfor, jeg foreslog, at du skulle rykke forespørgslen op øverst.
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:46 #20
problemet er jo at
elseif
Session("online") <> True AND rs("admin") <> false then <- den linje der skulle give en box hvor der stod

du er nu logget ind som: jk

Og hvis JK er krydset af som admin i min database skal han have et extra link i den box nemlig "admin" og det kan han kun få hvis jeg undersøger tabellen for den box.
for at gøre det smider jeg det her indput efter ...
strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
Set rs = Conn.Execute(strSQL)

HOV tror jeg fatter hvad du mener nu bare glem det jeg skrev der :D
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:46 #21
hvis jeg rykker forespørgsen op øverst som jeg gør om lidt vil det hellerikke virkje 2 sec så skal du se
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:49 #22
for når du så logger ud og den ser den forespørgsel
strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
Set rs = Conn.Execute(strSQL)
så findes sessionID ikke længere og den kommer med fejl
Avatar billede netro Nybegynder
17. januar 2005 - 10:51 #23
Nå, det burde du nu hurtigt kunne løse med en lille if-sætning:

If Session("ID") <> "" Then
  strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
  Set rs = Conn.Execute(strSQL)
End If

if ... then
  ...
elseif not Session("online") AND rs("admin") then
  ...
end if
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:51 #24
nu ser koden sådan her ud
------
<%
  strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
  Set rs = Conn.Execute(strSQL)
If Session("online") <> True then %>
<form method="post" action="tjek.asp">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="101%" height="80">
  <tr>
    <td width="100%" colspan="2" height="11"></td>
  </tr>
  <tr>
    <td width="31%" height="22"><b><font face="Arial" size="2">Bruger:</font></b></td>
    <td width="90%" height="22">
    <input type="text" name="Brugernavn" size="15" style="color: #000000; border: 1px dotted #000000; background-color: #FFFFFF"></td>
  </tr>
  <tr>
    <td width="31%" height="25"><b><font face="Arial" size="2">Kode:</font></b></td>
    <td width="90%" height="25">
    <input type="text" name="Adgangskode" size="15" style="color: #000000; border: 1px dotted #000000; background-color: #FFFFFF"></td>
  </tr>
  <tr>
    <td width="31%" height="22">&nbsp;</td>
    <td width="84%" height="22" align="right">
    <p align="left">
    <input type="submit" value="Log ind" style="color: #000000; font-family: Arial; font-size: 8pt; font-weight: bold; border: 0px solid #000000; background-color: #FFFFFF"></td>
  </tr>
  </table>
  </form>
  <p align="center"><b><font face="Arial" size="1"><a href=",">Glemt Kode?</a><br>
  <a href="tilmeld.asp">Tilmeld mig</a></font></b></td>
</tr>
</table>
<% ElseIf Session("online") <> True AND rs("admin") <> false then  %>
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="96%" height="61">
  <tr>
    <td width="100%" height="61">
    <p align="center"><b><font face="Arial" size="2"><A href="admin.asp">Admin</a><br>Du er logget på som : <% response.write rs("brugernavn") %> </font>
    </b>
    <p align="center"><b><font size="2" face="Arial"><a href="logud.asp">Log Af</a></font></b></td>
  </tr>
  </table>
  </table>
  <%
  else
  %>
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="96%" height="61">
  <tr>
    <td width="100%" height="61">
    <p align="center"><b><font face="Arial" size="2">Du er logget på som : <% response.write rs("brugernavn") %> </font>
    </b>
    <p align="center"><b><font size="2" face="Arial"><a href="logud.asp">Log Af</a></font></b></td>
  </tr>
  </table>
  </table>
<% end if %>
------
og den giver fejl fordi jeg spørger efter en session som ikke findes ;)
kig selv :) www.badenudist.dk/stakroge
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:52 #25
det er først når jeg er logget ind at den kode vil virke
Avatar billede netro Nybegynder
17. januar 2005 - 10:53 #26
Du skal så også lige have værdien over i en variabel, så du undgår fejl i de næste if-sætninger. Prøv med:

If Session("ID") <> "" Then
  strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
  Set rs = Conn.Execute(strSQL)
  admin = rs("admin")
End If

if ... then
  ...
elseif not Session("online") AND admin then
  ...
end if
Avatar billede jensdreier Nybegynder
17. januar 2005 - 10:55 #27
yees det kan jeg enlig godt se det vil fungere prøver lige
Avatar billede jensdreier Nybegynder
17. januar 2005 - 11:07 #28
Ok ingen fejl mere. Men
<% ElseIf Session("online") <> True AND admin <> false then  %> reffere til admin (yes/no) boxen i min bruger tabel.. den skulle jo enlig give mig et extra link der hed admin.. men gør det ikke.. snot
Avatar billede jensdreier Nybegynder
17. januar 2005 - 11:12 #29
brugeren jk pass jk er afkrydset som admin
zak/zak er ikke
Avatar billede netro Nybegynder
17. januar 2005 - 11:14 #30
Ja, men session("online") er vel også sand, når man er logget ind. Skal den ikke hedde: (?)

ElseIf Session("online") AND admin then
Avatar billede jensdreier Nybegynder
17. januar 2005 - 11:20 #31
neeeej det virker vist ikke lige :7
Avatar billede netro Nybegynder
17. januar 2005 - 11:24 #32
Prøv så at udskrive session("online") og admin:

If Session("ID") <> "" Then
  strSQL = "Select * FROM Bruger WHERE ID=" & Session("ID")
  Set rs = Conn.Execute(strSQL)
  admin = rs("admin")
  Response.Write admin & "<br>" & session("online")
End If
Avatar billede jensdreier Nybegynder
17. januar 2005 - 11:35 #33
underlig, jeg fjernede et mellemrum og lavet det igen og det virkede :7 *G*

Nå men det fungere bare nu ! :rox tak for det :)
Det var også en hård omgang for så lidt ..
Avatar billede netro Nybegynder
17. januar 2005 - 11:37 #34
Jeg har heller ikke sovet i nat, så jeg er nok lidt tungnem lige nu.
Men 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