/ 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
Sikkerhed med Login
Fra : Jacob ..


Dato : 12-01-04 14:41

Et par asp-spørgsmål:

1) Jeg har læst mig til i andre indlæg i NG'en og på
http://www.asp-faq.dk/article/?id=95 at det er nødvendigt at
validere alle inputs med en replace-funktion når der sendes til
db'en - det kommer i og for sig ikke bag på mig.

Spørgsmålet er: Kan jeg lave denne replace-funktion som en
include - evt. en eksisterende include-fil (endnu bedre: i min
header include, som jo er gennemgående for alle mine sider)?

2) En anden boldgade:

Når jeg skal bevæge mig rundt i databasen, for at selecte plejer
jeg at skrive således:

<%

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &
Server.MapPath ("database.mdb")
Conn.Open DSN

SQL = "Select * FROM tbl1"
Set rs = Conn.Execute(SQL)%>

<font...blabla><%response.write rs("ID")%></font>

...og så en hel masse HTML-kode blandet med nogle
<%response.write...%> som henter fra min tbl1, afsluttende med at
lukke for forbindelsen, for så senere at skulle hente noget fra
en anden tabel. Her plejer jeg så at starte forfra med:

<%

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &
Server.MapPath ("database.mdb")
Conn.Open DSN

SQL = "Select * FROM tbl2"... og så samme rutine som ovenstående.
Men så hænder det jo at jeg så skal response.write noget fra tbl1
igen ... og så starter jeg forfra igen med at skrive:

<%

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &
Server.MapPath ("database.mdb")
Conn.Open DSN

SQL = "Select * FROM tbl1" ....

*Er det lige "Bad Asp" eller hvad11??

Spørgsmål: Kan jeg i toppen af siden lave en overordnet SQL
="Select * from tbl1, tbl2, tbl3, tbl4" og så ellers bare køre
derud af med at response.write fra den ene og den anden tbl
(forudsat at der ikke er felter i tabellerne med samme navn), for
til sidste på siden at lukke og slukke?

Det var bare lige det jeg ville høre...





--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Thomas Møller Nexø (12-01-2004)
Kommentar
Fra : Thomas Møller Nexø


Dato : 12-01-04 15:08

> Spørgsmålet er: Kan jeg lave denne replace-funktion som en
> include - evt. en eksisterende include-fil (endnu bedre: i min
> header include, som jo er gennemgående for alle mine sider)?

Du kunne formentlig sagtens lave en include der laver en replace på
det indtastede login, men da du formentlig kun skal have dine
brugere til at logge ind et sted - forudsat at dette login giver
adgang til en masse sider, der er password beskyttet er det vel
egentlig ikke nødvendigt med denne include?

> Spørgsmål: Kan jeg i toppen af siden lave en overordnet SQL
> ="Select * from tbl1, tbl2, tbl3, tbl4" og så ellers bare køre
> derud af med at response.write fra den ene og den anden tbl
> (forudsat at der ikke er felter i tabellerne med samme navn), for
> til sidste på siden at lukke og slukke?
>

Ja, dette er muligt med en join forbindelse af tabellerne. En sådan
fungerer på den måde at alle tabellerne inkluderet i join
forbindelsen trækkes ud i et enkelt recordset, der så kan tilgås med
fek,s. rs("værdi")...

Er ikke selv den store ekspert i join-forbindelser, men har dog
benyttet det et par gange.
Se evt. hvordan her:
http://www.devguru.com/Technologies/jetsql/quickref/inner_join.html

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (12-01-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 12-01-04 15:31

Jacob .. skrev:

> Spørgsmålet er: Kan jeg lave denne replace-funktion som en
> include - evt. en eksisterende include-fil (endnu bedre: i min
> header include, som jo er gennemgående for alle mine sider)?

Ja, det kan du sagtens. Den funktion der i asp-faq-artiklen kaldes
"plingEscape" kan udmærket placeres i en includefil.


> SQL = "Select * FROM tbl1"
> Set rs = Conn.Execute(SQL)%>


> SQL = "Select * FROM tbl2"... og så samme rutine som ovenstående.


> Men så hænder det jo at jeg så skal response.write noget fra tbl1
> igen ...


Du kan evt. gemme udskriften fra tbl1 i en variabel - eller,hvis
udskriften ikke skal formateres ens de to gange, gemme postsættet
som et array på siden.


> *Er det lige "Bad Asp" eller hvad11??

Man bør ikke hente flere data end man har brug for - og man bør
ikke hente de samme data flere gange hvis det (enkelt) kan undgås.


Generelt bør man ikke bruge "SELECT *..." i forespørgsler. Dels
fordi stjernen skjuler hvilke felter man har til rådighed i
forespørgslen (det hæmmer overskueligheden af koden) og dels fordi
man ofte kommer til at medtage felter man ikke har brug for. Hvis
du for eksempel kun skal bruge tre ud af ti felter i en tabel, så
er det spild af resurser at bede databasen om at levere alle ti.


> Spørgsmål: Kan jeg i toppen af siden lave en overordnet SQL
> ="Select * from tbl1, tbl2, tbl3, tbl4"

Uha nej... ovenstående sætning vil give det kartesiske produkt af
de fire nævnte tabeller - det vil sige samtlige
kombinationsmuligheder af samtlige rækker i tabellerne. Med bare 50
rækker i hver tabel får du 125000 rækker på den måde.
Det er temmelig sikkert _ikke_ det du har brug for.

Hvis du skal udskrive sideløbende fra flere tabeller, kan du godt
have flere postsæt åbne på samme tid. Men du skal ikke kombinere
select-forespørgsler medmindre at der er direkte sammenhæng mellem
data (fx et join mellem en adressetabel og en postnummertabel).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jacob .. (12-01-2004)
Kommentar
Fra : Jacob ..


Dato : 12-01-04 16:33

Tænkte jo nok at du også ville kommentere, Jens

> Ja, det kan du sagtens. Den funktion der i asp-faq-artiklen kaldes
> "plingEscape" kan udmærket placeres i en includefil.

Ja, den du skriver om på asp-faq, men jeg må indrømme at alle
Pliner'ne og gåseøjnene gjorde mig rundtoset, så jeg kunne ikke lige
gennemskue hvordan den skal se ud. Kan det passe at jeg uden
tilrettelser eller noget kan indsætte følgende i min include-fil:

<%
' Funktion til sikring af formværdier
' Kan fx placeres i en includefil og bruges
' på flere sider
Function plingEscape(tekst)
plingEscape = Replace(tekst & "", "'", "''")
End function
%>

...og så funker det?

> Man bør ikke hente flere data end man har brug for - og man bør
> ikke hente de samme data flere gange hvis det (enkelt) kan undgås.

Nej - og jeg kunne jo godt mærke at et par af mine sider tilsidst
blve lidt "velvoksne"

> Generelt bør man ikke bruge "SELECT *..." i forespørgsler. Dels
> fordi stjernen skjuler hvilke felter man har til rådighed i
> forespørgslen (det hæmmer overskueligheden af koden) og dels fordi
> man ofte kommer til at medtage felter man ikke har brug for. Hvis
> du for eksempel kun skal bruge tre ud af ti felter i en tabel, så
> er det spild af resurser at bede databasen om at levere alle ti.

Korrekt - men den letteste. Jeg ville klart kun forespørge med * hvis
min tabel indeholder under 10-12 felter

> Uha nej... ovenstående sætning vil give det kartesiske produkt af
> de fire nævnte tabeller - det vil sige samtlige
> kombinationsmuligheder af samtlige rækker i tabellerne. Med bare 50
> rækker i hver tabel får du 125000 rækker på den måde.
> Det er temmelig sikkert _ikke_ det du har brug for.
>
> Hvis du skal udskrive sideløbende fra flere tabeller, kan du godt
> have flere postsæt åbne på samme tid. Men du skal ikke kombinere
> select-forespørgsler medmindre at der er direkte sammenhæng mellem
> data (fx et join mellem en adressetabel og en postnummertabel).

Med andre og: jeg skal ikke conn.close før til aller sidst så for at
alle postsæt er åbne helevejen igennem.

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (12-01-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 12-01-04 16:52

Jacob .. skrev:

> Ja, den du skriver om på asp-faq, men jeg må indrømme at alle
> Pliner'ne og gåseøjnene gjorde mig rundtoset, så jeg kunne
> ikke lige gennemskue hvordan den skal se ud.

Du kan kopiere den direkte fra siden - så skulle den gerne virke.


> Korrekt - men den letteste. Jeg ville klart kun forespørge med
> * hvis min tabel indeholder under 10-12 felter


Det er hurtigere at skrive stjernen - ingen tvivl om det. Jeg skal
heller ikke spille hellig, jeg bruger selv stjernen flere gange.

Men det er ikke nødvendigvis antallet af felter der har størst
betydning. Hvis du fx har et talfelt (id), et tekstfelt
(overskrift) og et notatfelt (artikel) - og kun skal lave en liste
over overskrifterne - så vil brug af stjernen måske betyde at den
datamængde der skal hentes og håndteres i postsættet bliver mange
gange større end nødvendigt.

> Med andre og: jeg skal ikke conn.close før til aller sidst så
> for at alle postsæt er åbne helevejen igennem.

Nej - du skal altid lukke dine forbindelser så snart du er færdig
med dem. Det kan så være efter et eller flere gennemløb. Normalt
kan det bedst svare sig at arbejde med forward-only-postsæt - her
har du ikke mulighed for at "nulstille" det til anden udskrivning.
Det er muligt at det kan betale sig i dit tilfælde, men jeg ville
starte med at lægge data i en strengvariabel (hvis de to udskrifter
af samme tabel er ens) eller i et array.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jacob .. (12-01-2004)
Kommentar
Fra : Jacob ..


Dato : 12-01-04 20:11


> Du kan kopiere den direkte fra siden - så skulle den gerne virke.

Det er vel kun alt det der står over [...] jeg skal tage med.

<%
' Funktion til sikring af formværdier
' Kan fx placeres i en includefil og bruges
' på flere sider
Function plingEscape(tekst)
plingEscape = Replace(tekst & "", "'", "''")
End function
%>
[...]
<%
sql = "SELECT navn FROM brugere WHERE brugernavn = '" & _
plingEscape(c& "' AND adgangskode = '" & _
plingEscape(Request.Form("user")) & "'"
%>

og skal jeg så fremover bruge: plingEscape(Request.Form("felt")) i
stedet for Request.Form("felt") ? Så har jeg mange sider at rette i
så fald, men det er vel umagen værd...

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

pepss (12-01-2004)
Kommentar
Fra : pepss


Dato : 12-01-04 20:21


"Jacob .." skrev

> Det er vel kun alt det der står over [...] jeg skal tage med.
>
> <%
> ' Funktion til sikring af formværdier
> ' Kan fx placeres i en includefil og bruges
> ' på flere sider
> Function plingEscape(tekst)
> plingEscape = Replace(tekst & "", "'", "''")
> End function
> %>

det er faktisk kun det har du skal ha med

> og skal jeg så fremover bruge: plingEscape(Request.Form("felt")) i
> stedet for Request.Form("felt") ? Så har jeg mange sider at rette i
> så fald, men det er vel umagen værd...

ja eller hvad det felt nu heder plingEscape(Request.Form("et_eller_andet")

det er ikke så galt at rettet til jeg fant også først ud af det sent og
skulle rette en 30 - 40 sider


--
Pepss
Den ordblinde der prøver at blive webdesigner
Fræk frækkere www.cafe-flirt.dk



Jens Gyldenkærne Cla~ (12-01-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 12-01-04 22:23

Jacob .. skrev:

> Det er vel kun alt det der står over [...] jeg skal tage med.

Ja - med "den" mente jeg funktionen, ikke den kodeblok som den står
i. En funktion starter med "Function [funktionsnavn]" og slutter
ved det førstkommende "End Function".

> og skal jeg så fremover bruge:
> plingEscape(Request.Form("felt")) i stedet for
> Request.Form("felt")

Ja. Nogle felter er funktionen måske ikke så relevant for - hvis du
fx henter id-værdier fra et skjult formfelt, behøver du ikke at
tænke på erstatningen. Men den gør ikke nogen skade selv om man
bruger den på fx et tal- eller et datofelt, så du kan i princippet
godt erstatte alle Request.Form's med funktionskaldet.

En editor der understøtter Regex-erstatninger og erstatninger i et
helt katalog kan gøre underværker i processen.

NB: Hvis du vil bruge null-værdier til noget fornuftigt, skal du
bruge en anden funktion end ovenstående. Den kræver dog lidt mere
forarbejde - skriv hvis du har brug for den.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jacob .. (13-01-2004)
Kommentar
Fra : Jacob ..


Dato : 13-01-04 09:59

> Ja - med "den" mente jeg funktionen, ikke den kodeblok som den står
> i. En funktion starter med "Function [funktionsnavn]" og slutter
> ved det førstkommende "End Function".
> > og skal jeg så fremover bruge:
> > plingEscape(Request.Form("felt")) i stedet for
> > Request.Form("felt")

OK, så forstod jeg det korrekt.

> Ja. Nogle felter er funktionen måske ikke så relevant for - hvis du
> fx henter id-værdier fra et skjult formfelt, behøver du ikke at
> tænke på erstatningen. Men den gør ikke nogen skade selv om man
> bruger den på fx et tal- eller et datofelt, så du kan i princippet
> godt erstatte alle Request.Form's med funktionskaldet.
> En editor der understøtter Regex-erstatninger og erstatninger i et
> helt katalog kan gøre underværker i processen.

Desværre er jeg nok nødt til at forsøge mig med "good old" Notesblok.

> NB: Hvis du vil bruge null-værdier til noget fornuftigt, skal du
> bruge en anden funktion end ovenstående. Den kræver dog lidt mere
> forarbejde - skriv hvis du har brug for den.

Jeg har en del felter som ikke tillader NULL værdier, er det det du
mener?

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (13-01-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 13-01-04 10:33

Jacob .. skrev:

> Desværre er jeg nok nødt til at forsøge mig med "good old"
> Notesblok.

Der findes free- og sharewareprogrammer der kan en del mere.


> Jeg har en del felter som ikke tillader NULL værdier, er det
> det du mener?

Nej. Jeg mener at der er situationer hvor det giver mening at
skelne mellem NULL og den tomme streng. I de fleste tilfælde er det
dog ikke nødvendigt.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jacob .. (13-01-2004)
Kommentar
Fra : Jacob ..


Dato : 13-01-04 10:49

> Der findes free- og sharewareprogrammer der kan en del mere.

OK... sig frem. (synes i øvrigt at det er svært at finde en ordentlig
wysiwyg-editor)

> Nej. Jeg mener at der er situationer hvor det giver mening at
> skelne mellem NULL og den tomme streng. I de fleste tilfælde er det
> dog ikke nødvendigt.

Kan du give mig et eksempel?

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- 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 : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste