|
| sum indenfor en startdato og en slutdato Fra : Michael Tillgaard |
Dato : 25-02-11 19:53 |
|
Tabel (elevresultat) med poster af bøger elever har læst. Til
hver post er knyttet et elevID for den enkelte elev, et antal
sider (antalsider), og en dato fx. 25-02-2011.
Jeg vil gerne kunne lave et udtræk af fx. en specifik elev
(elevID=35243) og få summen af antal sider læst mellem d.
01-01-2011 og 20-02-2011. Datoerne henter jeg fra en anden tabel
(LKontrakt)med en række der hedder kontraktstart og kontraktslut.
ElevID, kontraktstart og kontraktslut henter jeg via en
Request.QueryString.
SELECT SUM(antalsider)FROM elevresultat WHERE elevid = " &
Request.Querystring("elevid")
Der hvor jeg virkelig død er omkring datoerne. Jeg kan se at det
er et problem med dansk dato umiddelbart.
Kan nogen hjælpe lidt (meget) på vej?
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (25-02-2011)
| Kommentar Fra : Leif Neland |
Dato : 25-02-11 22:10 |
|
Den 25-02-2011 19:53, Michael Tillgaard skrev:
> Tabel (elevresultat) med poster af bøger elever har læst. Til
> hver post er knyttet et elevID for den enkelte elev, et antal
> sider (antalsider), og en dato fx. 25-02-2011.
> Jeg vil gerne kunne lave et udtræk af fx. en specifik elev
> (elevID=35243) og få summen af antal sider læst mellem d.
> 01-01-2011 og 20-02-2011. Datoerne henter jeg fra en anden tabel
> (LKontrakt)med en række der hedder kontraktstart og kontraktslut.
> ElevID, kontraktstart og kontraktslut henter jeg via en
> Request.QueryString.
> SELECT SUM(antalsider)FROM elevresultat WHERE elevid = "&
> Request.Querystring("elevid")
> Der hvor jeg virkelig død er omkring datoerne. Jeg kan se at det
> er et problem med dansk dato umiddelbart.
> Kan nogen hjælpe lidt (meget) på vej?
>
Dansk dato? Er datoerne gemt som tekst? Ellers er det da ligegyldigt.
Set cmd = Server.CreateObject("ADODB.Command")
cmd.CommandText = "SELECT SUM(antalsider) FROM elevresultat LEFT JOIN
LKontrakt ON Elevresultat.elevid = LKontrakt.elevid AND dato BETWEEN
kontraktstart AND kontraktslut AND elevresultat.elevid=?"
cmd.Parameters.Append(
command.CreateParameter(
elevid, adInteger, adParamInput, 0, Request.Querystring("elevid"))
Set cmd.ActiveConnection = connection
Set rs = cmd.Execute()
>
>
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Michael Tillgaard (26-02-2011)
| Kommentar Fra : Michael Tillgaard |
Dato : 26-02-11 12:21 |
|
Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> Dansk dato? Er datoerne gemt som tekst? Ellers er det da ligegyldigt.
>
> Set cmd = Server.CreateObject("ADODB.Command")
>
> cmd.CommandText = "SELECT SUM(antalsider) FROM elevresultat LEFT JOIN
> LKontrakt ON Elevresultat.elevid = LKontrakt.elevid AND dato BETWEEN
> kontraktstart AND kontraktslut AND elevresultat.elevid=?"
>
> cmd.Parameters.Append(
> command.CreateParameter(
> elevid, adInteger, adParamInput, 0, Request.Querystring("elevid"))
> Set cmd.ActiveConnection = connection
> Set rs = cmd.Execute()
Tak for dit input.
Jeg har nu prøvet følgende:
SELECT SUM(antalsider)
FROM elevresultat LEFT JOIN LKontrakt ON Elevresultat.elevid =
LKontrakt.elevid AND dato BETWEEN kontraktstart AND kontraktslut AND
elevresultat.elevid= MMColParam
MMColParam = Request.QueryString("ElevID")
Jeg får følgende fejl:
Fejltype:
Microsoft JET Database Engine (0x80040E14)
Between-operatoren er brugt uden And i forespørgselsudtrykket "".
/bogkassen/laesekontrakter2.asp, line 109
Nogen bud?
Følgende fungerer men her har jeg jo manuelt indtastet datoerne:
SELECT SUM(antalsider)
FROM elevresultat
WHERE ElevID = MMColParam AND dato BETWEEN #23-02-2011# AND #24-02-2011#
Den rigtige elev findes, den rigtige sum udregnes inden for datoerne.
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Michael Tillgaard (26-02-2011)
| Kommentar Fra : Michael Tillgaard |
Dato : 26-02-11 13:15 |
|
Fandt løsningen:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("mindatabase.mdb")
Conn.Open DSN
strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE ElevID = " &
request.QueryString("elevid") & "" & " AND dato BETWEEN" & "#" &
request.QueryString("kontraktstart") & "" & "# AND" & "#" &
request.QueryString("kontraktslut") & "" & "#"
Set rs = Conn.Execute(strSQL)
Response.Write rs("Expr1000") & "<br>"
Conn.Close
Set Conn = Nothing
%>
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (26-02-2011)
| Kommentar Fra : Leif Neland |
Dato : 26-02-11 14:39 |
|
Den 26-02-2011 13:14, Michael Tillgaard skrev:
> Fandt løsningen:
> <%
>
> Set Conn = Server.CreateObject("ADODB.Connection")
> DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
> DSN = DSN& "DBQ="& Server.MapPath("mindatabase.mdb")
> Conn.Open DSN
>
>
> strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE ElevID = "&
> request.QueryString("elevid")& ""& " AND dato BETWEEN"& "#"&
> request.QueryString("kontraktstart")& ""& "# AND"& "#"&
> request.QueryString("kontraktslut")& ""& "#"
>
Den løsning er forkert.
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Leif Neland (26-02-2011)
| Kommentar Fra : Leif Neland |
Dato : 26-02-11 14:45 |
|
Den 26-02-2011 14:38, Leif Neland skrev:
>>
>> strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE ElevID = "&
>> request.QueryString("elevid")& ""& " AND dato BETWEEN"& "#"&
>> request.QueryString("kontraktstart")& ""& "# AND"& "#"&
>> request.QueryString("kontraktslut")& ""& "#"
>>
>
> Den løsning er forkert.
>
For lige at give et hint:
http://xkcd.com/327/
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Michael Tillgaard (26-02-2011)
| Kommentar Fra : Michael Tillgaard |
Dato : 26-02-11 15:37 |
|
Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> Den 26-02-2011 13:14, Michael Tillgaard skrev:
> > Fandt løsningen:
> > <%
> >
> > Set Conn = Server.CreateObject("ADODB.Connection")
> > DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
> > DSN = DSN& "DBQ="& Server.MapPath("mindatabase.mdb")
> > Conn.Open DSN
> >
> >
> > strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE ElevID = "&
> > request.QueryString("elevid")& ""& " AND dato BETWEEN"& "#"&
> > request.QueryString("kontraktstart")& ""& "# AND"& "#"&
> > request.QueryString("kontraktslut")& ""& "#"
> >
>
> Den løsning er forkert.
>
Det er muligt den er forkert. Men den ser ud til at virke.
Jeg har testet den og umiddelbart kører det.
Hvor mener du der er fejl?
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Michael Tillgaard (26-02-2011)
| Kommentar Fra : Michael Tillgaard |
Dato : 26-02-11 20:54 |
|
Michael Tillgaard wrote in dk.edb.internet.webdesign.serverside.asp:
> Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> > Den 26-02-2011 13:14, Michael Tillgaard skrev:
> > > Fandt løsningen:
> > > <%
> > >
> > > Set Conn = Server.CreateObject("ADODB.Connection")
> > > DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
> > > DSN = DSN& "DBQ="& Server.MapPath("mindatabase.mdb")
> > > Conn.Open DSN
> > >
> > >
> > > strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE ElevID = "&
> > > request.QueryString("elevid")& ""& " AND dato BETWEEN"& "#"&
> > > request.QueryString("kontraktstart")& ""& "# AND"& "#"&
> > > request.QueryString("kontraktslut")& ""& "#"
> > >
> >
> > Den løsning er forkert.
> >
> Det er muligt den er forkert. Men den ser ud til at virke.
> Jeg har testet den og umiddelbart kører det.
> Hvor mener du der er fejl?
>
> --
> Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
> - Pædagogiske tutorials på dansk
> - Kom godt i gang med koderne
> KLIK HER! => http://www.html.dk/tutorials
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Michael Tillgaard (26-02-2011)
| Kommentar Fra : Michael Tillgaard |
Dato : 26-02-11 20:59 |
|
Beklager, kom vist galt afsted.
Mystisk. Virkede lokalt, virkede på serveren et stykke tid. Nu virker det ikke
og jeg får ingen fejlmelding.
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("mindatabase.mdb")
Conn.Open DSN
strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE ElevID = " &
request.QueryString("elevid") & "" & " AND dato BETWEEN" & "#" &
request.QueryString("kontraktstart") & "" & "# AND" & "#" &
request.QueryString("kontraktslut") & "" & "#"
Set rs = Conn.Execute(strSQL)
Response.Write "Status: " & rs("Expr1000") & " sider<p>"
Response.Write "Læsetermometer: <br>"
Response.Write "<table width=100%" & " bgcolor=#CCCCCC><tr><td><table width=" &
100/(kontrakt.Fields.Item("Kontraktsider").Value)*rs("Expr1000") & "%
bgcolor=#FF0000><tr><td></td></tr></table></td></tr></table>"
Conn.Close
Set Conn = Nothing
%>
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Michael Tillgaard (26-02-2011)
| Kommentar Fra : Michael Tillgaard |
Dato : 26-02-11 21:12 |
|
Michael Tillgaard wrote in dk.edb.internet.webdesign.serverside.asp:
> Beklager, kom vist galt afsted.
>
> Mystisk. Virkede lokalt, virkede på serveren et stykke tid. Nu virker det ikke
> og jeg får ingen fejlmelding.
>
> <%
> Set Conn = Server.CreateObject("ADODB.Connection")
> DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
> DSN = DSN & "DBQ=" & Server.MapPath("mindatabase.mdb")
> Conn.Open DSN
>
> strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE ElevID = " &
> request.QueryString("elevid") & "" & " AND dato BETWEEN" & "#" &
> request.QueryString("kontraktstart") & "" & "# AND" & "#" &
> request.QueryString("kontraktslut") & "" & "#"
>
> Set rs = Conn.Execute(strSQL)
>
> Response.Write "Status: " & rs("Expr1000") & " sider<p>"
> Response.Write "Læsetermometer: <br>"
> Response.Write "<table width=100%" & " bgcolor=#CCCCCC><tr><td><table width=" &
> 100/(kontrakt.Fields.Item("Kontraktsider").Value)*rs("Expr1000") & "%
> bgcolor=#FF0000><tr><td></td></tr></table></td></tr></table>"
>
> Conn.Close
> Set Conn = Nothing
> %>
Problemet opstår når datoerne går hen over flere måneder fx. 01-02-2011 til
01-03-2011. Der kommer ingen fejlmelding men intet optælles eller lægges sammen.
Nogen bud hvordan jeg løser det?
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Leif Neland (26-02-2011)
| Kommentar Fra : Leif Neland |
Dato : 26-02-11 22:55 |
|
Den 26-02-2011 21:11, Michael Tillgaard skrev:
>
>
> Problemet opstår når datoerne går hen over flere måneder fx. 01-02-2011 til
> 01-03-2011. Der kommer ingen fejlmelding men intet optælles eller lægges sammen.
> Nogen bud hvordan jeg løser det?
>
Det lyder som om du gemmer datoerne som en streng, og ikke en dato. Er
det rigtigt?
Leif
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Michael Tillgaard (26-02-2011)
| Kommentar Fra : Michael Tillgaard |
Dato : 26-02-11 23:46 |
|
Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
> Den 26-02-2011 21:11, Michael Tillgaard skrev:
> >
> >
> > Problemet opstår når datoerne går hen over flere måneder fx. 01-02-2011 til
> > 01-03-2011. Der kommer ingen fejlmelding men intet optælles eller lægges sammen.
> > Nogen bud hvordan jeg løser det?
> >
> Det lyder som om du gemmer datoerne som en streng, og ikke en dato. Er
> det rigtigt?
>
> Leif
Hej Leif igen
Jeg mener bestemt, at jeg i min access database gemmer som dato.
Jeg indsætter også i tabel som dato.
Må dog indrømme, at jeg famler lidt i blinde.
Men mystikken breder sig. Jeg tester lokal på min egen pc.
Lige nu :) er det kun hvis startdato eller slutdato er d. 1. altså 01 at det går
galt, ellers ser nedenstående ud til at virke.
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("mindatabase.mdb")
Conn.Open DSN
strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE ElevID = " &
request.QueryString("elevid") & "" & " AND dato BETWEEN" & "#" &
request.QueryString("kontraktstart") & "" & "# AND" & "#" &
request.QueryString("kontraktslut") & "" & "#"
Set rs = Conn.Execute(strSQL)
Response.Write "Status: " & rs("Expr1000") & " sider<p>"
Response.Write "Læsetermometer: <br>"
Response.Write "<table width=100%" & " bgcolor=#CCCCCC><tr><td><table width=" &
100/(kontrakt.Fields.Item("Kontraktsider").Value)*rs("Expr1000") & "%
bgcolor=#FF0000><tr><td></td></tr></table></td></tr></table>"
Conn.Close
Set Conn = Nothing
%>
Mvh.
Michael
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Michael Tillgaard (27-02-2011)
| Kommentar Fra : Michael Tillgaard |
Dato : 27-02-11 00:35 |
|
Aaarggg bliver ved med at støde på forskellige fejl.
Ved nogle udtræk virker det, ved andre ikke. Nogle udtræk tæller alle poster sammen for
en given elev og andre udtræk slet ingen.
Måske er det rigtigt, at jeg ikke får indsat datoerne korrekt.
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jørn Andersen (27-02-2011)
| Kommentar Fra : Jørn Andersen |
Dato : 27-02-11 18:56 |
|
On 26 Feb 2011 23:34:39 GMT, Michael Tillgaard <post@bogkassen.dk>
wrote:
>Aaarggg bliver ved med at støde på forskellige fejl.
>Ved nogle udtræk virker det, ved andre ikke. Nogle udtræk tæller alle poster sammen for
>en given elev og andre udtræk slet ingen.
>Måske er det rigtigt, at jeg ikke får indsat datoerne korrekt.
Der er forskel på dansk og amerikansk dato-formattering.
På dansk skriver man typisk: dd-mm-åååå - fx 16-12-2011 (16 dec 2011)
På eng./am typisk: mm-dd-åååå - fx 12-16-2011 (16 dec 2011)
Nu er der ikke en måned, der har nr. 16, så databasen gætter nok
rigtigt i dette tilfælde. Men gvis det er 1. marts - så kan det nemt
bliver til 3. januar.
Prøv at se, om det kan forklare dine fejl.
Så vidt jeg har opfattet, bruger du en Access database.
En løsning kan så være at bruge Access' egne indbyggede datofunktioner
- se fx:
<url:
http://groups.google.com/group/dk.edb.internet.webdesign.serverside.asp/msg/a81a0e1a49ca1573>
Det kræver, at du validerer dit input fra QueryString (hvilket man
altid bør gøre) og konverterer indputtet til en datoværdi.
Så er du til gengæld helt uafhængig af sprog-forskelle.
OBS: Virker ikke til fx MySql.
Good luck!
--
Jørn Andersen
socialister.dk
marxisme.dk
| |
Anonymous (28-02-2011)
| Kommentar Fra : Anonymous |
Dato : 28-02-11 15:43 |
|
Den 27-02-2011 18:55, Jørn Andersen skrev:
> <url:
> http://groups.google.com/group/dk.edb.internet.webdesign.serverside.asp/msg/a81a0e1a49ca1573>
>
> Det kræver, at du validerer dit input fra QueryString (hvilket man
> altid bør gøre) og konverterer indputtet til en datoværdi.
Man validerer input for type, og man laver normal validering af værdier,
som at de ligger indenfor min/max. Men derudover kan man (og EMM bør
man) tillade de rå data.
Derefter bruges parameterized queries, når det skal ind/ud af databasen,
hvilket sørger for, man kan have de rå data ind uden at være bange for
manipulering af SQLen. Det er hammer ligeyldigt, om man så hedder ;--
droptable eller noget andet. Man kan ikke engang snyde og bruge andet
tegnsæt, DBen kan simpelhen ikke hackes den vej.
Når så data skal vises, så encoder man dem til det format man skal
bruge, ex. XML-encoding til XML, HTML-encoding ril HTML. Dvs. man
encoder på output, ikke på input.
Så har man elimineret mulighed for database-manipulation samt minimeret
chancen for XSS, to af de største syndere ifbm. hacking og
virus-videreformidling.
Hvis man ikke følger velkendt best practice omkring sikkerhed, burde det
EMM føre til en omgående fyring, også lige på atedet. Det er også
firmaets omdømme det gælder. Hvis privat/kundedata lækkes ved en
hacking, kan det skade firmaet betydeligt at der er slækket på
sikkerheden med vilje. Tænk Valus, de var simple amatører, som gerne
ville administrere dine penge. Jeg ville aldrig overlade så meget som en
50-øre*) til dem. Og nogen succes blev de jo heller aldrig siden de blev
hacked, og deres elendinge amatørkodning kom i pressen.. Danmarks
suverent største skandalefirma til dato. Med LANGT ned til nummer to.
MVH
Rune Jensen
*) Det handllede om mirobetaling :)
| |
Michael Tillgaard (27-02-2011)
| Kommentar Fra : Michael Tillgaard |
Dato : 27-02-11 19:30 |
|
Endelig! Fandt løsningen og nu spiller det max ....tror jeg nok :)
Det var dato-formatet der drillede, så det ændres i forespørgselen.
Det ser ud til at man åbenbart skal anvende amerikansk dato-format.
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("mindatabase.mdb")
Conn.Open DSN
strSQL = "SELECT SUM(antalsider)"
Session("kontraktstartdato") = Request.QueryString("kontraktstart")
Session("kontraktslutdato") = Request.QueryString("kontraktslut")
Session("kontraktelevid") = Request.QueryString("elevid")
strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE elevid =" &
Session("kontraktelevid") & " AND dato BETWEEN #"& Month(Session("kontraktstartdato") )&
"-" & Day(Session("kontraktstartdato") ) & "-" & Year(Session("kontraktstartdato") )&"#
AND #"& Month(Session("kontraktslutdato") )& "-" & Day(Session("kontraktslutdato") ) & "-"
& Year(Session("kontraktslutdato") )&"#"
Set rs = Conn.Execute(strSQL)
Response.Write "Status: " & rs("Expr1000") & " sider<p>"
Response.Write "Læsetermometer: <p>"
Response.Write "<table width=100%" & " background=termo1.png border=1><tr><td><table
width=" & 100/(kontrakt.Fields.Item("Kontraktsider").Value)*rs("Expr1000") & "%
background=termo2.png><tr><td>" &
100/(kontrakt.Fields.Item("Kontraktsider").Value)*rs("Expr1000") & "%
</td></tr></table></td></tr></table>"
Conn.Close
Set Conn = Nothing
%>
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jørn Andersen (27-02-2011)
| Kommentar Fra : Jørn Andersen |
Dato : 27-02-11 20:00 |
|
On 27 Feb 2011 18:30:23 GMT, Michael Tillgaard <post@bogkassen.dk>
wrote:
>Endelig! Fandt løsningen og nu spiller det max ....tror jeg nok :)
>Det var dato-formatet der drillede, så det ændres i forespørgselen.
>Det ser ud til at man åbenbart skal anvende amerikansk dato-format.
Og når det så næste gang er dansk dato-format i databasen?
>strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE elevid =" &
>Session("kontraktelevid") & " AND dato BETWEEN #"& Month(Session("kontraktstartdato") )&
>"-" & Day(Session("kontraktstartdato") ) & "-" & Year(Session("kontraktstartdato") )&"#
>AND #"& Month(Session("kontraktslutdato") )& "-" & Day(Session("kontraktslutdato") ) & "-"
>& Year(Session("kontraktslutdato") )&"#"
Hvis du lægger datoomsætningen i en funktion (som den jeg linkede til
i forrige indlæg), så får du samtidig en meget simplere SQL:
.... AND dato BETWEEN " & DateToSQL(Session("kontraktstartdato")) & "
AND " & DateToSQL(Session("kontraktslutdato"))
Funktionen er:
' -- DateToSql start --
Function DateToSql(Value)
DateToSql = "DateSerial(" & Year(Value) & ", " & _
Month(Value) & ", " & _
Day(Value) & ") + " & _
"TimeSerial(" & Hour(Value) & ", " & _
Minute(Value) & ", " & _
Second(Value) & ")"
End Function
' -- DateToSql slut --
Good luck!
--
Jørn Andersen
socialister.dk
marxisme.dk
| |
Anonymous (27-02-2011)
| Kommentar Fra : Anonymous |
Dato : 27-02-11 21:38 |
|
Den 27-02-2011 19:59, Jørn Andersen skrev:
> Hvis du lægger datoomsætningen i en funktion (som den jeg linkede til
> i forrige indlæg), så får du samtidig en meget simplere SQL:
>
> ... AND dato BETWEEN "& DateToSQL(Session("kontraktstartdato"))& "
> AND "& DateToSQL(Session("kontraktslutdato"))
>
> Funktionen er:
> ' -- DateToSql start --
<SNIP>
Jeg kan stadig ikke se, der bruges parameterized queries.
> Good luck!
>
Ja - med at blive hacked.
MVH
Rune Jensen
| |
Jørn Andersen (01-03-2011)
| Kommentar Fra : Jørn Andersen |
Dato : 01-03-11 04:44 |
|
On Sun, 27 Feb 2011 21:38:00 +0100, Anonymous
<invalid@invalid.invalid> wrote:
>Den 27-02-2011 19:59, Jørn Andersen skrev:
>
>> Hvis du lægger datoomsætningen i en funktion (som den jeg linkede til
>> i forrige indlæg), så får du samtidig en meget simplere SQL:
>>
>> ... AND dato BETWEEN "& DateToSQL(Session("kontraktstartdato"))& "
>> AND "& DateToSQL(Session("kontraktslutdato"))
>>
>> Funktionen er:
>> ' -- DateToSql start --
>
><SNIP>
>
>Jeg kan stadig ikke se, der bruges parameterized queries.
Parameter-forespørgsler er glimrende, men ikke den eneste måde at
sikre sig mod SQL-injection.
Den nævnte funktion spærrer også for det, da den kun kan tage en
datoværdi som parameter.
>> Good luck!
>>
>
>Ja - med at blive hacked.
Ikke her
Mvh. Jørn
--
Jørn Andersen
socialister.dk
marxisme.dk
| |
Anonymous (01-03-2011)
| Kommentar Fra : Anonymous |
Dato : 01-03-11 07:33 |
|
Den 01-03-2011 04:43, Jørn Andersen skrev:
> Parameter-forespørgsler er glimrende, men ikke den eneste måde at
> sikre sig mod SQL-injection.
Før jeg ser beviser for andet, tror jeg ikke på den.
Hvad man ser på nettet er to ting:
- Amatørerne, som sværger til sanitizing, altså at strippe for "bad chars"
- Dem, som anbefaler parameterized queries.
Jeg kan ikke finde nogen, som anbefaler DateSerial som sikring imod
SQL-injection.
> Den nævnte funktion spærrer også for det, da den kun kan tage en
> datoværdi som parameter.
Parameterized queries sender templaten til databasen først, derefter
dataene, som kan være hvad som helst, de vil bare være tekst.
Fuldstændigt ligeyldigt hvad de indeholder og hvordan de er formatteret.
Så man har altså separeret fuldstændigt data fra funktion.
Det gør man ikke ved at lave en function. En function er dynamisk, og
derfor ikke sikker. Og selv om den skulle være det (i dette tilfælde),
er det uendelig bad pactice ikke at separere 100% data fra funktion.
>>> Good luck!
>>>
>>
>> Ja - med at blive hacked.
>
> Ikke her
Hmmm... Og man kan ikke ødelægge din function ved at sende forkerte data
af en anden type?
MVH
Rune Jensen
| |
Leif Neland (26-02-2011)
| Kommentar Fra : Leif Neland |
Dato : 26-02-11 22:54 |
|
Den 26-02-2011 15:37, Michael Tillgaard skrev:
>>>
>>> strSQL = "SELECT SUM(antalsider) FROM elevresultat WHERE ElevID = "&
>>> request.QueryString("elevid")& ""& " AND dato BETWEEN"& "#"&
>>> request.QueryString("kontraktstart")& ""& "# AND"& "#"&
>>> request.QueryString("kontraktslut")& ""& "#"
>>>
>>
>> Den løsning er forkert.
>>
> Det er muligt den er forkert. Men den ser ud til at virke.
> Jeg har testet den og umiddelbart kører det.
> Hvor mener du der er fejl?
http://din-site.dom/rapport.asp?elevid=1;drop table elevresultat;
Leif
--
Bevar P2, luk P3, der er nok P3'er i forvejen.
| |
Anonymous (26-02-2011)
| Kommentar Fra : Anonymous |
Dato : 26-02-11 23:28 |
|
Den 26-02-2011 15:37, Michael Tillgaard skrev:
> Leif Neland wrote in dk.edb.internet.webdesign.serverside.asp:
<SNIP: SQL>
>> Den løsning er forkert.
>>
> Det er muligt den er forkert. Men den ser ud til at virke.
> Jeg har testet den og umiddelbart kører det.
> Hvor mener du der er fejl?
Det ligner ikke en løsning, som bruger bundne parametre. Men uden jeg
kan se det med sikkerhed.
Gør du det?
I ASP hedder det parameterized queries. Det er den eneste metode
overhovedet som sikrer imod manipulation af data i databasen udefra via
querystring/SQL injection. Altså hacking.
MVH
Rune Jensen
| |
|
|