Avatar billede musti776 Nybegynder
19. december 2004 - 12:23 Der er 29 kommentarer og
1 løsning

where problem

Hej med jer..

jeg er igang med at lave en hjemmeside for en pizzaria, men har lidt problemer med "menu" siden.

det jeg havde tænkt på var, at siderne bliver i øjeblikket kaldt via select case (id) osv...

kan man så kun nøjes med en side hvordan den så tjekker hvilke id der er blevet kaldt på også ligger den id i sql sætningen så skifter til

sql = "select * from menu where kategori= "den kaldte id" ORDER by nr ASC"

Håber i forstår hvad jeg mener...
På forhånd tak for jeres hjælp...

Musti
Avatar billede apo Praktikant
19. december 2004 - 13:31 #1
Hmm... Hvis jeg har forstået dig korrekt, vil du have den til at hente id'et fra databasen ved at kalde det fra querystring'en... Det må kunne gøres således:

SQL = "SELECT Id FROM menu WHERE Id=" & Request.QueryString("Id")

Sig til hvis jeg har misforstået dig :-)

Apo
Avatar billede apo Praktikant
19. december 2004 - 13:33 #2
Måske er denne mere korrekt:

SQL = "SELECT * FROM menu WHERE Id=" & Request.QueryString("Id")

Apo
Avatar billede musti776 Nybegynder
19. december 2004 - 14:18 #3
hejsa, nu har jeg lavet det som du siger;
<%
set conn=server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/xxx.mdb")
sql = "select * from menu where kategori="& Request.QueryString("Id")
set rs=Conn.Execute(SQL)
%>

men den melder altså "Uspecificeret fejl"

hvis jeg skal prøve på at uddybe lidt mere...
f.eks. hvis man kalder på "pizza" så er der et link på denne måde "default.asp?id=pizza"
som så kalder på pizza.asp

så havde jeg så tænkt på at få de rigtige produkter ude ved at bruge de id'er fra links med den sql sætning jeg prøver på at lave...

jeg kan dårlig nok selv forstå hvad jeg skriver, men lad os nu håbe at du kan :)
Avatar billede apo Praktikant
19. december 2004 - 14:30 #4
Jeg arbejder på det...
Avatar billede musti776 Nybegynder
19. december 2004 - 14:30 #5
takker :)
Avatar billede apo Praktikant
19. december 2004 - 14:35 #6
Prøv med følgende:

<%
' Åbner database
DSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/xxx.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open DSN

' Henter Id fra database via querystring
SQL = "SELECT * FROM menu WHERE (Id = " & Request.QueryString("Id") & ")"
Set rs = myConn.Execute(strSQL)
%>

Du skal kalde dit id med:

"WHERE (Id ... "

I stedet for:

"WHERE (kategori ... "


Id'et hentes med følgende link:

<a href="default.asp?Id=<%=rs("Id")%>"></a>

Prøv om det virker :-)

Apo
Avatar billede apo Praktikant
19. december 2004 - 14:37 #7
Ooops (fejl)... Sætningen:

Set rs = myConn.Execute(strSQL)

udskiftes med:

Set rs = Conn.Execute(strSQL)

:-)

Apo
Avatar billede apo Praktikant
19. december 2004 - 14:40 #8
Damn... Jeg bliver ved :-/

Sætningen er:

Set rs = Conn.Execute(SQL)

Apo
Avatar billede apo Praktikant
19. december 2004 - 14:50 #9
Nøj, hvor jeg roder i dag :-)

Hvis du vil hente indholdet ud på siden, kalder du det (via id'et) som <%=rs("Id")%> og <%=rs("pizzanummer")%> o.s.v.

Altså: <%=rs("x")%> hvor x er det felt du vil hente.

Apo
Avatar billede musti776 Nybegynder
19. december 2004 - 14:52 #10
den melder denne fejl når jeg vil hente siden med alle links ;
Typer stemmer ikke overens: 'rs'
/croco.dk/menu.asp, line 3
altså denne >>>> <a href="default.asp?id=<%=rs("pizza")%>">Pizza</a>
Avatar billede apo Praktikant
19. december 2004 - 15:00 #11
Ja, min fejl :-/

Det link den melder fejl på er et der skal placeres i html'en, hvis du vil vise en indholdsliste med alle pizzaer i databasen. Kan gøres således (placeres i <body>):

<body>
...
<%
Do Until rs.EOF
%>
<a href="default.asp?id=<%=rs("Id")%>"><%=rs("pizza")%></a>
<%
      rs.MoveNext
  Loop

  rs.Close
  Conn.Close
  Set Conn = Nothing
%>
...
</body>

Apo
Avatar billede apo Praktikant
19. december 2004 - 15:01 #12
Jeg bliver lidt forvirret over dine feltnavne. Kan du ikke give mig en kort liste over hvad de enkelte navne repræsenterer (pizza, o.s.v.)?

Apo
Avatar billede musti776 Nybegynder
19. december 2004 - 15:09 #13
hmm...ok...
men det er ikke lige sådan det skal virke...

i menu.asp siden har jeg dem placeret sådan
Pizza
Speciel Pizza
Mexicansk Pizza
Deep Pan Pizza
Indbagt Pizza
Pizza Sandwich

når man først klikker på et af de her links skal den tjekke ide'en også hente den produkt gruppe som man klikker på...

i db har jeg indtastet dem sådan;
autoid
id - "der er her jeg definere kategori"(pizza, mexicansk_pizza, deep_pan_pizza osv)
nr
navn
tilbehor
pris1
pris2
pris3

når man f.eks. vælger på "pizza", skal den kun hente info om kun de prdukter hvor id er = pizza i db en...

takker for din tålmodighed :)
Avatar billede apo Praktikant
19. december 2004 - 15:33 #14
Så lidt ;-) Okay, så kan jeg bedre forstå min forvirring :-D

Prøv følgende:

<%
' Åbner database
  DSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/xxx.mdb")
  Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.Open DSN

' Henter Id fra database via querystring
  SQL = "SELECT * FROM menu WHERE (Id = " & Request.QueryString("Id") & " )"
  Set rs = myConn.Execute(strSQL)
%>

I html koden indsætter du følgende mellem <body> og </body>:

<body>
...
<%
Do Until rs.EOF
%>
<%=rs("nr")%> <%=rs("navn")%> <%=rs("tilbehor")%> <%=rs("pris1")%> <%=rs("pris2")%> <%=rs("pris3")%>
<%
      rs.MoveNext
  Loop

  rs.Close
  Conn.Close
  Set Conn = Nothing
%>
...
</body>

Du kan lave en tabel i html'en hvor du indsætter disse <%=rs("x")%> i hver sin celle, så det bliver stillet pænt op :-)

Er det sådan du mener?

Apo
Avatar billede apo Praktikant
19. december 2004 - 15:38 #15
Nu lavede jeg det nummer igen. myConn skal selvfølgelig erstattes med Conn :-)

Apo
Avatar billede apo Praktikant
19. december 2004 - 15:40 #16
... Og det samme gælder strSQL > SQL :-/

Sådan her:

<%
' Åbner database
  DSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/xxx.mdb")
  Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.Open DSN

' Henter Id fra database via querystring
  SQL = "SELECT * FROM menu WHERE (Id = " & Request.QueryString("Id") & " )"
  Set rs = Conn.Execute(SQL)
%>

I html koden indsætter du følgende mellem <body> og </body>:

<body>
...
<%
Do Until rs.EOF
%>
<%=rs("nr")%> <%=rs("navn")%> <%=rs("tilbehor")%> <%=rs("pris1")%> <%=rs("pris2")%> <%=rs("pris3")%>
<%
      rs.MoveNext
  Loop

  rs.Close
  Conn.Close
  Set Conn = Nothing
%>
...
</body>

Apo
Avatar billede apo Praktikant
19. december 2004 - 15:52 #17
Jeg er virkelig ked af rodet (jeg er træt og burde ligge i min seng), men jeg har en rettelse mere :-(

Når man søger efter ord eller sætninger i en database, skal man bruge LIKE (sammenligning). Det har jeg nu rettet, så denne burde virke:

Erstat følgende linje:

SQL = "SELECT * FROM menu WHERE (Id = " & Request.QueryString("Id") & " )"

Med:

SQL = "SELECT * FROM menu WHERE (Id LIKE '%" & Request.QueryString("Id") & "%')"

På den måde vil du kunne hente alle linjer i databasen med samme id'et (f.eks. pizza, speciel pizza).

Apo
Avatar billede musti776 Nybegynder
19. december 2004 - 16:09 #18
jeg kan stadig ikke åbne menu.asp da den melder denne fejl;
Typer stemmer ikke overens: 'rs'
/croco.dk/menu.asp, line 3
altså denne >>>> <a href="default.asp?id=<%=rs("id")%>"><%=rs("pizza")%></a>
Avatar billede apo Praktikant
19. december 2004 - 16:12 #19
Er den placeret mellem <body> og </body> eller mellem <% og %>?
Avatar billede musti776 Nybegynder
19. december 2004 - 16:18 #20
jep :(
Avatar billede apo Praktikant
19. december 2004 - 16:20 #21
Jep til hvad?

Prøv at slette den...
Avatar billede musti776 Nybegynder
19. december 2004 - 16:22 #22
jep til at den er placeret mellem <body> tags og er mellem <%%>
Avatar billede apo Praktikant
19. december 2004 - 16:25 #23
Har du rettet de ting jeg har skrevet?
Avatar billede musti776 Nybegynder
19. december 2004 - 16:30 #24
ja, kan man ikke bruge den gamle form som jeg havde skrevet før, den med default.asp?id=pizza ??
når jeg laver den på denne måde kommer menu siden frem, og jeg kan også klikke mig videre til pizza...

men den henter bare ikke listen med alle pizzaerne..
sådan ser pizza.asp ud;

<%
Dim titel2
Select Case LCase(request.querystring("id"))
        case "pizza"
            titel2 = "<b>Pizza</b>"
        case "staerk_mexicansk_pizza"
            titel2 = "<b>Stærk Mexicansk Pizza</b>"
        case else
            titel2 = "<b>Test</b>"
  end select
%>
<%
set conn=server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/xxx.mdb")
sql = "SELECT * FROM menu WHERE (id LIKE '%" & Request.QueryString("id") & "%')"
set rs=Conn.Execute(sql)
%>

<table width="520" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>&nbsp;</td>
    <td colspan="2"><%=titel2%></td>
    <td width="40">&nbsp;</td>
    <td width="40">&nbsp;</td>
    <td width="60">&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="2">&nbsp;</td>
    <td width="40">Alm.</td>
    <td width="40">Fam.</td>
    <td width="60">Fam XL</td>
  </tr>
  <%
  If Not rs.EOF Then rs.MoveNext
While Not rs.EOF
%>
  <tr>
    <td width="30"><%=rs("nr")%></td>
    <td><%= rs("navn")%></td>
    <td>&nbsp;</td>
    <td width="40"><%= rs("pris1")%></td>
    <td width="40"><%= rs("pris2")%></td>
    <td width="60"><%= rs("pris3")%></td>
  </tr>
  <%
  rs.MoveNext
Wend
%>
</table>
Avatar billede apo Praktikant
19. december 2004 - 17:15 #25
Her får du mit sidste bud på hvordan det kan laves. Jeg har brugt alt for meget tid på det her spørgsmål, og har selv nogle ting jeg skal nå i dag. Det håber jeg at du forstår :-(

Følgende eksempel viser 3 slags indhold (på samme side), som kaldes via querystring'en (adresselinjen). 1) Lister menukategorierne. 2) Lister menuunderpunkterne. og 3) Lister alt indhold. Det må næsten være noget du kan bruge:

<%
Dim titel2
Select Case LCase(request.querystring("id"))
      case "pizza"
            titel2 = "<b>Pizza</b>"
      case "staerk_mexicansk_pizza"
            titel2 = "<b>Stærk Mexicansk Pizza</b>"
      case else
            titel2 = "<b>Test</b>"
end select
%>
<html>

<head>
<title><%=titel2%></title>
</head>

<body>
<%
' Lister menukategorier
If Request.QueryString("id") = "" Then
  set conn=server.CreateObject("ADODB.Connection")
  Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/xxx.mdb")
  sql = "SELECT * FROM menu ORDER by ASC"
  set rs=Conn.Execute(sql)

  Do While Not rs.EOF
%>
<a href="menu.asp?id=<%=rs("id")%>"><%=rs("id")%>
</a><%
      rs.MoveNext
  Loop
  rs.Close
  Conn.Close
  Set Conn = Nothing
End if
%>
<%
' Lister menupunkter for den enkelte kategori
If Request.QueryString("id") <> "" Then
  set conn=server.CreateObject("ADODB.Connection")
  Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/xxx.mdb")
  sql = "SELECT * FROM menu WHERE (id LIKE '%" & Request.QueryString("id") & "%') ORDER by ASC"
  set rs=Conn.Execute(sql)
%>


<table width="520" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td></td>
    <td colspan="2"><%=titel2%>
</td>
    <td width="40"></td>
    <td width="40"></td>
    <td width="60"></td>
  </tr>
  <tr>
    <td></td>
    <td colspan="2"></td>
    <td width="40">Alm.</td>
    <td width="40">Fam.</td>
    <td width="60">Fam XL</td>
  </tr>
<%
  Do While Not rs.EOF
%>
  <tr>
    <td width="30"><%=rs("nr")%>
</td>
    <td><%= rs("navn")%>
</td>
    <td></td>
    <td width="40"><%= rs("pris1")%>
</td>
    <td width="40"><%= rs("pris2")%>
</td>
    <td width="60"><%= rs("pris3")%>
</td>
  </tr>
<%
    rs.MoveNext
  Loop
  rs.Close
  Conn.Close
  Set Conn = Nothing
%>
</table>
<%
End If
%>
<%
' Lister alt indhold i databasen
If Request.QueryString("list") = "all" Then
  set conn=server.CreateObject("ADODB.Connection")
  Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/xxx.mdb")
  sql = "SELECT * FROM menu ORDER by ASC"
  set rs=Conn.Execute(sql)
%>

<table width="520" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td></td>
    <td colspan="2"><%=titel2%>
</td>
    <td width="40"></td>
    <td width="40"></td>
    <td width="60"></td>
  </tr>
  <tr>
    <td></td>
    <td colspan="2"></td>
    <td width="40">Alm.</td>
    <td width="40">Fam.</td>
    <td width="60">Fam XL</td>
  </tr>
<%
  Do While Not rs.EOF
%>
  <tr>
    <td width="30"><%=rs("nr")%>
</td>
    <td><%= rs("navn")%>
</td>
    <td></td>
    <td width="40"><%= rs("pris1")%>
</td>
    <td width="40"><%= rs("pris2")%>
</td>
    <td width="60"><%= rs("pris3")%>
</td>
  </tr>
<%
    rs.MoveNext
  Loop
  rs.Close
  Conn.Close
  Set Conn = Nothing
%>
</table>
<%
End If
%>
</body>
</html>

Sådan hentes siderne:
Liste over menukategorierne (pizza, speciel pizza, o.s.v.) hentes via: menu.asp
Liste over menupunkter under den enkelte kategori hentes via: menu.asp?id=x (x = kategorinavn).
Alt indhold (alle pizzaer) hentes via: menu.asp?list=all

Jeg håber du kan bruge det :-)

Apo
Avatar billede musti776 Nybegynder
19. december 2004 - 18:01 #26
det er bare kanon apo :) den er næsten som jeg gerne vil have det..
der er bare et mindre problem, da du i sql sætningen kalder den med LIKE, så henter den også andre produkter samtidig med den burde ændre...

kan man ikke ændre sql sætningen med = istedet for LIKE?
lig også lige et svar :)
Du har bare været til store hjælp Apo...Mange tak :)
Avatar billede musti776 Nybegynder
19. december 2004 - 18:04 #27
det har jeg så selv fundet ud af;
rettet den bare til ;
SQL = "SELECT * FROM menu WHERE id=" & Request.QueryString("id")

takker igen Apo
Være venlig at ligge et svar :)
Avatar billede apo Praktikant
19. december 2004 - 18:32 #28
Så lægger jeg et svar ;-)

Lækkert at du kunne bruge det, og godt at du selv fandt ud af at ændre LIKE.

Hmm... Jeg var ellers sikker på at det skulle være LIKE? Nå, men som nævnt er jeg også pænt træt lige nu (jeg har ikke sovet siden kl. 11 i går formiddags, så jeg er godt rundtosset) 8-|

Happy coding... :-)

Apo
Avatar billede musti776 Nybegynder
19. december 2004 - 18:35 #29
i lige måde ;o)
Avatar billede apo Praktikant
19. december 2004 - 18:37 #30
Glad for at kunne hjælpe, og tak for points :-)

Apo
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