/ 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
Bannerstyring med lige mange visninger af ~
Fra : Jakob Munck


Dato : 23-03-04 08:21




Jeg har et simpelt bannerstyringssystem, som vælger 1 ud af 4 mulige bannere
ud og viser det når brugeren besøger siten. Problemet er, at jeg ikke er
sikker på at hvert banner vises lige mange gange, og ved optælling har jeg
fundet ud af, at det gør de ikke. Det kan mine brugere ikke være tilfredse
med.

Derfor søger jeg efter en metode at forbedre systemet sådan, at jeg har
sikkerhed for at hvert banner vises lige mange gange, og det betyder at de 4
bannere skal vises skiftevis 1, 2, 3, 4, 1..... etc. Visningen skal altså
ikke bygge på tilfældig udvælgelse, men skal ske i en systematisk
rækkefølge. Så får alle lige megen eksponering.

Spørgsmålet er bare, hvordan jeg laver dette?

Her er min nuværende kode:

<%
Dim RandomNum
Randomize
RandomNum = Int(Rnd * 4) + 1
%>

<%If RandomNum = 1 Then %>
<a HREF="http://www.url1.dk">
<img SRC="banner1.gif" border="0" WIDTH="468" HEIGHT="60">
<% ElseIf RandomNum = 2 Then %>
<a HREF="http://www.url2.dk">
<img SRC="banner2.gif" border="0" WIDTH="468" HEIGHT="60">
<% ElseIf RandomNum = 3 Then %>
<a HREF="http://www.url3.dk">
<img SRC="banner3.gif" border="0" WIDTH="468" HEIGHT="60">
<% ElseIf RandomNum = 4 Then %>
<a HREF="http://www.url4.dk">
<img SRC="banner4.gif" border="0" WIDTH="468" HEIGHT="60">
<% End If %>

Hvem kan give lidt hjælpe eller et godt forslag?

v.h.
Jakob Munck



 
 
Jens B (23-03-2004)
Kommentar
Fra : Jens B


Dato : 23-03-04 10:26


"Jakob Munck" <j.munck.fjernmig@c.dk> skrev i en meddelelse
news:405fe56c$0$461$edfadb0f@dread14.news.tele.dk...
> Derfor søger jeg efter en metode at forbedre systemet sådan, at jeg har
> sikkerhed for at hvert banner vises lige mange gange, og det betyder at de
4
> bannere skal vises skiftevis 1, 2, 3, 4, 1..... etc. Visningen skal altså
> ikke bygge på tilfældig udvælgelse, men skal ske i en systematisk
> rækkefølge. Så får alle lige megen eksponering.


Det er vel bare at lave en tekstfil hvor du skriver tallet 1.

Så læser du tallet fra tekstfilen, og laver en

Vis billed<tal fra tekstfil>.jpg

IF tallet <= 3 THEN
tallet = tallet + 1
skriv det nye tal til tekstfil
ELSE
tallet = 1
skriv det nye tal til tekstfil
END IF


Jens



Jakob Munck (23-03-2004)
Kommentar
Fra : Jakob Munck


Dato : 23-03-04 12:26

Tak for hjælpen, jeg har nu (efter bedste evne) lavet følgende kode, som
burde gøre at tallet i tekstfilen (stiger med én, hver gang browseren
reloades og det stadig stigende tal udskrives i næstsidste linie. Men jeg
får fejlmelding, og kan ikke rigtig se, hvad jeg gør forkert. Her er koden:

<%.
Set fs=Server.CreateObject("Scripting.FileSystemObject")
Set f=fs.OpenTextFile(Server.MapPath("banner_nummer.txt"), 1)

banner_nummer = f.ReadLine


IF banner_nummer <= 4 THEN
banner_nummer = banner_nummer + 1

' her skal den skrive det nye tal ned ned i tekstfilen:
f.WriteLine = tekstfil_tal
ELSE
tekstfil_tal = 1
END IF

Response.write tekstfil_tal
f.Close
%>

Og fejlmeldingen er:

Object doesn't support this property or method: 'tekstfil_tal.WriteLine'

Jeg vil være glad hvis nogen kan se, hvad jeg gør forkert.

v.h.
Jakob Munck



Jens B (23-03-2004)
Kommentar
Fra : Jens B


Dato : 23-03-04 12:59


"Jakob Munck" <j.munck.fjernmig@c.dk> skrev i en meddelelse
news:40601f16$0$499$edfadb0f@dread14.news.tele.dk...
> <%.
> Set fs=Server.CreateObject("Scripting.FileSystemObject")
> Set f=fs.OpenTextFile(Server.MapPath("banner_nummer.txt"), 1)
>
> banner_nummer = f.ReadLine
>
>
> IF banner_nummer <= 4 THEN
> banner_nummer = banner_nummer + 1
>
> ' her skal den skrive det nye tal ned ned i tekstfilen:
> f.WriteLine = tekstfil_tal
> ELSE
> tekstfil_tal = 1
> END IF
>
> Response.write tekstfil_tal
> f.Close
> %>
>

Det er efterhånden lang tid siden at jeg har rodet med at skrive/læse fra
tekstfiler. Men fandt lige noget frem fra et gammelt script jeg engang har
brugt, og skrev det så lidt om. Prøv det her:

Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("banner_nummer.txt")
Set f = fso.OpenTextFile(filespec,1)
tekstfil_tal = f.ReadLine
f.Close

'vis banner tekstfil_tal & ".jpg"

IF tekstfil_tal <= 3 THEN
tekstfil_tal = tekstfil_tal + 1
Set f = fso.OpenTextFile(filespec,2)
f.WriteLine tekstfil_tal
ELSE
tekstfil_tal = 1
Set f = fso.OpenTextFile(filespec,2)
f.WriteLine tekstfil_tal
END IF


Jens



Jakob Munck (23-03-2004)
Kommentar
Fra : Jakob Munck


Dato : 23-03-04 13:13

Problemet løst!

Med lidt hjælp fra en Hitcounter, har jeg så fået den rigtige kode, som er
denne:

<%
Set FS=Server.CreateObject("Scripting.FileSystemObject")
Set RS=FS.OpenTextFile(Server.MapPath("counter.txt"), 1, False)
Visitcount=RS.ReadLine
RS.Close

IF Visitcount <= 3 THEN
Visitcount=Visitcount+1
ELSE
Visitcount = 1
END IF

Set RS=FS.OpenTextFile(Server.MapPath("counter.txt"), 2, False)
RS.Write Visitcount
RS.Close
Set RS=Nothing
Set FS=Nothing
%>

<html><head></head><BODY>

<%If Visitcount = 1 Then %>
<a HREF="http://www.url1.dk">
<img SRC="banner1.gif" border="0" WIDTH="468" HEIGHT="60">
<% ElseIf Visitcount = 2 Then %>
<a HREF="http://www.url2.dk">
<img SRC="banner2.gif" border="0" WIDTH="468" HEIGHT="60">
<% ElseIf Visitcount = 3 Then %>
<a HREF="http://www.url3.dk">
<img SRC="banner3.gif" border="0" WIDTH="468" HEIGHT="60">
<% ElseIf Visitcount = 4 Then %>
<a HREF="http://www.url4.dk">
<img SRC="banner4.gif" border="0" WIDTH="468" HEIGHT="60">
<% End If %>

</BODY></HTML>





Jakob Munck (23-03-2004)
Kommentar
Fra : Jakob Munck


Dato : 23-03-04 13:39

Tak til jer begge for jeres forslag, som jeg vil studere for at forstå
teknikken bedre.

v.h.
Jakob



Jens Gyldenkærne Cla~ (23-03-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-03-04 13:03

Jens B skrev:

> IF tekstfil_tal <= 3 THEN

Ovenstående sammenligning vil formentlig ikke virke efter hensigten
- tekstfil_tal indeholder en variant, mens 3 er et tal. Prøv med

If Cint(tekstfil_tal) <= 3
--
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

Jens B (23-03-2004)
Kommentar
Fra : Jens B


Dato : 23-03-04 13:10


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:Xns94B584BD718B9jcdmfdk@gyrosmod.dtext.news.tele.dk...
> Jens B skrev:
>
> > IF tekstfil_tal <= 3 THEN
>
> Ovenstående sammenligning vil formentlig ikke virke efter hensigten
> - tekstfil_tal indeholder en variant, mens 3 er et tal. Prøv med
>
> If Cint(tekstfil_tal) <= 3

Ja det er nok rigtigt. Jeg burde snart have lært det, for NØJ hvor har jeg
mange gange siddet er rodet med noget som "burde" virke, men hvor jeg lige
har manglet en cint()

Jens



Jens Gyldenkærne Cla~ (23-03-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-03-04 13:08

Jakob Munck skrev:

> Men jeg får fejlmelding,

I hvilken linje?


> banner_nummer = f.ReadLine
>
>
> IF banner_nummer <= 4 THEN

Pas på med at sammenligne en variabel hentet "udefra" med et tal -
de har hver deres type.

Brug banner_nummer = Cint(f.readline)

(der burde være noget fejlhåndtering på, men det kan implementeres
senere).


> ' her skal den skrive det nye tal ned ned i tekstfilen:
> f.WriteLine = tekstfil_tal

Hvad er tekstfil_tal? Det er vel banner_nummer du vil skrive.

Uden at jeg kan huske fso-metoderne i hovedet, tror jeg dog også at
du bruge writeline-metoden forkert. Prøv i stedet med:

f.writeline (Cstr(banner_nummer))


> ELSE
> tekstfil_tal = 1
> END IF
>
> Response.write tekstfil_tal

Her bruger du tekstfil_tal - men ovenfor bruger du banner_nummer.
--
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

Jens Gyldenkærne Cla~ (23-03-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-03-04 14:09

Jakob Munck skrev:

> Problemet løst!

Tillykke.


Umiddelbart virker det nu lidt dyrt at læse og skrive til en fil
for at få et tilfældigt tal.

Jeg ville gemme tallet i en session- eller application-variabel.
Med en application-variabel får du samme opførsel som nu (hvad der
kan være uheldigt ved flere samtidige brugere) - her slipper du
bare for at læse fra og skrive til filsystemet hele tiden.

Med en session-variabel vil bannerrotationen køre uafhængigt af
andre brugere på sitet. Det sikrer at en bruger vil se alle fire
bannere i rækkefølge.

Problemet med den nuværende kode (eller varianten med en
applicationvariabel) er at der ikke tages hensyn til hvor mange
brugere der på siden. Hvis der fx er fire brugere inde på samme
tid, kan man risikere at de hver kun får set ét banner. Herunder
kan du se hvad der kunne ske hvis fire brugere går ind på dit site
omkring kl. 12

(Tid -> Handling)
12:00 -> Bruger 1 ser første side med banner 1
12:01 -> Bruger 2 ser første side med banner 2
12:03 -> Bruger 3 ser første side med banner 3
12:04 -> Bruger 4 ser første side med banner 4
12:05 -> Bruger 1 skifter til næste side, men ser igen banner 1
12:07 -> Bruger 2 skifter til næste side, men ser igen banner 2
....

Ovenstående er godt nok et "worst case"-scenario, men det
illustrerer hvad der kan ske når man lader alle brugere deles om en
tæller.
--
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

Jakob Munck (23-03-2004)
Kommentar
Fra : Jakob Munck


Dato : 23-03-04 15:14

Jens Gyldenkærne Clausen wrote:
> Jakob Munck skrev:
>
> Umiddelbart virker det nu lidt dyrt at læse og skrive til en fil
> for at få et tilfældigt tal.
>

Ja, men det er jo ikke et tilfældigt til jeg skal have, men netop et bestemt
tal, nemlig det på det sidst viste banner.


> Jeg ville gemme tallet i en session- eller application-variabel.
> Med en application-variabel får du samme opførsel som nu (hvad der
> kan være uheldigt ved flere samtidige brugere) - her slipper du
> bare for at læse fra og skrive til filsystemet hele tiden.
>

Session gør, at hver bruger ser alle bannere i den planlagte rækkefølge, men
til gengæld er der (tror jeg nok), visse gæster som har slået sessions fra
eller anvender software, som gør sessions upålidelige (f.eks. Norton efter
min erfaring). På den måde er en tekstfil bedre. Og det er vel ikke
langsommere eller mere krævende for serveren....?

Men en applicationvariabel var måske en bedre løsning, så det vil jeg
eksperimentere lidt med.


> Problemet med den nuværende kode (eller varianten med en
> applicationvariabel) er at der ikke tages hensyn til hvor mange
> brugere der på siden. Hvis der fx er fire brugere inde på samme
> tid, kan man risikere at de hver kun får set ét banner. Herunder
> kan du se hvad der kunne ske hvis fire brugere går ind på dit site
> omkring kl. 12
> (Tid -> Handling)
> 12:00 -> Bruger 1 ser første side med banner 1
> 12:01 -> Bruger 2 ser første side med banner 2
> 12:03 -> Bruger 3 ser første side med banner 3
> 12:04 -> Bruger 4 ser første side med banner 4
> 12:05 -> Bruger 1 skifter til næste side, men ser igen banner 1
> 12:07 -> Bruger 2 skifter til næste side, men ser igen banner 2
> ...
>
> Ovenstående er godt nok et "worst case"-scenario, men det
> illustrerer hvad der kan ske når man lader alle brugere deles om en
> tæller.

Jeg forstår problemet, men mener ikke at det i praksis er særlig stort.

Tak for hjælpen.

v.h.
Jakob



Jakob Andersen (23-03-2004)
Kommentar
Fra : Jakob Andersen


Dato : 23-03-04 17:10

Jakob Munck wrote:
> Ja, men det er jo ikke et tilfældigt til jeg skal have, men netop et
> bestemt tal, nemlig det på det sidst viste banner.

Jeg er ikke 100% sikker, men jeg tror nok at AdRotator som er en standarddel
af IIS, er rimelig god til at få vist alle bannere lige mange gange:
<http://www.microsoft.com/windows2000/en/server/iis/htm/asp/comp59f8.htm>

--
Jakob Andersen



Jens Gyldenkærne Cla~ (23-03-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-03-04 15:40

Jakob Munck skrev:

>> Umiddelbart virker det nu lidt dyrt at læse og skrive til en
>> fil for at få et tilfældigt tal.

> Ja, men det er jo ikke et tilfældigt til jeg skal have, men
> netop et bestemt tal, nemlig det på det sidst viste banner.

Pointen er den samme. Som hovedregel er læsning og skrivning til og
fra filsystemet væsentligt langsommere end læsning og skrivning til
og fra hukommelsen.


> Session gør, at hver bruger ser alle bannere i den planlagte
> rækkefølge,

Netop.


> men til gengæld er der (tror jeg nok), visse gæster som har slået
> sessions fra eller anvender software, som gør sessions
> upålidelige

Det skal der nok være - men jeg tror ikke det er ret mange. Hvis
man vil slippe for at være afhængig af session-understøttelse, så
kan man benytte querystring i stedet. Det kunne foregå som følger:

Den side der styrer bannervisningen undersøger om der er sendt et
bannerID med querystring. Hvis ikke, vises banner nr. 1, og alle
links fra siden forsynes med bannerID=2. I modsat fald læses id-
nummeret fra querystringen og det pågældende banner hentes. Alle
links forsynes så med værdien af bannerID + 1 (medmindre at
bannerID = maxID - i så fald sættes bannerID til 1).


> På den måde er en tekstfil bedre. Og det er vel ikke
> langsommere eller mere krævende for serveren....?

Det er netop hvad det er (så vidt jeg kan regne ud i hvert fald).
Prøv evt. at køre en timer på siden.


> Jeg forstår problemet, men mener ikke at det i praksis er
> særlig stort.

Hvis du kun har 4 forskellige bannere, og din side bare en gang
imellem har flere samtidige brugere, er problemet IMO relevant.
--
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

Søg
Reklame
Statistik
Spørgsmål : 177549
Tips : 31968
Nyheder : 719565
Indlæg : 6408820
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste