Just nu i M3-nätverket
Gå till innehåll

Sortera genom rullist beroende på värde


hellomoto

Rekommendera Poster

hej igen!

Den här gången hoppas jag att mitt problem blir enklare att lösa ;)

Jag har en sida som visar alla gjorda anmälningar till olika kurser. Jag vill att man genom en rullist som listar alla kurserna från tblKurs, ska kunna välja en kurs och se alla som är anmälda till den (deras info finns i tblDeltagare).

 

 

Själva funktionen då. Där frågetecknet är undrar jag vad som ska stå för att den ska ta det id som blir beroende på vilken kurs man väljer att se.

[log]<% Dim sortera

If Request.QueryString("sortera") = "" Then

sortera = "id" 'standradkolumnen

Else

sortera = Request.QueryString("sortera")

End If

 

Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("/db/anmalan.mdb")

sql = "Select * From tblDeltagare WHERE id = ?"

%>[/log]

 

 

Den här koden hämtar kurserna från tblKurs. Den röda koden visar mitt misslyckade försök till att länka.

[log]<% Set Connect = Server.CreateObject("ADODB.Connection")

Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("/db/anmalan.mdb")

 

strSQL = "SELECT id, strKursnamn FROM tblKurs ORDER BY id ASC"

Set RecSet = Connect.Execute(strSQL)

%>

<select name="dans" id="dans">

<% RecSet.MoveFirst() %>

<% Do Until RecSet.Eof %>

<option value="visa.asp?sortera=<% =RecSet("id") %>"><% =RecSet("strKursnamn") %></option>

<% RecSet.MoveNext

Loop

RecSet.Close

Set RecSet= nothing

Connect.Close

Set Connect = nothing

%>

</select>[/log]

 

Hoppas jag har kunnat förklara någorlunda begripligt.

 

[inlägget ändrat 2006-11-23 14:32:29 av hellomoto]

Länk till kommentar
Dela på andra webbplatser

så här skulle jag ha gjort:

 

<% Dim sortera
If not Request.QueryString("sortera") = "" Then
sortera = Request.QueryString("sortera")

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("/db/anmalan.mdb")
sql = "Select * From tblDeltagare WHERE id = " & sortera

else

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("/db/anmalan.mdb")

strSQL = "SELECT id, strKursnamn FROM tblKurs ORDER BY id ASC"
Set RecSet = Connect.Execute(strSQL)
%>
<select name="sortera" id="sortera">
<% RecSet.MoveFirst() %>
<% Do Until RecSet.Eof %>
<option value="<% =RecSet("id") %>"><% =RecSet("strKursnamn") %></option>
<% RecSet.MoveNext
Loop
RecSet.Close
Set RecSet= nothing
Connect.Close
Set Connect = nothing
%>
</select>
End If
%>

 

om du kan berätta hur din form taggen ser ut så kanska jag kan utveckla koden ngt bättre.

 

Länk till kommentar
Dela på andra webbplatser

Hoppas jag har kunnat förklara någorlunda begripligt.
Nja, hyfsat att förstå (tror jag) om man följt din tidigare tråd.

 

Jag tolkar ditt önskemål som:

Du vill ha en sida som har en dropdownlista.
Dropdownlistan skall lista alla kurser som finns i databastabellen tblKurs. 
När man väljer (ska det vara på onChange eller onSubmit?) någon kurs i denna lista så skall sidan visa namnet på alla som är anmälda till den valda kursen.
Personer som kan vara anmälda till en kurs finns i tabellen tblDeltagare.
Personer som är anmälda till en kurs har kursens id sparat i fältet kursid.

Stämmer det (i så fall varför skrev du inte det)?

 

Om det är så du vill ha det kan du testa:[log]

[MÄRK]<%[/MÄRK]
strKursid = [b]Request[/b]([GRÅ]"kursid"[/GRÅ])

[color="#0000ff"]Set[/color] conn = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])
connStr = [GRÅ]"Provider=Microsoft.Jet.OLEDB.4.0; Data Source="[/GRÅ] & [b]Server[/b].MapPath([GRÅ]"/db/anmalan.mdb"[/GRÅ])
conn.open connStr

[color="#0000ff"]Set[/color] RS = conn.[color="#0000ff"]Execute[/color]([GRÅ]"SELECT id, strKursnamn FROM tblKurs ORDER BY id ASC"[/GRÅ])
[color="#0000ff"]If[/color] [color="#0000ff"]Not[/color] RS.EOF [color="#0000ff"]Then[/color]
   [MÄRK]%>[/MÄRK]
   <form method=[GRÅ]"post"[/GRÅ] action=[GRÅ]"?"[/GRÅ]>
      <[color="#0000ff"]Select[/color] name=[GRÅ]"kursid"[/GRÅ]>
   [MÄRK]<%[/MÄRK]
   [color="#0000ff"]Do[/color] Until RS.EOF
      [color="#0000ff"]If[/color] [color="#0000ff"]CStr[/color](strKursid)=[color="#0000ff"]CStr[/color](RS([GRÅ]"id"[/GRÅ])) [color="#0000ff"]Then[/color] strSel=[GRÅ]"SELECTED"[/GRÅ] [color="#0000ff"]Else[/color] strSel=[GRÅ]""[/GRÅ] [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
      [MÄRK]%>[/MÄRK]<option value=[GRÅ]"<% =RS("[/GRÅ]id[GRÅ]") %>"[/GRÅ] [MÄRK]<%[/MÄRK]=strSel%>>[MÄRK]<%[/MÄRK] =RS([GRÅ]"strKursnamn"[/GRÅ]) [MÄRK]%>[/MÄRK]</option>[MÄRK]<%[/MÄRK] 
      RS.MoveNext
   [color="#0000ff"]Loop[/color]
   [MÄRK]%>[/MÄRK]
      </[color="#0000ff"]Select[/color]>
      <input type=[GRÅ]"submit"[/GRÅ] value=[GRÅ]"Visa"[/GRÅ]>
   </form>[MÄRK]<%[/MÄRK]
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
[color="#0000ff"]Set[/color] RS= [color="#0000ff"]Nothing[/color]

[color="#0000ff"]If[/color] strSort<>[GRÅ]""[/GRÅ] [color="#0000ff"]Then[/color]
   [color="#0000ff"]Set[/color] RS = conn.[color="#0000ff"]Execute[/color]([GRÅ]"SELECT COUNT(*), strFornamn, strEfternamn FROM tblDeltagare WHERE kursid="[/GRÅ]&strKursid&[GRÅ]""[/GRÅ])
   [color="#0000ff"]If[/color] [color="#0000ff"]Not[/color] RS.EOF [color="#0000ff"]Then[/color]
      [b]Response[/b].Write([GRÅ]"<p>"[/GRÅ]&RS(0)&[GRÅ]"st anmälda till kursen</p><hr>"[/GRÅ])
      [color="#0000ff"]Do[/color] Until RS.EOF
         i=i+1
         [b]Response[/b].Write(i&[GRÅ]". "[/GRÅ]&RS([GRÅ]"strFornamn"[/GRÅ])&[GRÅ]" "[/GRÅ]&RS([GRÅ]"strEfternamn"[/GRÅ])&[GRÅ]"<br>"[/GRÅ])
         RS.MoveNext
      [color="#0000ff"]Loop[/color]
      [b]Response[/b].Write([GRÅ]"<hr>"[/GRÅ])
   [color="#0000ff"]Else[/color]
      [b]Response[/b].Write([GRÅ]"Inga anmälda till kursen!"[/GRÅ])
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
   [color="#0000ff"]Set[/color] RS = [color="#0000ff"]Nothing[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

conn.Close
[color="#0000ff"]Set[/color] conn = [color="#0000ff"]Nothing[/color]
[MÄRK]%>[/MÄRK]

[/log]Ladda ned från:

http://eforum.kicks-ass.net/codeview/?file=anmalan.asp'>http://eforum.kicks-ass.net/codeview/?file=anmalan.asp

 

[edit:]Är det meningen att en deltagare enbart ska kunna vara anmäld till en kurs i taget eller är det:

a) Jag som inte förstått hur man anmäler sig till en kurs?

B) Dålig databasdesign?

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2006-11-24 01:01:10 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Det var precis så jag menade Cluster. Ska testa din kod, tack!

De flesta kommer bara anmäla sig till en kurs, men om någon vill vara med på flera så går det. Då fyller man i anmälningsformuläret en gång till. Det är säkerligen inte bästa databasdesignen men det funkar iaf.

 

[inlägget ändrat 2006-11-24 09:11:11 av hellomoto]

Länk till kommentar
Dela på andra webbplatser

Då fyller man i anmälningsformuläret en gång till. Det är säkerligen inte bästa databasdesignen men det funkar iaf.
Nej det är det nog inte eftersom du då kan få "oändligt" många dubbletter av deltagare.

 

Jag skulle nog ha satt upp tre tabeller för att hantera detta.

En för Deltagare

En för Kurser

En för KursDeltagare

Tabeller kursdeltagare har då DeltagarId kopplat till KursId vilka tillsammans skapar unik nyckel. På så sätt kan varje deltagare delta i flera kurser och varje kurs kan ha flera deltagare.

 

Vill man vidareutveckla detta så kan man ju lägga till en tabell för Kurstillfällen

som har kursid som främmande nyckel och där tabellen för kursdeltagare istället för kursid har kurstillfälles-id.

 

Innan man sätter igång med ett sådant här projekt är det bra om man lägger en hel del tid på sin databas design så att man inte målar in sig i ett hörn. Det är bra mycket jobbigare att göra om än att göra rätt från början.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

Innan man sätter igång med ett sådant här projekt är det bra om man lägger en hel del tid på sin databas design så att man inte målar in sig i ett hörn. Det är bra mycket jobbigare att göra om än att göra rätt från början.

 

Ja verkligen! Tyvärr är det är svårt att tänka några steg framåt innan man har fått lite rutin. Och man har gärna för stora planer som man inte har kunskap att kunna genomföra på ett bra sätt... (jag vet ;) Tur att det finns snälla personer med tålamod att hjälpa oss tröga!

 

För att återgå till sortera-funktionen...

<form method="post" action="?"> Action är väl där adressen?sortera= ska va för att det ska funka, men hur ska jag skriva den för att det ska blir rätt?

 

[inlägget ändrat 2006-11-26 12:09:40 av hellomoto]

Länk till kommentar
Dela på andra webbplatser

Fin bild :) Jag tror jag förstår vad du menar, get syns i adressfältet, post gör det inte. Men jag undrar fortfarande vad jag ska ha för action så att den sorterar när jag trycker på submit. För jag måste väl ha en action?

 

Länk till kommentar
Dela på andra webbplatser

tack!

 

action är bara till för vilken sida den ska skicka "info" till.

du kan lägga till en input som är hidden, så här:

<input type="hidden" name="sortera" value="ja">

 

I "value" kan du ha det du vill ha

 

På det exempel så får du så här när du skickar:

?sortera=ja

 

Länk till kommentar
Dela på andra webbplatser

För att återgå till sortera-funktionen...
Måste erkänna att jag inte riktigt förstod vad du menade med sortera. Vad är det som du vill sortera? Dvs. utöver dropdownlistan som ju skall vara sorterad i både din och min kod.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

Väljer man första kursen på dropdownlistan ska man se alla anmälningar till den. Dvs man sorterar ut de anmälningarna ur databasen. Precis som på en del sidor när man klickar på rubriken Namn och listan sorteras i namn-ordning, fast via en dropdown istället. visa.asp?sortera=kurs1 typ.

 

Länk till kommentar
Dela på andra webbplatser

Utan att ha läst igenom hela tråden så får du hämta kurserna med ungefär såna här villkor:

WHERE kursId = Request.QueryString("kursId") Order By kursName ASC

Se dock till att säkerställa vad det är som finns i din QueryString innan du använder den.

Lägg gärna den i en variabel och använd variabeln istället i din SELECT-fråga.

Är din QueryString tom kan du ju ge variebeln ett eget värde, typ 0.

Mina namn på kolumnerna är bara påhittade men du förstår hur jag menar.

 

Länk till kommentar
Dela på andra webbplatser

Ok, filtrering snarare än sortering med andra ord.

Är det inte det som min kod gör?

//eforum.idg.se/viewmsg.asp?EntriesId=888830#889003

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...