Avatar billede mulles.tk Nybegynder
03. november 2004 - 20:50 Der er 40 kommentarer og
1 løsning

Problemer med if-sætning

Jeg er INGEN haj til ASP, da jeg normalt koder i PHP, men i skolen skal vi altså kode ASP, så har brug for lidt hjælp! Der er tilsyneladende et eller andet galt med denne sætning:
---------------
if Request.Querystring = udgivelsesaar then

DIM aar

aar=Request.Querystring(udgivelsesaar)

MinSQL="Select * from dvd WHERE udgivelsesaar=' & aar & '"
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)

else

DIM prod

prod=Request.Querystring("producent")

MinSQL="Select * from dvd WHERE producent='" & prod & "'"
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)
--------------------
Den får input fra URL'en, som her jo er ?udgivelsesaar=1990 eller ?producent=Universal%20Studios og så gerne skulle få den til at lave forespørgslen i Access databasen. Umiddelbart virker producent fint nok, men udgivelses år gør ikke. Den går fint nok ind på siden quickfind.asp og skriver også hele HTML-koden med tabeller og det, men der kommer bare ingen resultater frem.

Derudover kunne jeg godt tænke mig, hvis man kunne lave det sådan at producent-sætningen var en elseif-sætningen i stedet for bare else, men de gange jeg har prøvet virker det ikke! I stedet skal else så bare være hvor der ikke sker noget og siden bare bliver loadet.

Nogen der kan hjælpe? -og undskylder for den nok ikke så gode forklaring ;)
Avatar billede eagleeye Praktikant
03. november 2004 - 20:56 #1
Du kan tjekke om Request.Querystring ("udgivelsesaar") ikke er tom i stedet for den if sætning du har:
if Request.Querystring = udgivelsesaar then

Sådan her:

if Request.Querystring("udgivelsesaar") <> "" then


og når du henter værdien skal der " omkring navnet på querystring variablen eks:

aar=Request.Querystring("udgivelsesaar")
Avatar billede fun22 Nybegynder
03. november 2004 - 20:57 #2
det er fordi der skal "" på
aar=Request.Querystring("udgivelsesaar")
Avatar billede mulles.tk Nybegynder
03. november 2004 - 20:58 #3
Værdien vil aldrig være tom, da man klikker på et link, for at finde alle med samme udgivelsesår
Avatar billede mulles.tk Nybegynder
03. november 2004 - 20:59 #4
Det hjælper ikke noget bare at sætte "" -havde jeg nemlig også prøvet først!
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:00 #5
Siden det drejer sig om er:

http://students.aabc.dk/rjorge8/dvd
Avatar billede fun22 Nybegynder
03. november 2004 - 21:00 #6
MinSQL="Select * from dvd WHERE udgivelsesaar='" & aar & "'" <- skal se sådan her ud..
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:02 #7
...stadig ikke noget =/
Avatar billede eagleeye Praktikant
03. november 2004 - 21:02 #8
Ok, men if sætningen skal være som jeg viste da du vil tjekke om der er angivet udgivelsesaar eller producent.
Avatar billede eagleeye Praktikant
03. november 2004 - 21:03 #9
Den tjekke om Request.Querystring("udgivelsesaar") har en værdi, har den det finder den alle fra det valgte år ellers vises en producent.
Avatar billede fun22 Nybegynder
03. november 2004 - 21:04 #10
prøv så at ændre
if Request.Querystring = udgivelsesaar then

til

if Request.Querystring("udgivelsesaar") <> 0 then
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:07 #11
Har prøvet begge metoder, <> "" then eller <> 0 then , men ingen virker..? Nu viser den ingen gang siden :(
Avatar billede eagleeye Praktikant
03. november 2004 - 21:07 #12
Prøv at vise koden igen så.
Avatar billede fun22 Nybegynder
03. november 2004 - 21:08 #13
der skal lige "0" om nullet. ;)
Avatar billede eagleeye Praktikant
03. november 2004 - 21:08 #14
Det skal være med "" som jeg har vist. En tom Querystring har ikke værdien 0 men ""
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:10 #15
if Request.Querystring("udgivelsesaar") <> "" then

DIM aar

aar=Request.Querystring("udgivelsesaar")

MinSQL="Select * from dvd WHERE udgivelsesaar='" & aar & "'"
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)

else

DIM prod

prod=Request.Querystring("producent")

MinSQL="Select * from dvd WHERE producent='" & prod & "'"
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)

...og kan ses her, hvis der klikkes på et af årene --> http://students.aabc.dk/rjorge8/DVD
Avatar billede fun22 Nybegynder
03. november 2004 - 21:12 #16
prøv lige det her så:

if Request.Querystring("udgivelsesaar") <> "" then

DIM aar

aar=Request.Querystring("udgivelsesaar")

MinSQL="Select * from dvd WHERE udgivelsesaar='" & aar & "'"
Set Rs=Forbindelse.Execute(MinSQL)

