/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Hente og udskriv værdier gennem url'en
Fra : Lars Sørensen


Dato : 07-08-09 13:13

Hej :)
Har brug for hjælp til at få udskrevet nogle værdier fra url'en.

Jeg har sendt nogle værdier gennem url'en. De står godt nok i
url'en på den næste siden, men siden er stadig tom.
Jeg har fx prøvet med <%Request.Querystring("spiller")%> og
<%Server.URLEncode("spiller")%>.
Hvordan få jeg udskrevet den værdierne?

På forhånd tak..

--
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

 
 
Rune Jensen (07-08-2009)
Kommentar
Fra : Rune Jensen


Dato : 07-08-09 15:41

Lars Sørensen skrev:
> Hej :)
> Har brug for hjælp til at få udskrevet nogle værdier fra url'en.
>
> Jeg har sendt nogle værdier gennem url'en. De står godt nok i
> url'en på den næste siden, men siden er stadig tom.
> Jeg har fx prøvet med <%Request.Querystring("spiller")%> og
> <%Server.URLEncode("spiller")%>.
> Hvordan få jeg udskrevet den værdierne?

Lad os lige tage den fra begyndelsen.

Eksempel:

Jeg vil gerne have overført en værdi fra index.asp til siden
resultat.asp, og jeg bruger variablen dummy i URLen. Dette sker via et
link fra siden index.asp til resultat.asp


** index.asp **
afsendelsesside

<a href="resultat.asp?dummy=12">Dette er variablen dummy med værdien 12
sendt igennem URLen</a>


** resultat.asp **
her samles værdien op og vises

<%
Dim trDummy

trDummy = trim( request.servariables("dummy"))

'** Inputvalidering **
'Tjek for, at værdien af trDummy er et tal,
'Hvis ikke, sættes variablen til 1
'
if not( isNumeric( trDummy)) then
   trDummy = 1
end if

'Konvertering til absolutte hel-tal
'
trDummy = abs( int( trDummy))

response.write "Værdien af dummy i URLen hentes ind i variablen trDummy
i ASPen. Værdien af trDummy er:" & trDummy

%>

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


Flere værdier kan overføres ved at adskille variablene i URLen med et &.
Af hensyn til korrekt HTML, gøres dette med en entity [&amp;], så et
andet eksempel på html på index.asp kunne være

<a href="resultat.asp?dummy=12&amp;dummy2=3">Dummy er 12, dummy2 er 3</a>

Du må gerne give lidt kode til din side, hvor dine forsøg på overføring
af værdier er med, for så kan det være, du kan få mere uddybende svar.



PS: Mht. inputvalidering, jeg har lagt det med, fordi det kan man ligeså
godt allerede fra start sætte sig ind i. Der er mange, som synes det er
sjovt at prøve at lægge falske værdier ind (bots gør dette automatisk
for at finde sårbarheder i sidens kode). Det er ikke svært at lære
inputvalidering, det er endda god kodeskik, kun synes nogle det er
besværligt, fordi det kræver ekstra kode.


MVH
Rune Jensen

Lars Sørensen (07-08-2009)
Kommentar
Fra : Lars Sørensen


Dato : 07-08-09 16:52

Først tak for det fine svar.. er stadig grøn i det her, så det er dejligt
med en der skærer det ud i pap. :)

Nu har jeg prøvet, og tror jeg er nødt til at give dig lidt kode - det
virker nemlig ik.

** Indsaetboede-indsaet.asp **
Består af to dropdown-menu'er (en hvor spillerne hentes fra db og en hvor
bødetypen gives) og et tekstfelt (til at skrive datoen for hvornår man har
fået bøden):

<form id="boede" action="Indsaetboede-indsaet.asp">
Vælg den rigtige spiller:<br>
   <select size="1" id="spiller" name="spiller">
      <option selected="selected">Vælg bødetype</option>
      <%
      ' Databaseforbindelse - husk at angive sti til din database
      Set Conn = Server.CreateObject("ADODB.Connection")
      DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
      DSN = DSN & "DBQ=" & Server.MapPath("../db/oh77.mdb")
      Conn.Open DSN
      
      ' SQL forespørgsel
      strSQL = "Select * from SPILLERE"
      ' Udfør forespørgsel (rs indeholder nu resultatet)
      Set rs = Conn.Execute(strSQL)
      
      ' Gennemløb Recordset (rs) med en løkke
      Do
      ' Udskriv værdien i drop-down-menu:
      %><option value="<%Response.Write rs("Id")%>"><%
      strNavn = rs("Fornavn") & " " & rs("Efternavn")
      Response.Write "" & strNavn & ""
      %></option><%
      
      ' Gå til næste Record i rs
      rs.MoveNext
      ' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
      Loop While Not rs.EOF
      ' Luk databaseforbindelse
      Conn.Close
      Set Conn = Nothing
      %>
   </select>
</p>

<p>
Vælg den rigtige bødetype:<br>
   <select size="1" id="boedetype" name="boedetype">
      <option selected="selected">Vælg bødetype</option>
      <option value="1">1</option>
         (Har selv li pillet dem ud jeg, men går fra 1-17)
      <option value="17">17</option>
   </select>
</p>

<p>
Vælg den dato bøden er givet:<br>
<small>Dato angives: <i>dd-mm-åååå</i></small><br>
<input type=text name="Dato" size=23>
</p>

<input type="submit" value="Indsæt bøde">
</form>


Når jeg så submit'ter kommer der bare en fejlside op.
Url'en ser sådan ud:
.../Indsaetboede-indsaet.asp?spiller=152&boedetype=7&Dato=07-08-2009

Det jeg så gerne vil er at hente den værdi ud af url'en der står efter
spiller, boedetype og dato.
Derefter skal de indsættes i en database. Forbindelsen kan jeg godt selv.
:)

' SQL sætning opbygges
strSQL = "Insert into BOEDER ("

   strSQL = strSQL & "SpillerID, "
   strSQL = strSQL & "Boedetype, "
   strSQL = strSQL & "Foedselsdato) "

   strSQL = strSQL & "values( "

   strSQL = strSQL & "'HVORDAN skal der stå her?', "
   strSQL = strSQL & "'HVORDAN skal der stå her?', "
   strSQL = strSQL & "'HVORDAN skal der stå her?')"

--
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

Rune Jensen (07-08-2009)
Kommentar
Fra : Rune Jensen


Dato : 07-08-09 22:10

Lars Sørensen skrev:
> Først tak for det fine svar.. er stadig grøn i det her, så det er dejligt
> med en der skærer det ud i pap. :)
>
> Nu har jeg prøvet, og tror jeg er nødt til at give dig lidt kode - det
> virker nemlig ik.

Det var også en bøf af dimensioner fra min side.

Du skal ikke bruge request.servervariables, men derimod
request.querystring - til de forslag, jeg har givet, altså. Læg mærke
til, du kan teste det her først (f.eks. rette variablens værdi i URLen)
for at få en fornemmelse, men derefter... du bruger jo en database. Og
der knytter sig nogle ting, som det vil være bedst, at en med
databaseforstand giver svar på - jeg har ikke selv databaseerfaring.

Her er den test, jeg bøffede med, nu er den rettet:

http://www.runejensen.dk/temp/nyhedsgrupper/deiwsa/index_query.asp

- og kildekoden:

** index_query **
<a href="resultat.asp?dummy=12">Dette er variablen dummy med værdien 12
sendt igennem URLen</a>

** resultat.asp **
<%@ LANGUAGE = VBScript %>
<% Option Explicit%>
<%
Dim trDummy

trDummy = trim( request.querystring("dummy") & " ")

'** Inputvalidering **
'Tjek for, at værdien af trDummy er et tal,
'Hvis ikke, sættes variablen til 1
'
if not( isNumeric( trDummy)) then
trDummy = 1
end if

'Konvertering til absolutte hel-tal
'
trDummy = abs( int( trDummy))

response.write "Værdien af dummy i URLen hentes ind i variablen trDummy
i ASPen. Værdien af trDummy er:" & trDummy

%>

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

Option explicit - den lille fyr sørger for, du skal bruge korrekte
variabelnavne igennem hele ASPscriptet. Husk den og brug den - altid.
Den kan spare dig for mange problemer, hvor man f.eks. har DIMmed dummy
men henviser til dumy. Normalt vil du ikke få en fejlmelding, hvis du
henviser til variable, du ikke har DIMmed - det får du med den kommando.

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

MVH
Rune Jensen

Stig Johansen (08-08-2009)
Kommentar
Fra : Stig Johansen


Dato : 08-08-09 05:39

Lars Sørensen wrote:

> ** Indsaetboede-indsaet.asp **

Det er lidt svært at gennemskue om du har en asp-fil hvor du enter, og een
hvor du indsætter.

Hvis du vil lave det i samme fil, eks. Indsaetboede-indsaet.asp skal du dele
den op i en GET del, og en POST del.

Dvs. en struktur a la.
....
noget-kode
if Request.Servervariables("REQUEST_METHOD") = "POST" then
gør.noget.med.insæt.af.bøde.
end if
...kode..
if Request.Servervariables("REQUEST_METHOD") = "GET" then
gør.noget.med.visning af spillere/.bøde.
end if

> <form id="boede" action="Indsaetboede-indsaet.asp">

Her vil jeg foreslå du bruger method="post" i din form.

> ' Databaseforbindelse - husk at angive sti til din database
> Set Conn = Server.CreateObject("ADODB.Connection")
> DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
> DSN = DSN & "DBQ=" & Server.MapPath("../db/oh77.mdb")
> Conn.Open DSN

Den her stump vil jeg foreslå dig at lægge ud i en include fil, så du ikke
skal skrive/rette det samme alle steder.

> ' SQL forespørgsel
> strSQL = "Select * from SPILLERE"

Lidt afhængig af hvor mange felter der er i tabellen spillere, er det god
latin kun at udtage de felter der skal bruges, f.eks.
SELECT Id,Fornavn,Efternavn FROM Spillere ORDER BY Id

> Når jeg så submit'ter kommer der bare en fejlside op.

Det ville være rart hvis du fortalte hvad der stod/står på den fejlside.

> ' SQL sætning opbygges
> strSQL = "Insert into BOEDER ("
>
> strSQL = strSQL & "SpillerID, "
> strSQL = strSQL & "Boedetype, "
> strSQL = strSQL & "Foedselsdato) "
>
> strSQL = strSQL & "values( "
>
> strSQL = strSQL & "'HVORDAN skal der stå her?', "
> strSQL = strSQL & "'HVORDAN skal der stå her?', "
> strSQL = strSQL & "'HVORDAN skal der stå her?')"

