Avatar billede niller56 Nybegynder
07. august 2009 - 19:56 Der er 15 kommentarer og
1 løsning

Response.Redirect

Jeg laver følgende datakald:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("/fpdb/hid.mdb")

strSQL = "Select * from hotelopl Where id =" & Request.Querystring("id")
Set rs=Conn.Execute(strSQL)

if rs("bookid") = "" then Response.Redirect "http://www.dr.dk"


%>


Men selv om "rs("bookid")" er tom bliver der ikke redirigeret til dr.dk. Hvad gør jeg galt?

Nils
Avatar billede keysersoze Ekspert
07. august 2009 - 20:13 #1
hvad præcis er "tom"? en tom string eller null?
Avatar billede erikjacobsen Ekspert
07. august 2009 - 22:08 #2
...eller fordi der ingen rækker er med det anførte "id" ?
Avatar billede keysersoze Ekspert
07. august 2009 - 22:17 #3
så måtte der næsten komme en eof-fejl (og så er der ikke engang nævnt noget om SQL-injection eller manglende lukning af conn) :)
Avatar billede niller56 Nybegynder
07. august 2009 - 22:32 #4
Det er en tom string. Og det jeg har vist er kun en lille del af siden.
Avatar billede kgkg Nybegynder
08. august 2009 - 12:06 #5
Prøv med:

if (rs("bookid") = "") OR IsNull(rs("bookid")) OR IsEmpty(rs("bookid")) then ....
Avatar billede niller56 Nybegynder
08. august 2009 - 17:33 #6
Mange tak, det var lige det :-)
Avatar billede niller56 Nybegynder
08. august 2009 - 18:18 #7
Må jeg bede om din hjælp en gang mere:
Jeg er nemlig en amatør til det her så :-)

Denne streng:

if (rs("bookid") = "") OR IsNull(rs("bookid")) OR IsEmpty(rs("bookid")) then Response.Redirect "href="showmapudenbooking.asp?id=<%=id%>""

Ender med denne fejl:

if (rs("bookid") = "") OR IsNull(rs("bookid")) OR IsEmpty(rs("bookid")) then Response.Redirect "href="showmapudenbooking.asp?id=<%=id
------------------------------------------------------------------------------------------------------^

Hvad gør jeg galt nu?

Nils
Avatar billede erikjacobsen Ekspert
08. august 2009 - 18:45 #8
Du kan ikke have en " inden i en "..." streng på den måde. Du kan have en " i en "..." streng ved at skrive den 2 gange.

Men hvad laver den "href"-dims der? Du skal jo bare

if (rs("bookid") = "") OR IsNull(rs("bookid")) OR IsEmpty(rs("bookid")) then Response.Redirect "showmapudenbooking.asp?id=<%=id%>"
Avatar billede niller56 Nybegynder
08. august 2009 - 19:23 #9
Jeg får stadig denne fejl:

Microsoft VBScript compilation  error '800a0409'

Unterminated string constant

/showmap.asp, line 127

if (rs("bookid") = "") OR IsNull(rs("bookid")) OR IsEmpty(rs("bookid")) then Response.Redirect "showmapudenbooking.asp?id=<%=id
-------------------------------------------------------------------------------------------------------------------------------^

Men er problemet ikke nu noget omkring: ?id=<%=id%>"

Nils
Avatar billede kgkg Nybegynder
08. august 2009 - 19:53 #10
Som erikjacobsen skriver så har href= ikke noget at gøre i din kode.

Brug:

if (rs("bookid") = "") OR IsNull(rs("bookid")) OR IsEmpty(rs("bookid")) then Response.Redirect "showmapudenbooking.asp?id=" & id


Du må ikke bruge <%= %> rundt om din id variabel, da du allerede er inde i en <% %> blok.

Og så bør du omskrive din (rs("bookid") = "") OR IsNull(rs("bookid")) OR IsEmpty(rs("bookid")) blok til en funktion, så skal du ikke skrive så meget når du skal teste andre variabler og din kode bliver nemmere at læse, når du skal lave et eller andet om om nogle måneder/år.

f.eks. som her:

Public Function IsEmptyIsNull(S)
    if (S = "") OR (IsEmpty(S) = True) OR (IsNull(S) = True) then
        IsEmptyIsNull = True
    else
        IsEmptyIsNull = False
    end if
End Function

Ved at bruge funktionen her, kan du skrive følgende:

if IsEmptyIsNull(rs("bookid")) Then Response.Redirect("showmapudenbooking.asp?id=" & id)

På den måde sparer du at skrive rs("bookid")) 3 gange med mulighed for skrivefejl.
Avatar billede niller56 Nybegynder
09. august 2009 - 11:34 #11
Må jeg bede om lidt mere hjælp, det ser ikke ud til at viderestillingen sender "ID" med over jeg får nemlig denne fejl nu:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'id ='.

/showmapudenbooking.asp, line 125

Nils
Avatar billede kgkg Nybegynder
09. august 2009 - 12:21 #12
Det er meget svært at hjælpe dig, når man ikke har adgang til den kode som du bruger til at kalde siden med dataopslaget.

Og så skal du nok bruge lidt tid på at fejlhåndtere. I dette tilfælde skal du INDEN du begynder at opbygge dit query tjekke om id er et gyldigt tal. Og hvis ikke, så skal du sørge for at der vises en fejlmeddelelse og en mulighed for at komme tilbage.

Kom med noget kode...
Avatar billede niller56 Nybegynder
09. august 2009 - 13:05 #13
Ok jeg prøver,

id = er autonummering i en accessdb som i mit tilfælde er unikt.

Jeg kalder nedenstående side via et link far en anden side på denne måde: <a target="_blank" href="showmap.asp?id=<%=id%>">


<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("/fpdb/hid.mdb")

strSQL = "Select * from hotelopl Where id =" & Request.Querystring("id")
Set rs=Conn.Execute(strSQL)

if (rs("bookid") = "") OR IsNull(rs("bookid")) OR IsEmpty(rs("bookid")) then Response.Redirect "showmapudenbooking.asp?id=" & id

%>

<%
DO WHILE NOT rs.EOF

    id = rs("id")
 

%>

Gør det det lidt mere klart?
Avatar billede kgkg Nybegynder
09. august 2009 - 14:17 #14
I linjen her:

if (rs("bookid") = "") OR IsNull(rs("bookid")) OR IsEmpty(rs("bookid")) then Response.Redirect "showmapudenbooking.asp?id=" & id

er ID ikke tildelt en værdi og er sikkert heller ikke erklæret som en variabel med DIM, så den indeholder en tilfældi værdi.

I linjerne:

strSQL = "Select * from hotelopl Where id =" & Request.Querystring("id")
Set rs=Conn.Execute(strSQL)

henter du ID med Request.QueryString("id")

Du bør gøre følgende:

<%
Dim id
id = Request.QueryString("id") ' hent id fra querystring ind i variablen id

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("/fpdb/hid.mdb")

strSQL = "Select * from hotelopl Where id =" & id
Set rs=Conn.Execute(strSQL)

if (rs("bookid") = "") OR IsNull(rs("bookid")) OR IsEmpty(rs("bookid")) then Response.Redirect "showmapudenbooking.asp?id=" & id

%>

<%
DO WHILE NOT rs.EOF

    id = rs("id")
%>

Jeg ved ikke hvorfor du henter id fra recorden, den kender du jo allerede, og da du udvælger en record med en unik id, så vil der max, være 1 record. ;-)

Håber det får dig lidt videre.
Avatar billede niller56 Nybegynder
09. august 2009 - 17:24 #15
Mange tak der er perfekt nu.

Som den amatør jeg er, er det her hvad jeg ville opnå:

Jeg har en side hvor man kan vælge at se et kort, men hvis man vælger en record hvor der er en værdi i "bookid" skal man til en side og hvis værdien er tom skal man til en anden side, og dette var hvad jeg kunne finde ud af.

Men endnu engang mange tak for hjælpen.

Nils
Avatar billede kgkg Nybegynder
09. august 2009 - 19:27 #16
Nils, alle er jo startet som amatør og den eneste måde at lære på er ved at forsøge, så bare klø på.

- Kim.
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