else

DIM prod

prod=Request.Querystring("producent")

MinSQL="Select * from dvd WHERE producent='" & prod & "'"
Set Rs=Forbindelse.Execute(MinSQL)

end if
Avatar billede eagleeye Praktikant
03. november 2004 - 21:12 #17
Hvilken database bruger du og hvilken type er kolonnen udgivelsesaar?
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:14 #18
Bruger access og kolonnen er bare tekst
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:16 #19
Nope fun22, stadig ikke ;)
Avatar billede eagleeye Praktikant
03. november 2004 - 21:17 #20
hmm ok, så prøv at udskrive selve SQL sætningen for at se om der er noget galt i den.


MinSQL="Select * from dvd WHERE udgivelsesaar='" & aar & "'"
response.Write MinSQL
Response.end
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)
Avatar billede eagleeye Praktikant
03. november 2004 - 21:18 #21
Og du har kun gemt sleve årstallet 1998 / 2003  osv. og ikke som en dato?
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:20 #22
Øhh... selve sætningen er placeret i <head>, så vil det hjælpe noget at udskrive den der? :)

Jo årstallet er bare gemt som fx 1998
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:21 #23
Har lavet den der udskrivning nu, prøv evt. selv at kigge :) Lader til at være som den skal
Avatar billede fun22 Nybegynder
03. november 2004 - 21:21 #24
prøv lige at flytte den ned i <body>
Avatar billede eagleeye Praktikant
03. november 2004 - 21:23 #25
Ja de betyder ikke helt så meget det er for at tjekke den udføre den rigtige SQL sætning og det ser sådan ud. Den skriver:
Select * from dvd WHERE udgivelsesaar='1988'

Så du kan prøve at fjerne disse to linjer igen:
response.Write MinSQL
Response.end

Så prøv at rette SQL sætningen til:
MinSQL="Select * from dvd WHERE udgivelsesaar LIKE '%" & aar & "%'"
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:26 #26
Det bryder den sig vist ikke om :)
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:27 #27
...hov og nu virker producent heller ikke :(
Avatar billede eagleeye Praktikant
03. november 2004 - 21:28 #28
Har du '"  til sidst i linjen med MinSQL?
MinSQL="Select * from dvd WHERE udgivelsesaar LIKE '%" & aar & "%'"
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:30 #29
Haha, det var lige smuttet :))

Men nu skriver den igen slet ikke noget =/
Avatar billede eagleeye Praktikant
03. november 2004 - 21:32 #30
og du har fjerne disse to linjer ?

response.Write MinSQL
Response.end
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:34 #31
yup
Avatar billede eagleeye Praktikant
03. november 2004 - 21:37 #32
Har du flere if sætninger så som tjekke på querystringsne?
For hvis man kigger i View Source på siden er der stor forskel om man vælger udgivelsesaar eller producent.
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:41 #33
Hele koden:

<%
Set Forbindelse=Server.CreateObject("ADODB.Connection")
Forbindelse.Open "PROVIDER=MSDASQL;" & _
"DRIVER={Microsoft Access Driver (*.mdb)}; " & _
"DBQ=" & server.mappath("DVD.mdb")

if Request.Querystring("udgivelsesaar") <> "" then

DIM aar

aar=Request.Querystring("udgivelsesaar")

MinSQL="Select * from dvd WHERE udgivelsesaar LIKE '%" & aar & "%'"
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)

else

DIM prod

prod=Request.Querystring("producent")

MinSQL="Select * from dvd WHERE producent='" & prod & "'"
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)
%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Vis film</title>
</head>

<body>
<table border="0" width="475" cellspacing="0" cellpadding="0">
  <tr>
    <td colspan="4" align="right" height="18" width="471">[ <a href="default.asp">Alle film</a> ] [ <a href="find.asp">Søg</a> ] [ <a href="nyfilm.asp">Tilføj ny film</a> ]</td>
  </tr>
    <tr>
      <td width="400" height="20" colspan="4"></td>
    </tr>
  <tr>
    <td width="26">&nbsp;</td>
    <td width="123"><b>Titel</b></td>
    <td width="130"><b>Producent</b></td>
    <td width="186"><b>Udgivelses år</b></td>
    <%
    'Gennemløb (loop) Fundet for værdier og gem dem i variable fx.: I variablen id gemmes Fundet("ID"). Udskriv værdierne

  Do while not Rs.EOF
    id = Rs("ID")
    titel = Rs("titel")
    producent = Rs("producent")
    udgivelsesaar = Rs("udgivelsesaar")
    %>
  <tr>
    <td valign="middle" align="center" width="26"><a href="vis_data_alt.asp?id=<%=id%>"><img border="0" src="../DVD/images/udfold.gif" width="14" height="14"></a></td>
    <td width="123"><%=titel%></td>
    <td width="130"><%=producent%></td>
    <td width="186"><%=udgivelsesaar%></td>
    <%
    Rs.MoveNext
  LOOP
  Rs.Close
  Response.Write "</TABLE>"

'Luk forbindelse og ryd op
Forbindelse.Close
Set Forbindelse = nothing
Set SQLstreng = nothing

end if
    %>
  </tr>
</table>

</body>
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:43 #34
...men husk, den virker altså ved producent men bare ikke år
Avatar billede eagleeye Praktikant
03. november 2004 - 21:44 #35
Ok,

end if  er kommet for langt ned næsten helt nede i bunden. Det skal ind lige før:
%>
<html>


Sådan her:

end if
%>
<html>


Så skal det end if i bunden slettes så de sidste linjer bliver:

Set SQLstreng = nothing

    %>
  </tr>
</table>

</body>
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:48 #36
COOL!!! Mange tak, endelig!

Men hvis jeg nu vil have en elseif-sætning, er det så bare:

if Request.Querystring("udgivelsesaar") <> "" then

DIM aar

aar=Request.Querystring("udgivelsesaar")

MinSQL="Select * from dvd WHERE udgivelsesaar LIKE '%" & aar & "%'"
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)

elseif Request.Querystring("producent") <> "" then

DIM prod

prod=Request.Querystring("producent")

MinSQL="Select * from dvd WHERE producent='" & prod & "'"
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)

else

end if

%>
Avatar billede eagleeye Praktikant
03. november 2004 - 21:50 #37
Ja det korrekt sådan vil den se ud.
Avatar billede mulles.tk Nybegynder
03. november 2004 - 21:53 #38
Men jeg vil gerne ha' at den bare viser siden, hvis man fx kommer til at gå ind under http://students.aabc.dk/rjorge8/DVD/quickfind.asp
...i stedet for den fejl den viser nu!

Kan man skrive nothing (hvilket jeg har prøvet, og som ikke virkede ;) ) el.lign.?
Avatar billede eagleeye Praktikant
03. november 2004 - 22:00 #39
Koden for venter et recordset som den skal udskrive fra som ikke bliver lavet hvis der ikke er nogen Querystring. Så du lave en if sæning omkring det som udskriver sådan den kun udskriver hvis der er defineret en querystring eller om rs recordsetet er defineret.


<%
if Request.Querystring("udgivelsesaar") <> "" then

DIM aar

aar=Request.Querystring("udgivelsesaar")

MinSQL="Select * from dvd WHERE udgivelsesaar LIKE '%" & aar & "%'"
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)

elseif Request.Querystring("producent") <> "" then

DIM prod

prod=Request.Querystring("producent")

MinSQL="Select * from dvd WHERE producent='" & prod & "'"
Set Rs=Server.CreateObject("ADODB.RecordSet")
Set Rs=Forbindelse.Execute(MinSQL)

else

end if
%>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Vis film</title>
</head>

<body>
<%
if isObject(rs) then
%>


<table border="0" width="475" cellspacing="0" cellpadding="0">
  <tr>
    <td colspan="4" align="right" height="18" width="471">[ <a href="default.asp">Alle film</a> ] [ <a href="find.asp">Søg</a> ] [ <a href="nyfilm.asp">Tilføj ny film</a> ]</td>
  </tr>
    <tr>
      <td width="400" height="20" colspan="4"></td>
    </tr>
  <tr>
    <td width="26">&nbsp;</td>
    <td width="123"><b>Titel</b></td>
    <td width="130"><b>Producent</b></td>
    <td width="186"><b>Udgivelses år</b></td>
    <%
    'Gennemløb (loop) Fundet for værdier og gem dem i variable fx.: I variablen id gemmes Fundet("ID"). Udskriv værdierne

  Do while not Rs.EOF
    id = Rs("ID")
    titel = Rs("titel")
    producent = Rs("producent")
    udgivelsesaar = Rs("udgivelsesaar")
    %>
  <tr>
    <td valign="middle" align="center" width="26"><a href="vis_data_alt.asp?id=<%=id%>"><img border="0" src="../DVD/images/udfold.gif" width="14" height="14"></a></td>
    <td width="123"><%=titel%></td>
    <td width="130"><%=producent%></td>
    <td width="186"><%=udgivelsesaar%></td>
    <%
    Rs.MoveNext
  LOOP
  Rs.Close
  Response.Write "</TABLE>"
%>
  </tr>
</table>
<%
'Luk forbindelse og ryd op
Forbindelse.Close
Set Forbindelse = nothing
Set SQLstreng = nothing

else
  response.Wriite "<center>Tom side</center>"
end if
%>
</body>
</html>
Avatar billede mulles.tk Nybegynder
03. november 2004 - 22:07 #40
COOL
Avatar billede mulles.tk Nybegynder
03. november 2004 - 22:08 #41
...tak tak!!
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