Avatar billede chr.kj Nybegynder
29. juni 2008 - 11:02 Der er 14 kommentarer og
1 løsning

Problem med OR i en fi-sætning

Jeg har et problem, jeg ikke helt kan få løst.

Jeg har et db udtræk fra en mySQL db hvor jeg vil have, at hvis typen enten er privat eller offentlig skal der udskrive en kode og hvis ikke skal der udskrives en anden kode.

Min kode ser sådan ud:

<%
if (rs("type") = "offentlig") OR (rs("type") = "privat") Then
Response.Write "</td></tr><tr><td>Maps:</td>"
Response.Write "<td valign=""top"">" & replace(rs("servermaps"), vbCrLf,"<br>") &""
Response.Write "</td></tr>"
Response.Write "<tr><td valign=""top"">"
Response.Write "Regler:"
Response.Write "</td><td>" & replace(rs("serverregler"),vbCrLf,"<br>") &""
Response.Write "</td></tr>"
Else
    Response.Write "</td></tr>"
End if   

Conn.Close
Set Conn = Nothing
%>

Mit problem er, at det udskrives fint nok hvis typen er offentlig, men hvis typen er privat udskrives koden efter Else

Hvad gør jeg galt?
Avatar billede mitbrugernavn Praktikant
29. juni 2008 - 11:34 #1
prøv med denne

<%
type = rs("type")
if type = "offentlig" then
Response.Write "</td></tr><tr><td>Maps:</td>"
Response.Write "<td valign=""top"">" & replace(rs("servermaps"), vbCrLf,"<br>") &""
Response.Write "</td></tr>"
Response.Write "<tr><td valign=""top"">"
Response.Write "Regler:"
Response.Write "</td><td>" & replace(rs("serverregler"),vbCrLf,"<br>") &""
Response.Write "</td></tr>"
Else
if type = "type" then
Response.Write "</td></tr><tr><td>Maps:</td>"
Response.Write "<td valign=""top"">" & replace(rs("servermaps"), vbCrLf,"<br>") &""
Response.Write "</td></tr>"
Response.Write "<tr><td valign=""top"">"
Response.Write "Regler:"
Response.Write "</td><td>" & replace(rs("serverregler"),vbCrLf,"<br>") &""
Response.Write "</td></tr>"
else
    Response.Write "</td></tr>"
End if   
end if
type = ""
Conn.Close
Set Conn = Nothing
%>
Avatar billede keysersoze Guru
29. juni 2008 - 11:37 #2
Det vil da være direkte dumt at have den samme kode to steder - så da hellere finde årsagen til at den pænere kode fejler.

prøv at udskriv rs("type") og se om det fx skyldes et problem med store/små bogstaver.
Avatar billede mitbrugernavn Praktikant
29. juni 2008 - 11:51 #3
ja nu snakker vi kun 6 linier så det går såment nok - men man kunne også gøre således


<%
type = rs("type")
skriv_type = "</td></tr><tr><td>Maps:</td>"
skriv_type = skriv_type & "<td valign=""top"">" & replace(rs("servermaps"), vbCrLf,"<br>") &""
skriv_type = skriv_type & "</td></tr>"
skriv_type = skriv_type & "<tr><td valign=""top"">"
skriv_type = skriv_type & "Regler:"
skriv_type = skriv_type & "</td><td>" & replace(rs("serverregler"),vbCrLf,"<br>") &""
skriv_type = skriv_type & "</td></tr>"

if type = "offentlig" then
Response.Write skriv_type
Else
if type = "type" then
Response.Write skriv_type
else
    Response.Write "</td></tr>"
End if   
end if
type = ""
skriv_type =""
Conn.Close
Set Conn = Nothing
%>
Avatar billede chr.kj Nybegynder
29. juni 2008 - 11:52 #4
Jeg er enig med keysersoze.. BTW - hvad mener du med at udskrive rs("type")? Det der står i tabellen i db'en er kun med små bogstaver hvis det er det du hentyder til.

Til mitbrugernavn.. Tak for forslaget men jeg vil gerne nøjes med at have koden stående een gang :D
Avatar billede chr.kj Nybegynder
29. juni 2008 - 11:56 #5
Tak for endnu et forslag "mitbrugernavn" Det ser interessant ud :) - Jeg vil tage det i betragtning, men jeg er nu også interesseret i at vide eller finde ud af, hvorfor min OR-sætning ikke virker...

BTW - Hvorfor har du type = "" og skriv_type = "" til sidst i koden? Jeg er rimelig ny til ASP og vil derfor gerne vide hvorfor du skriver det? Takker :D
Avatar billede mitbrugernavn Praktikant
29. juni 2008 - 12:01 #6
for at være sikker på at den ikke gentager sig selv.

måske skal du bare rette strengen til:

if rs("type") = "offentlig" OR rs("type") = "privat" Then
Avatar billede chr.kj Nybegynder
29. juni 2008 - 12:11 #7
Resultatet er det samme.. Desværre...
Avatar billede keysersoze Guru
29. juni 2008 - 12:12 #8
Med udskrive mener jeg bare

response.write "1" & rs("type") & "2" 'så kan vi fx også se om der er mellemrum før eller efter

Hvad sker der hvis du bare har

if rs("type") = "privat" Then
Avatar billede chr.kj Nybegynder
29. juni 2008 - 12:36 #9
Hvis jeg skriver response.write "1" & rs("type") & "2"  kommer den ud med:
1privat2
1offentlig2

og hvis jeg skriver:
if rs("type") = "privat" Then

Kommer data fint nok ud for den "private".
Avatar billede mitbrugernavn Praktikant
29. juni 2008 - 13:11 #10
er det privat eller private - hvis det er private så er det e der giver fejlen...

og så lige en rettelse til min egen kode

<%
type = rs("type")
skriv_type = "</td></tr><tr><td>Maps:</td>"
skriv_type = skriv_type & "<td valign=""top"">" & replace(rs("servermaps"), vbCrLf,"<br>") &""
skriv_type = skriv_type & "</td></tr>"
skriv_type = skriv_type & "<tr><td valign=""top"">"
skriv_type = skriv_type & "Regler:"
skriv_type = skriv_type & "</td><td>" & replace(rs("serverregler"),vbCrLf,"<br>") &""
skriv_type = skriv_type & "</td></tr>"

if type = "offentlig" then
Response.Write skriv_type
Else
if type = "privat" then
Response.Write skriv_type
else
    Response.Write "</td></tr>"
End if   
end if
type = ""
skriv_type =""
Conn.Close
Set Conn = Nothing
%>
Avatar billede chr.kj Nybegynder
29. juni 2008 - 13:29 #11
Det var en lille fejl fra mig. Det er privat og det er ikke e'et der giver fejlen, det er blot her jeg er kommet til at skrive med et e bagefter.
Avatar billede keysersoze Guru
29. juni 2008 - 13:39 #12
Lyder underligt - en mulighed;

MYTYPE = rs("type")
if (MYTYPE = "offentlig") OR (MYTYPE = "privat") Then
Avatar billede chr.kj Nybegynder
29. juni 2008 - 13:48 #13
Det virker :D

for at se om jeg har forstået koden..

Først definere du at MYTYPE er recordsettet type og herefter ser man om dette recordset er enten det ene eller det andet.. Er det korrekt?

BTW - Ved du hvorfor min kode ikke virkede??

Takker for hjælpen og smid et svar :D
Avatar billede keysersoze Guru
29. juni 2008 - 14:11 #14
rs er hele dit recordset - rs("type") er bare en værdi i recordsettet og det er den værdi der lægges ind i en variabel. Grunden til at det kommer til at virke med det er, at under visse forudsætninger (kan desværre ikke helt sige hvilke) så kan du kun spørge på hver enkelt værdi i recordsettet én gang.
Avatar billede chr.kj Nybegynder
29. juni 2008 - 14:17 #15
Super.. Takker for hjælpen
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