Jeg har lavet en funktion her:
<http://w-o-p-r.dk/tips/asp/sql.inc.asp.txt>
Hvis du lægger den som en includefil, f.eks. sql.inc.asp, så ska du bruge:
(Hvis du bruger method="post")
.....
Rowsaffected = query(conn,_
"INSERT INTO Boeder (SpillerId,Boedetype,Foedselsdato) VALUES (?,?,?)",_
Array(Request.Form("spiller"),Request.Form("boedetype"),Request.Form("Dato"),-1)

If rowsaffected <> 1 then <skriv en eller anden fejlmelding>
.....
Hvis du i stedet bruger method="get", skal du erstatte Request.Form med
Request.Querystring.

Den bruger parameterized queries, som sikrer mod SQL injection.

I en anden tråd snakkede Leif lidt om, at det kan blive nødvendigt at angive
parametertyperne til hver enkelt parameter i stedet for variant.

Hvis det bliver nødvendigt, så udvider jeg funktionen, men det vil give
noget ekstra arbejde at benytte funktionen, så indtil videre ser vi om ikke
det virker med variant.

NB: Du bruger Foedselsdato i din SQL, er du sikker på den er rigtig ?
Boededato - måske ?

--
Med venlig hilsen
Stig Johansen

Leif Neland (08-08-2009)
Kommentar
Fra : Leif Neland


Dato : 08-08-09 19:59

Stig Johansen skrev:

>
> Jeg har lavet en funktion her:
> <http://w-o-p-r.dk/tips/asp/sql.inc.asp.txt>
> Hvis du lægger den som en includefil, f.eks. sql.inc.asp, så ska du bruge:
> (Hvis du bruger method="post")
> ....
> Rowsaffected = query(conn,_
> "INSERT INTO Boeder (SpillerId,Boedetype,Foedselsdato) VALUES (?,?,?)",_
> Array(Request.Form("spiller"),Request.Form("boedetype"),Request.Form("Dato"),-1)
>
> If rowsaffected <> 1 then <skriv en eller anden fejlmelding>
> ....

Fint. Lad os promovere den funktion så meget som muligt

Så vi kan få gjort landet lidt mere sikkert...

Leif

Ukendt (08-08-2009)
Kommentar
Fra : Ukendt


Dato : 08-08-09 09:42


"Lars Sørensen" <lars.c.soerensen@hotmail.com> skrev

<snip en masse tekst>

> Når jeg så submit'ter kommer der bare en fejlside op.
> Url'en ser sådan ud:
> ../Indsaetboede-indsaet.asp?spiller=152&boedetype=7&Dato=07-08-2009
>
> Det jeg så gerne vil er at hente den værdi ud af url'en der står efter
> spiller, boedetype og dato.
> Derefter skal de indsættes i en database. Forbindelsen kan jeg godt selv.
> :)
>
> ' SQL sætning opbygges
> strSQL = "Insert into BOEDER ("
>
> strSQL = strSQL & "SpillerID, "
> strSQL = strSQL & "Boedetype, "
> strSQL = strSQL & "Foedselsdato) "
>
> strSQL = strSQL & "values( "
>
> strSQL = strSQL & "'HVORDAN skal der stå her?', "
> strSQL = strSQL & "'HVORDAN skal der stå her?', "
> strSQL = strSQL & "'HVORDAN skal der stå her?')"

strSQL = strSQL & "'" & dinvariabel(spiller) & "', "
strSQL = strSQL & "'" & dinvariabel(boedetype) & "', "
strSQL = strSQL & "'" & dinvariabel(spiller) & "';"

Variablerne i koden er alle af typen tekst
Skal du gemme tal i databasen, undlader du " ' "

Tjek din færdig strSQL således
response.write strSQL
response.end

Afprøv din sql direkte i Access

Bjarne



Ukendt (08-08-2009)
Kommentar
Fra : Ukendt


Dato : 08-08-09 19:17


"bsn" <bsnSNABELAoncableDOTdk> skrev i en meddelelse
news:4a7d3a40$0$56794$edfadb0f@dtext02.news.tele.dk...
>
> "Lars Sørensen" <lars.c.soerensen@hotmail.com> skrev
>
> <snip en masse tekst>
>
>> Når jeg så submit'ter kommer der bare en fejlside op.
>> Url'en ser sådan ud:
>> ../Indsaetboede-indsaet.asp?spiller=152&boedetype=7&Dato=07-08-2009
>>
>> Det jeg så gerne vil er at hente den værdi ud af url'en der står efter
>> spiller, boedetype og dato.
>> Derefter skal de indsættes i en database. Forbindelsen kan jeg godt selv.
>> :)
>>
>> ' SQL sætning opbygges
>> strSQL = "Insert into BOEDER ("
>>
>> strSQL = strSQL & "SpillerID, "
>> strSQL = strSQL & "Boedetype, "
>> strSQL = strSQL & "Foedselsdato) "
>>
>> strSQL = strSQL & "values( "
>>
>> strSQL = strSQL & "'HVORDAN skal der stå her?', "
>> strSQL = strSQL & "'HVORDAN skal der stå her?', "
>> strSQL = strSQL & "'HVORDAN skal der stå her?')"
>
strSQL = strSQL & "'" & dinvariabel(spiller) & "', "
strSQL = strSQL & "'" & dinvariabel(boedetype) & "', "
strSQL = strSQL & "'" & dinvariabel(Dato) & "');"

Rettet et par fejl...
Bjarne



Lars Sørensen (12-08-2009)
Kommentar
Fra : Lars Sørensen


Dato : 12-08-09 15:03

Tak for hjælpen alle sammen.! :)

--
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

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste