Avatar billede jerving Nybegynder
07. september 2001 - 20:26 Der er 6 kommentarer og
1 løsning

Simpel cookie - skriv navn på besøgende + antal besøg

Jeg har oprettet 2 sider - en velkomstside med en form, hvor brugeren kan indtaste navn. Siden har et script der skal danne en cookie med antal besøg og dette navn. I samme script er der en redirector - der sender \"gen\"besøgende til en anden velkomstside, hvor navn og antal besøg udskives - dette fungerer, men ikke optimalt.

Problem - det udskives således: \"Hello Philip Jerving. undefined Since this is the first time you have been here, please take a moment to look around.undefined\"

Hvor ligger fejlen siden der udskives \"udefined\" både efter navn og antal?

KODEN SER SÅLEDES UD:

SIDE 1:

<SCRIPT LANGUAGE=\"JavaScript\">
<!-- Begin
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (\";\", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {
var arg = name + \"=\";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(\" \", i) + 1;
if (i == 0) break;
}
return null;
} 
function SetCookie (name, value) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + \"=\" + escape (value) +
((expires == null) ? \"\" : (\"; expires=\" + expires.toGMTString())) +
((path == null) ? \"\" : (\"; path=\" + path)) +
((domain == null) ? \"\" : (\"; domain=\" + domain)) +
((secure == true) ? \"; secure\" : \"\");
}

function show_count() {
var expdate = new Date();
var num;
expdate.setTime(expdate.getTime() +  (24 * 60 * 60 * 1000 * 31));
if(!(num = GetCookie(\"jtotwcount\")))
num = 0;
num++;
SetCookie (\"jtotwcount\", num, expdate);
if (num == 1) document.write(\"Since this is the first time you have been here, please take a moment to look around.\");
else document.write(\"You have been here \" + num + \" times.\");
}

function set_name(form) {
var expdate = new Date ();
expdate.setTime (expdate.getTime() + (24 * 60 * 60 * 1000 * 31));
var username = form.nameinput.value
if (username != \"\") {
if (confirm(\"Are you sure you want this saved as your name?\")) {
SetCookie (\"jtotwname\", username, expdate);
window.history.go(0);
  }
}
else alert(\"Please enter a valid name\");
}

//Redirector begin --
var name = GetCookie(\'jtotwname\');
if (name != null)  {
window.location.href = \'enterKnown.asp\';
}


// End -->
</SCRIPT>


FORMEN:

<form>
                          Please enter your name:
                          <input type = \"text\" name = \"nameinput\" class=\"input_text\">
                          <br>
                          <br>
                          <input type = \"button\" value = \"Ok\" onClick = \"set_name(this.form)\" class=\"button\" name=\"button\">
                        </form>
SIDE 2:

<SCRIPT LANGUAGE=\"JavaScript\">
<!-- Begin
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (\";\", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {
var arg = name + \"=\";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(\" \", i) + 1;
if (i == 0) break;
}
return null;
} 
function SetCookie (name, value) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + \"=\" + escape (value) +
((expires == null) ? \"\" : (\"; expires=\" + expires.toGMTString())) +
((path == null) ? \"\" : (\"; path=\" + path)) +
((domain == null) ? \"\" : (\"; domain=\" + domain)) +
((secure == true) ? \"; secure\" : \"\");
}

function auto_show_name() {
if(GetCookie(\"jtotwname\") != null)
document.write(\"Hello \" + GetCookie(\'jtotwname\')+ \". \");

}
function show_count() {
var expdate = new Date();
var num;
expdate.setTime(expdate.getTime() +  (24 * 60 * 60 * 1000 * 31));
if(!(num = GetCookie(\"jtotwcount\")))
num = 0;
num++;
SetCookie (\"jtotwcount\", num, expdate);
if (num == 1) document.write(\" Since this is the first time you have been here, please take a moment to look around.\");
else document.write(\" You have been here \" + num + \" times.\");
}
// End -->
</SCRIPT>

DER HVOR NAVNET + BESØGSANTAL VISES:

<script language=\"JavaScript\">
                        document.write(auto_show_name());
               
                        document.write(show_count());
                        </script>

ADRESSEN PÅ SIDEN ER www.MYSA.ORG.UK
Avatar billede bbs Nybegynder
07. september 2001 - 20:32 #1
Noget i denne stil du søger?

<p align=\"center\"><SCRIPT LANGUAGE=\"JavaScript\">
<!-- Begin
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (\";\", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {
var arg = name + \"=\";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(\" \", i) + 1;
if (i == 0)
break;
}
return null;
}
function SetCookie (name, value) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (2 < argc) ? argv[2] : null;
var path = (3 < argc) ? argv[3] : null;
var domain = (4 < argc) ? argv[4] : null;
var secure = (5 < argc) ? argv[5] : false;
document.cookie = name + \"=\" + escape (value) +
((expires == null) ? \"\" : (\"; expires=\" + expires.toGMTString())) +
((path == null) ? \"\" : (\"; path=\" + path)) +
((domain == null) ? \"\" : (\"; domain=\" + domain)) +
((secure == true) ? \"; secure\" : \"\");
}
function DisplayInfo() {
var expdate = new Date();
var visit;
expdate.setTime(expdate.getTime() +  (24 * 60 * 60 * 1000 * 365));
if(!(visit = GetCookie(\"visit\")))
visit = 0;
visit++;
SetCookie(\"visit\", visit, expdate, \"/\", null, false);
var message;
if(visit == 1)
message=\"Dette er første gang du besøger siden, Velkommen!\";
if(visit== 2)
message=\"Dette er anden gang du besøger siden, velkommen tilbage !\";
if(visit == 3)
message=\"Dette er tredje gang du besøger siden, er den god ???\";
if(visit == 4)
message=\"Dette er fjerde gang du besøger siden, Link til den på din egen side !!!!\";
if(visit == 5)
message=\"Dette er femte gang du besøger siden, tælleren går snart i stykker!\";
if(visit == 6)
message=\"Dette er sjette gang du besøger siden, fortæl dine venner om din kærlighed til denne side !!!!\";
if(visit == 7)
message=\"Dette er syvende gang du besøger siden, er nettet ikke stort nok ???\";
if(visit == 8)
message=\"Det er nu ottende gang du er på siden, SØG HJÆLP !!!!\";
if(visit == 9)
message=\"9 gange har du nu besøgt siden, vil du være med til at lave den eller !!!\";
if(visit >= 10)
message=\" Du har besøgt denne side mere end 10 gange, lejen skal betales den 1. hver måned\";
  alert(\"\\n\"+\"Din browser har besøgt denne side \"
            +\"\"+visit+\" \"
            +\"gang(e).\"+\"\\n\"+\"\\n\"
            +message);
}
function ResetCounts() {
var expdate = new Date();
expdate.setTime(expdate.getTime() +  (24 * 60 * 60 * 1000 * 365));
visit = 0;
SetCookie(\"visit\", visit, expdate , \"/\", null, false);
history.go(0);
}
// End -->
</Script>

<BODY onload=\"DisplayInfo()\">

</p>

</body>

</html>
<p align=\"center\"><FORM>
<CENTER>
<INPUT NAME=\"update\" TYPE=\"BUTTON\" VALUE=\"Besøg siden igen !!\" OnClick=\"history.go(0)\">
<INPUT NAME=\"reset\" TYPE=\"BUTTON\" VALUE=\"Nulstil Tæller\" OnClick=\"ResetCounts()\">
</CENTER>
</FORM>
</p>
Avatar billede roenving Novice
07. september 2001 - 20:38 #2
I din funktion sætter du jo hårdt num\'s værdi til at være 1 lige inden du tester for om den er 1 ??·|

function show_count() {
var expdate = new Date();
var num;//her vil num\'s værdi være undefined
expdate.setTime(expdate.getTime() +  (24 * 60 * 60 * 1000 * 31));
if(!(num = GetCookie(\"jtotwcount\")))
num = 0;//her sætter du den til 0, hvis du får en forkert svarværdi
num++;
SetCookie (\"jtotwcount\", num, expdate);
if (num == 1) document.write(\" Since this is the first time you have been here, please take a moment to look around.\");
else document.write(\" You have been here \" + num + \" times.\");
}

Og i GetCookie returnerer du på baggrund af, hvad der findes imellem et indeks og et andet, brug substr i stedet:

if (document.cookie.substr(i, alen) == arg)
return getCookieVal (j);

hth
jes
Avatar billede jakoba Nybegynder
07. september 2001 - 20:58 #3
Din fejl skyldes at du bruge document write  \" dobbelt \"

  document.write(auto_show_name());

prøver at udskrive \'den tekststreng funktionen auto_show_name() returnerer\'
men auto_show_name() returnerer ingenting. den skriver strengen med en ekstra document.write. (det der returneres er \'undefined\')

så prøv at lave auto_show_name() om til:

function auto_show_name() {
  if(GetCookie(\"jtotwname\") != null)
    return \"Hello \" + GetCookie(\'jtotwname\')+ \". \";
};

ligedan i den anden funktion.

mvh JakobA
Avatar billede jakoba Nybegynder
07. september 2001 - 21:01 #4
altså function show_count(9 bliver til:

function show_count() {
  var expdate = new Date();
  var num;
  expdate.setTime(expdate.getTime() +  (24 * 60 * 60 * 1000 * 31));
  if(!(num = GetCookie(\"jtotwcount\")))
      num = 0;
  num++;
  SetCookie (\"jtotwcount\", num, expdate);
  if (num == 1)
    return \"Since this is the first time you have been here, please take a moment to look around.\";
  else
    return \"You have been here \" + num + \" times.\";
}

PS: pokker ikke 600 vørd. behold 500 selv

mvh JakobA
Avatar billede jerving Nybegynder
07. september 2001 - 21:11 #5
TUSIND TAK!!!!!
200 for venligheden!
Avatar billede jakoba Nybegynder
07. september 2001 - 21:26 #6
Takker og bukker :-))
Avatar billede jakoba Nybegynder
07. september 2001 - 21:46 #7
jerving >> Var det med vilje eller ekspertens pointsystem der gav alle 600?

du kan få \'refunderet\' de formange på http://www.eksperten.dk/spm/107025

mvh JakobA
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester