Hej, Hej, Hejsan, Hej, Hej, Hej Mickael. Hej Benni, Vad är det du inte får att fungera? Hej Benni, Jag måste fråga, i databasen, är manad sparat som 1,2,3 osv eller som januari, februari osv? Hej, Ja, där är problemet. Eftersom du har sparat variablerna i databasen som månadernas namn, så Hej Benni, Nu tar vi en sak isänder. Hej Benni, Mikael. Hej Benni, Pröva detta Hej du, Micke. Hej Benni, Micke. Hej Benni, Mikael. Hej Benni,Hämta värdet ur en select-meny
Försöker att få fram värden ur en databas beroende om man valt en viss månad i en select-meny.
Väljer man Alla ur menyen visas Alla månaderna men om jag t ex väljer Maj vill jag "hänga" på ett urval på SQL-satsen som bara väljer ut Dem posterna där Maj ingår.
Som det är nu väljs Alltid Alla oavsett om jag väljer en månad!
Sidan innhåller både val och visning.
Kod:
<body>
<form action="visa_statistik.asp" method="post" name="visa_stat">
Område:
<select name="visa_omrade" class="text_meny">
<option value="">Alla
<option>-----------------
<option value="1">Åldersgrupp
<option value="2">Postnummer
<option value="3">Stad
<option value="4">Kön
</select>
Månad:
<select name="visa_manad" class="text_meny">
<option value="">Alla
<option>-------------------
<option value="1">Januari
<option value="2">Febuari
<option value="3">Mars
<option value="4">April
<option value="5">Maj
<option value="6">Juni
<option value="7">Juli
<option value="8">Augusti
<option value="9">September
<option value="10">Oktober
<option value="11">November
<option value="12">December
</select>
<input type="submit" value="Visa statistik" name="stat_knapp" class="text_meny">
</form>
<%
'#=========Databasanslutning============#
Set Conn = Server.CreateObject("ADODB.Connection")
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2/tavlingen.mdb")
Conn.Open ConnString
'#=====Kolla området=======#
'Dim vilket_omrade
'vilket_omrade = ""
'vilket_omrade = Request.Form("visa_omrade")
'If Not visa_omrade = "" Then
'vilket_omrade = " '"& visa_omrade &"' "
'Else
'vilket_omrade = " * "
'End If
'#=======Kolla månad======#
Dim vilken_manad
vilken_manad = ""
'vilken_manad = Request.Form("visa_manad")
If Not visa_manad = "" Then
vilken_manad = " where manad LIKE '"& visa_manad &"'"
End If
sSql = "select * from tavling_statistik "& vilken_manad
Set rs = Conn.Execute(sSql)
If rs.EOF Then
Response.Write "Det finns inget av vald månad i databasen!"
End If
%>
<table border="0" cellpadding="0" cellspacing="0" class="text_meny">
<%
Do Until rs.EOF
%>
<tr>
<td>Tävlande</td>
<td>Månad</td>
</tr>
<tr>
<td>
<%=rs("fornamn")%> <%=rs("efternamn")%><br>
<%=rs("alder")%><br>
<%=rs("kon")%><br>
<%=rs("postnummer")%><br>
<%=rs("stad")%><br>
"><%=rs("epost")%>
</td>
<td bgcolor="#f9f9f9"><%=rs("manad")%></td>
</tr>
<tr>
<td> </td>
</tr>
<%
rs.MoveNext
Loop
%>
</table>
<%
rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing
%>
</body>
MickeSv: Hämta värdet ur en select-meny
Om tråden hamnat fel så stänger man den eller flyttar till rätt forum. Det är inte god kotym att ha samma fråga postad flera gånger i olika forum.
// JohanSv:Hämta värdet ur en select-meny
Då detta är mitt Första inlägg på denna sidan så tänkte jag inte på att man kunde Stänga en tråd.
Tyckte det var lite knepigt att veta Var man skulle lägga in frågan men man lära sig väl Hela tiden :)
Vet Du något svar på frågan jag skickade in?
MickeSv: Hämta värdet ur en select-meny
Det var väldigt mycket kod, ssom inte var helt lätt att följa. Om jag nu skall sluta leka forumpolis och istället vara hjälpsam så har jag lite funderingar.
Var i koden går det fel?
Har du testat skriva ut din SQL sats innan den körs för att se att den är rätt?
Har du testat köra din SQL sats i annat verktyg för att kolla att den fungerar?
Får du något felmeddelande?
Ju mer information, även saker som jag glömt att fråga om, som du kan lägga in här, desto lättare blir det att hjälpa.
// JohanSv:Hämta värdet ur en select-meny
Det som händer är att ALLA månaderna skrivs ut, även om jag väljer en månad ur Select-menyen.
Det som finns på sidan är Select-menyer för valen samt hämtning och visning ur databasen.
Här har jag kommenterat bort det ena valet!!!
Hur kan man skriva ut en SQL-sats?
Det finns inga felmeddelanden utan sidan visas Kanon bara det att jag inte kan välja månad som ska skrivas ut.
MickeSv: Hämta värdet ur en select-meny
Skall vi se om vi kan reda ut det här.
Först, att skriva ut din SQL gör du med:
response.write SQL
Jag utgår ifrån att du använder dig av en ACCESS-databas.
Ett bra tips är då att göra en fråga där, och kopiera sql:en till ditt script.
'If Not visa_manad = "" Then
'vilken_manad = " where manad LIKE '"& visa_manad &"'"
'End If
'sSql = "select * from tavling_statistik "& vilken_manad
'Set rs = Conn.Execute(sSql)
IF LEN(request.form("visa_manad "))>0 then
vilken_manad = " where manad = "& visa_manad &"" 'jag utgår ifrån att du har sparat visa_manad som tal
END IF
sSql = "select * from tavling_statistik "& vilken_manad
'osv
Jag är nog inte helt nöjd med upplägget av ditt script, men det är ju upp till var och en, men du skall
få ett par goda tips.
Använd inte 'select * from ', namnge helre dina variabler. Det snabbar upp serverns arbete med
databasen och blir lättare att hålla reda på dina fält-variabler.
Kolla alltid att du har ett värde med dig, annars så redirecta till användaren.
Sv:Hämta värdet ur en select-meny
Jag har testat Ditt exempel men fick det inte fungera.
Varför ska fältet vara i formatet TAL?
Är det inte datum eller text(om man nu lägger in månaden som en text-sträng)
Jag är Inte Så grym på Asp men jag försöker.
Hur göra man en ruta där man kan visa kod-snuttar?
Jag behöver nog visa hur jag gjort så du får en större bild av hur allt hänger ihop :)
MickeSv: Hämta värdet ur en select-meny
Får du några felmedelanden?
Eftersom du hämtar variablarna ifrån option med 1 - 12, så vore det ju lämpligt att ha ett fält med
datatypen tal. Då är det lättast att göra sina databas operationer.
Du vinner på att ändra detta.Sv:Hämta värdet ur en select-meny
Hoppas helgen varit bra!
För att Du ska få en bättre "bild" på hur jag gjort så skickar jag delar av koden.
Först är det tävlingssidan där man skriver in namn, stad osv samt där jag skickar in i databasen vilken månad det var.
I databasen skriv värdet av månaden in i ett Text-fält! Kanske inte helt rätt men men...
<%
datumet=Now()
manaden=Month(datumet)
aret=Year(datumet)
Function visa_manad(myInt)
Select Case myInt
Case 1 visa_manad="Januari"
Case 2 visa_manad="Februari"
Case 3 visa_manad="Mars"
Case 4 visa_manad="April"
Case 5 visa_manad="Maj"
Case 6 visa_manad="Juni"
Case 7 visa_manad="Juli"
Case 8 visa_manad="Augusti"
Case 9 visa_manad="September"
Case 10 visa_manad="Oktober"
Case 11 visa_manad="November"
Case 12 visa_manad="December"
End Select
End Function
%>
</head>
<body class="text">
<form action="tavling_update.asp" method="post">
<input type="hidden" name="manad" value="<%=Response.Write(visa_manad(manaden))%>">
Sedan kommer sidan som ska hämta ut dem poster jag vill!
Antingen så ska alla visas eller så ska dem poster som finns i utvald månad visas.
På denna sida sker både val och visning!
<form action="visa_statistik.asp" method="post" name="visa_stat">
Månad:
<select name="visa_manad" class="text_meny">
<option value="">Alla
<option>-------------------
<option value="1">Januari
<option value="2">Februari
<option value="3">Mars
<option value="4">April
<option value="5">Maj
<option value="6">Juni
<option value="7">Juli
<option value="8">Augusti
<option value="9">September
<option value="10">Oktober
<option value="11">November
<option value="12">December
</select>
<input type="submit" value="Visa statistik" name="stat_knapp" class="text_meny">
</form>
<%
'#=========Databasanslutning============#
Set Conn = Server.CreateObject("ADODB.Connection")
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2/tavlingen.mdb")
Conn.Open ConnString
Dim vilken_manad
'vilken_manad = ""
vilken_manad = Request.Form("visa_manad")
If Not visa_manad = "" Then
vilken_manad = " where manad LIKE '"& visa_manad &"'"
End If
Sql = "select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik "& vilken_manad
Set rs = Conn.Execute(Sql)
'If Len(Request.Form("visa_manad "))>0 Then
'vilken_manad = " where manad = "& visa_manad &"" 'jag utgår ifrån att du har sparat visa_manad som tal' NEJ!
'End If
'Sql = "Select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik "& vilken_manad
'Set rs = Conn.Execute(Sql)
If rs.EOF Then
Response.Write "Det finns inget av vald månad i databasen!"
End If
...sedan skrivs värdena ut i en tabell. Men det är här problemet är!
Oavsett om jag väljer en speciell månad så visas Alla posterna.
Där blir inget felmeddelande!
Hoppas jag gjort en klar bild över hur jag tänkt/gjort :)
Mvh Micke
Sv: Hämta värdet ur en select-meny
Hur ser din SQL ut om du skriver ut den?Sv:Hämta värdet ur en select-meny
Det sparas som Januari,...osv
Så som Case-satsen döpt dem.
Men då jag skriver ut Sql-n så säger den om jag valt Juni:
select * from tavling_statistik 6
Här är nog problemet!?
eller?
MickeSv: Hämta värdet ur en select-meny
vore det bättre att skippa din funktion, och lägga in "rätt" namn i option value.
<select name="visa_manad" class="text_meny">
<option value="">Alla
<option>-------------------
<option value="Januari">Januari
<option value="Februari">Februari
<option value="Mars">Mars
<option value="April">April
<option value="Maj">Maj
<option value="Juni">Juni
<option value="Juli">Juli
<option value="Augusti">Augusti
<option value="September">September
<option value="Oktober">Oktober
<option value="November">November
<option value="December">December
</select>
Det finns dock en naktel med detta, du är öppen för SQL-injection, det var därför som jag
föreslog att du skulle ha ditt fält i datatypen tall och i option så skulle du inte ha några dubbelfnuttar
runt value.
I det fallet så skall du aldrig ha "like" i din SQL (det behöver du inte nu heller).
Du får en bättre och säkrare SQL.
Testa...
Sv:Hämta värdet ur en select-meny
Misstänkte att felet var Där...
Men vad menar du med att skippa min funktion? Vilken av dem :)
Är det:
If Not visa_manad = "" Then
vilken_manad = " where manad = '"& visa_manad &"'"
End If
sSql = "select * from tavling_statistik "& vilken_manad
Set rs = Conn.Execute(sSql)
Jag har döpt om value till månadeenas namn men den visar ALLA poster ändå även om jag valt Maj.
Sql-satsen säger dock: Select * From tavling_statistik Maj
Menar du att databas-fältet ska vara i Tal och att jag ska skicka in ett tal-värde genom Case-satsen, alltså ändra i Case-satsen till siffror??? Eller :)
Som sagt, jag lär mig hela tiden :)
Mvh Micke
Sv: Hämta värdet ur en select-meny
Först din SQL:
'If Not visa_manad = "" Then
'vilken_manad = " where manad = '"& visa_manad &"'"
'End If
'sSql = "select * from tavling_statistik "& vilken_manad
'Set rs = Conn.Execute(sSql)
'Gör så här istället för din
if LEN(request("visa_manad ")>0 then
sSql = "select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost
From tavling_statistik where manad = '"& TRIM(request("visa_manad")) &"'"
else
sSql = "select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik "
end if
Set rs = Conn.Execute(sSql)
Vad detta gör är, att den kollar om den får in någonting i request("'Set rs = Conn.Execute(sSql)") med det
snabbaste sättet, nämeligen den kollar om längden är större än 0.
Om den är stärre, då skall den hämta värdet i databasen som överensstämmer med request form.
Annars så skall den hämta allt.
Om du nu inte har något tokigt i din databas, typ mellanslag före eller efter, då skall detta fungera bra.
Sv:Hämta värdet ur en select-meny
Det fungerar BRA att välja ut en månad och att den visas!!! Kanon! Tack!
Då man kommer in på sidan så hittar INTE sidan nått värde. Min If-sats som är om rs.EOF går in och säger att där inte finns nått av värdet. Där visas inget förrän jag valt en månad.
Tanken var att Allt skulle visas i början och om man sen ville se en speciell månad skulle man det.
Hur kan det göra så? ÄR det när värdet är = 0? Men då ska ju satsen lämna Where tavling_statistik... ute!
Själv tror jag att det är nollvärdet men jag är inte säker :)
MickeSv: Hämta värdet ur en select-meny
Ditt problem var just det som if-satsen var avsed att fixa, men den måste ju komma först, innan
någonting annat görs.
Tillvägagångsättet blir ju, är request form tom, så skall den visa allt, annars så skall den visa valet
efter request form.
Det kan tänkas att du får peta lite, så du får det att fungera.Sv:Hämta värdet ur en select-meny
Håller med dig att den måste komma först. Det är ju den "vägen" jag vill ta, först Allt sedan det man vill se noggrannare på.
Har "petat" i olika riktningar nu :) men jag får det Inte att komma fram något värde då man kommer in på sidan.
Så här har jag skrivit sist:
<code>
<select name="visa_manad" class="text_meny">
<option value="Alla" SELECTED>Alla
<option>-------------------
<option value="Januari">Januari
<option value="Februari">Februari
<option value="Mars">Mars
<option value="April">April
<option value="Maj">Maj
<option value="Juni">Juni
<option value="Juli">Juli
<option value="Augusti">Augusti
<option value="September">September
<option value="Oktober">Oktober
<option value="November">November
<option value="December">December
</select>
If (Request.Form("visa_manad ")="Alla") Then
sSql = "select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik "
End If
'Set rs = Conn.Execute(sSql)
If LEN(Request("visa_manad ")>0) Then
sSql = "Select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik Where manad = '"& TRIM(Request("visa_manad")) &"'"
End If
Set rs = Conn.Execute(sSql)
<div id="visa_statistik_allt" class="visa_statistik_allt" style="position:absolute; top:150">
<table border="0" cellpadding="0" cellspacing="0" class="text_meny">
<%
Do Until rs.EOF
%>
<tr>
<td>Tävlande</td>
<td>Månad</td>
</tr>
<tr>
<td>
<%=rs("fornamn")%> <%=rs("efternamn")%><br>
<%=rs("alder")%><br>
<%=rs("kon")%><br>
<%=rs("postnummer")%><br>
<%=rs("stad")%><br>
"><%=rs("epost")%>
</td>
<td bgcolor="#f9f9f9"><%=rs("manad")%></td>
</tr>
<tr>
<td> </td>
</tr>
<%
rs.MoveNext
Loop
%>
</table>
</div>
</code>
Har vridit och vänt på ordning och If-satsen och Nu tycker jag att det är Så enkel If-at så det borde fungera :) Har använt Alla men även 0 efter =-tecknet.
Men Varför märker sidan inte av den första If-satsen där Alla ska ingå?
Då jag vill skriva ut sSql-satsen där den kollar Alla så går inte det. Där skrivs Inte ut nått???
Mvh MickeSv: Hämta värdet ur en select-meny
If Request("visa_manad ")<>"Alla" Then
sSql = "Select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik Where manad = '"& TRIM(Request("visa_manad")) &"'"
else
sSql = "select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik "
End If
Set rs = Conn.Execute(sSql)
Sv:Hämta värdet ur en select-meny
Nopp :)
Inget då heller...
Och det konstiga är att om jag väljer Maj får jag fram Allt om Maj men då jag Uppdatarar sidan hämtar sidan in Maj-posterna Fast jag inte gjort det valet på nytt. Precis som förfrågan ligger kvar...???!
Vill Du se Hela koden som finns på sidan? Det kanske ger Dig en logisk förklaring på vad som felar för Jag ser inte längre nått logiskt fel!
Edit:
Fått ut sSql-n:
Select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik Where manad = 'Alla'
Object required: ''
HUR kan den välja DET???
Inte så konstigt att den Inte hittar nått! Det finns ju ingen post där Alla finns med!
Men HUR kan den välja "som Alla"???
Vill Du se hela koden? Inte Så mycket :)
MickeSv: Hämta värdet ur en select-meny
Jag börjar fundera, ligger allt inom form-tagen?
Hur postar du, med post eller get?Sv:Hämta värdet ur en select-meny
Jag använder post!
Jag tog mig friheten att skicka in koden :)
Hoppas det var okej!
Börjar vid body!
<body>
<form action="visa_statistik.asp" method="post" name="visa_stat">
Månad:
<select name="visa_manad" class="text_meny">
<option value="Alla" SELECTED>Alla
<option>-------------------
<option value="Januari">Januari
<option value="Februari">Februari
<option value="Mars">Mars
<option value="April">April
<option value="Maj">Maj
<option value="Juni">Juni
<option value="Juli">Juli
<option value="Augusti">Augusti
<option value="September">September
<option value="Oktober">Oktober
<option value="November">November
<option value="December">December
</select>
<input type="submit" value="Visa statistik" name="stat_knapp" class="text_meny">
</form>
<%
'#=========Databasanslutning============#
Set Conn = Server.CreateObject("ADODB.Connection")
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db2/tavlingen.mdb")
Conn.Open ConnString
'#=====Kolla månad enlig Benni======#
If Request("visa_manad ") <> "Alla" Then
sSql = "Select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik Where manad = '"& TRIM(Request("visa_manad")) &"'"
Else
sSql = "Select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik"
End If
Response.Write sSql
'Set rs = Conn.Execute(sSql)
%>
<div id="visa_statistik_allt" class="visa_statistik_allt" style="position:absolute; top:150">
<table border="0" cellpadding="0" cellspacing="0" class="text_meny">
<%
Do Until rs.EOF
%>
<tr>
<td>Tävlande</td>
<td>Månad</td>
</tr>
<tr>
<td>
<%=rs("fornamn")%> <%=rs("efternamn")%><br>
<%=rs("alder")%><br>
<%=rs("kon")%><br>
<%=rs("postnummer")%><br>
<%=rs("stad")%><br>
"><%=rs("epost")%>
</td>
<td bgcolor="#f9f9f9"><%=rs("manad")%></td>
</tr>
<tr>
<td> </td>
</tr>
<%
rs.MoveNext
Loop
%>
</table>
</div>
<%
rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing
%>
</body>
Här är Hela koden som är aktiv!
Jag ser verkligen Inte Varför det inte fungerar...Lite skrattretande och frustrerande :)
Jag uppskattar verkligen Din hjälp!!!
Skönt med "bollplank" när man inte själv kommer på felen!
Micke
Sv: Hämta värdet ur en select-meny
Det var lite galet i if-satsen.
Detta fungerar.
if request.form("visa_manad") ="" then
sSql = "Select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik"
Elseif request.form("visa_manad") ="Alla" then
sSql = "Select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik"
else
sSql = "Select manad, fornamn, efternamn, alder, kon, postnummer, stad, epost From tavling_statistik Where manad = '"& TRIM(Request("visa_manad")) &"'"
end if
Lycka till.
Sv:Hämta värdet ur en select-meny
Det fungerar TOPPEN!!!
Stort TACK!
Härligt med hjälpsamma personer.
EDIT1: Är det svårt att få det man valt i selecten att synas kvar där? Nu visas ju Alla även om man valt Maj!
EDIT2: Nu vet jag vad felet var med förra satsen: Där var ett mellanslag i
If Request("visa_manad ") <> "Alla" Then
så lite kan det vara ;)
Skulle du vilja se på en röst-funktion? Får inte Update att fungera. Kan se uträkningen om jag själv lagt in ett värde.
MickeSv: Hämta värdet ur en select-meny
Vi tar väl detta först, sedan så bör du avsluta denna tråden, och starta en ny.
Principen som jag har gjort, är en sub, som du ropar på, väldigt enkelt.
<%
Sub KollaVarde(vVarde,checkVarde)
Dim sSheck
IF vVarde = checkVarde THEN
vVarde ="selected=""selected"""
ELSE
vVarde =""
END IF
response.write vVarde
End Sub
%>
'Du använder den så här
<option <% CALL KollaVarde("Januari",request.form("visa_manad")) %>value="Januari">Januari
Som jag kan se det, så bör du väll ha fått med vad du ville ha???
Sv:Hämta värdet ur en select-meny
Precis vad jag tänkte föreslå!
Ska testa suben!
Tack!
Micke