Avatar billede joern Nybegynder
07. november 2006 - 22:34 Der er 67 kommentarer og
1 løsning

Cookie - gemme feltindhold og genindlæse en anden dag

Jeg har meget lidt forståelse for syntaksen i javascript, men har hele dagen læst i bogen "Javascript programmering" fra Teknisk Forlag, samt 2 andre bøger, eksempler på nettet og en række spørgsmål med accepterede svar her på eksperten.
Det er lykkedes at få validitetskontrol til at fungere, men ikke en cookie. På siden http://jkfsoft.dk/hrbook/H46.htm  vil jeg forsøge at tilbyde kunderne at gemme deres bilnr. og mail-adresse, så de ikke behøver at indtaste det næste gang de booker plads på færgen.
Siden er ikke dynamisk, men opdateres hyppigt via et Visual basic program (det ved jeg noget om) som anvendes ved modtagelse af telefoniske pladsbestillinger.

Jeg synes mange af eksemplerne på 'Eksperten' ser vildt uoverskuelige ud.  Til dette formål må det da kunne klares med mindre end 50-100 script-linier.
Avatar billede thesurfer Nybegynder
07. november 2006 - 23:38 #1
Du skal bare bruge 2 (egenligt 3) funktioner:

- Opret/skriv til cookie
- Læs cookie
(- slet cookie)

Kilde: http://www.quirksmode.org/js/cookies.html

<script type="text/JavaScript" language="JavaScript">
function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}
</script>

<script type="text/JavaScript">
// skriv:
createCookie("bilnummer", "AB12345", 30)
createCookie("mailadresse", "min-email@adresse-noget.dk", 30)

// læs:
bilnr = readCookie("bilnummer");
mailadresse = readCookie("mailadresse");
alert("Dit bilnr er " + bilnr + " og din mail adresse er " + mailadresse);



// Hvis kunden ikke ønsker at blive husket:
eraseCookie("bilnummer");
eraseCookie("mailadresse");


// Tester lige om cookien stadig er der:
bilnr = readCookie("bilnummer");
mailadresse = readCookie("mailadresse");
alert("Dit bilnr er " + bilnr + " og din mail adresse er " + mailadresse);
</script>
Avatar billede thesurfer Nybegynder
07. november 2006 - 23:41 #2
Du kan evt smide cookie-delen i en ekstern .js fil (jeg kalder filen "filnavn.js"):

-------- indhold start (denne linie skal ikke med)

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}

-------- indhold slut (denne linie skal ikke med)

Filen inkluderes med:

<script type="text/JavaScript" language="JavaScript" src="filnavn.js"></script>


Læg mærke til, at der IKKE er "<script...> " og "</script>" i .js-filen!
Avatar billede joern Nybegynder
08. november 2006 - 00:04 #3
Tak for svarene.

Jeg ved ikke om du har set min kildetekst, som er skrevet fra eksemplet side 64 i den omtalte bog.

<script type="text/javascript">
  function setCookie(navn,vaerdi,udloeb,sti,websted,sikker)
  {
    cookietekst = navn + "=" + escape(vaerdi)
   
    if (udloeb) {
    cookietekst = cookietekst + '; expires=';
    cookietekst = cookietekst + udloeb.toGMTString();
    }
   
    if (sti) {
    cookietekst = cookietekst + '; path=' + sti;
    }

    if (websted) {
    cookietekst = cookietekst + '; domain=' + websted;
    }

    if (sikker) {
    cookietekst = cookietekst + '; secure=';
    }

    document.cookie = cookietekst;
  }
</script>

Meningen er så at en cookie kan oprettes - gemmes skriver forfatteren endda - med en sætning der selvfølgelig skal tilpasses.

setCookie('minCookie','MinVærdi', new Date(2007,10,5),'/','',false);

Jeg har prøvet at indsætte - men der sker nul og en dyt.  Det fremgår heller ikke af bogen, hvad der skal udløse funktionen, derfor har jeg selv fundet på knappen.

Det du skriver forstår jeg ikke meget af, og det går ikke at jeg bare kopierer noget ind.  Javascript sender jo næsten aldrig fejlmeddelelser, og dagens arbejde har vist mig at der meget let opstår en fejl, som næsten ikke er til at finde.  Så det skal altså være ENKELT!

Skulle du - eller andre - tilfældigvis bo i Sydsjælland (jeg bor på Møn), betaler jeg gerne nogle kr. for et intensivt JavaScript-kursus her hos mig.
Men stadig - simpelt mulige løsninger.
Avatar billede joern Nybegynder
08. november 2006 - 00:06 #4
Jeg glemte lige at skrive at formen hedder:  kunde og felterne for bilnr og email hedder dette, altså bilnr og email.  Hele klideteksten kan jo ses på http://jkfsoft.dk/hrbook/H46.htm
Avatar billede thesurfer Nybegynder
08. november 2006 - 00:19 #5
1) Gør det der står i 07/11-2006 23:41:13

2) Forklaring på funktionerne:

- createCookie(name,value,days)
Funktionen "createCookie" opretter en cookie. For at den kan oprettes, skal den have 3 værdier:

cookies navn, cookies værdi, antal dage som cookien skal leve i
I din situation:

SKRIV/OPRET COOKIE:

* Bilnummer
- cookies navn = "bilnr", cookies værdi "AB12345", antal dage = 30 (jeg satte værdien til 30 dage)
Jeg vidste ikke helt hvad "bilnr" var, så jeg gik ud fra at det var nummerpladen.. i mit eksempel er nummerpladen "AB12345"

* Mail adresse:
- cookies navn = "mailadresse", cookies værdi "min-email@adresse-noget.dk", antal dage = 30

AFLÆS VÆRDI I COOKIE:

Når man læser fra cookie, smider man værdier (enten nummerpladen eller mailadressen) over i en variabel, for at gøre det nemmere:

varibelnavn = readCookie(cookies navn)

I din situation:

* Bilnummer
- var nummerplade = readCookie("bilnr")

* Mail adresse
- var mailadresse = readCookie("mailadresse")


Hvis der er andet du vil have forklaret, skal du bare sige til..
Avatar billede thesurfer Nybegynder
08. november 2006 - 00:20 #6
Det med at putte koden i en .js fil, svarer til at putter VB koden i en .BAS fil..

Det er simpelthen bare en "modul", eller en "klasse", der nemt kan flyttes/kopieres mellem mapper på serveren..
Avatar billede thesurfer Nybegynder
08. november 2006 - 00:24 #7
Hmm..
Hvis jeg ikke husker meget galt, så bruger du .ini filer..

Disse cookies svarer til .ini filerne.

Du har garanteret en funktion, der læser en bestem værdi op af en .ini fil..

Eksempel:
[KundeInfo]
bilnr=AB12345
mail=kundens@mail.dk

Så har du noget der ligner:

dim bilnummer as string
dim mail as string

bilnummer = readFromINI("KundeInfo", "bilnr")
mail = readFromINI("KundeInfo", "mail")

Mit eksempel med "readFromINI" ser sådan ud:

Værdi = readFromINI(sektion, nøgle)

Det er det samme med værdier i registreringsdatabasen..
Der har du en sektion, en nøgle og en værdi..

Med cookies, har du bare kun nøgle (name) og værdi (value)..
Avatar billede thesurfer Nybegynder
08. november 2006 - 00:33 #8
Hvis du vil vide mere om cookies, står der en masse gode ting her:

3. COOKIE FUNDAMENTALS - http://www.cookiecentral.com/faq/#3
Avatar billede joern Nybegynder
08. november 2006 - 00:43 #9
Hej.

Tak for din pædagogiske tålmodighed i en sen nattetime.  Det er rigtigt, at jeg bruger ini-filer til at gemme konfigurations-indstillinger for mine VB-programmer, i stedet for at skrive til Registry.  Jeg startede med VB3 og Win 3.11 i 1993.  Nu er jeg på efterløn og kan selv bestemme min sengetid :-)
Det der især plager mig med javascript er operatorerne { og ;  samt "  og '    Det varede også længe før jeg i et eksempel gennemskuede at || betyder:  eller.  At lægge funktionen i en ekstern fil forstår jeg godt, selv om den lige så gerne må være en del af dokumentet.  Godt nok er der 106 sites der skal bruge den (princippielt), men jeg foretrækker at den er indeholdt.

Jeg prøver i morgen at anvende dit forslag, men der er mange linier jeg ikke begriber formålet med - desværre.  Det følgende er bare mørkegråt:
var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);

Er det virkelig påkrævet for 2 felter?
Avatar billede thesurfer Nybegynder
08. november 2006 - 00:47 #10
Hvis du ville gemme dataene fra formen kunde, ville det se sådan ud:

kunde og felterne for bilnr og email hedder dette, altså bilnr og email.

createCookie("bilnummeret", document.kunde.bilnr.value, 30);
createCookie("mailadressen", document.kunde.email.value, 30);

Læg mærke til at jeg har lavet "bilnummer" og "mailadresse" om til bestemtform.. det betyder egenligt ikke noget, for du gør bare sådan, når du vil aflæse dem igen:

<body onload="hentKundeData()">

I VB svare det til noget i stil med:

Public sub Form_load()
hentKundeData()
End sub


og JavaScript koden:

<script type="text/JavaScript" language="JavaScript">
var bilnummer = readCookie("bilnummeret");
var mailadresse = readCookie("mailadressen");

document.kunde.bilnr.value = bilnummer;
document.kunde.email.value = mailadresse;

</script>

Det svarer til følgende i VB:

Public sub hentKundeData()
dim bilnummer as string
dim mailadresse as string

bilnummer = readCookie("bilnummeret")
mailadresse = readCookie("mailadressen")

txtBilnummer.Text = bilnummer
txtMaildresse.Text = mailadresse

End sub
Avatar billede thesurfer Nybegynder
08. november 2006 - 00:49 #11
Da cookies data er 1 lang streng, bliver man nødt til splitte den op, så man kan aflæse den..
Avatar billede thesurfer Nybegynder
08. november 2006 - 00:54 #12
Når cookies gemmes med "bilnr", "AB12345" og "mailadresse", "min-email@adresse-noget.dk", ser strengen sådan ud:

bilnummer=AB12345; mailadresse=min-email@adresse-noget.dk


Prøv at indsætte denne linie i din adresse-linien, og tryk "Gå" (eller hvad load-knappen nu hedder):

java script:alert(document.cookie);void(0)


Som du kan se, står der en masse.. du skal finde det du skal bruge, nemlig "bilnr" og "mailadresse"..
Avatar billede thesurfer Nybegynder
08. november 2006 - 00:55 #13
Skal jeg oversætte denne kode til VB?

var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
Avatar billede thesurfer Nybegynder
08. november 2006 - 01:15 #14
Her er koden i VB, hvor jeg har tilføjet en knap til formen + en msgbox så man kan teste:

Option Explicit
Dim cookie

Private Sub Form_Load()
' Simulation: Kunden har valgt at gemme bilnummer og email adresse i cookie:
cookie = "bilnummer=AB12345; mailadresse=min-email@adresse-noget.dk"
End Sub

Private Sub Command1_Click()
Dim bilnr
Dim mailadresse

bilnr = readCookie("bilnummer")
mailadresse = readCookie("mailadresse")

MsgBox "Bilens nr er '" & bilnr & "' og kundens mail adresse er '" & mailadresse & "'"
End Sub

Public Function readCookie(noegle As String)
Dim navn, arrayCookie, cookie_del
Dim i

navn = noegle & "="
arrayCookie = Split(cookie, ";")
For i = 0 To UBound(arrayCookie)
    cookie_del = arrayCookie(i)
    Do While Left(cookie_del, 1) = " "
        cookie_del = Mid(cookie_del, 2, Len(cookie_del))
    Loop
   
    If InStr(cookie_del, navn) = 1 Then readCookie = Mid(cookie_del, Len(navn) + 1, Len(cookie_del))
Next
End Function
Avatar billede thesurfer Nybegynder
08. november 2006 - 01:24 #15
Jeg går ud fra, at du bruger VB 6..


Jeg fandt ud af, at Visual Basic 5.0 Control Creation Edition ikke har Split funktionen! :-)


Så jeg fandt og brugte den her:

Public Function Split(ByVal sIn As String, _
    Optional sDelim As String = " ", _
    Optional nLimit As Long = -1, _
    Optional bCompare As VbCompareMethod = vbBinaryCompare) _
    As Variant

    Dim nC As Long, nPos As Long, nDelimLen As Long
    Dim sOut() As String
   
    If sDelim <> "" Then
        nDelimLen = Len(sDelim)
        nPos = InStr(1, sIn, sDelim, bCompare)
        Do While nPos
            ReDim Preserve sOut(nC)
            sOut(nC) = Left(sIn, nPos - 1)
            sIn = Mid(sIn, nPos + nDelimLen)
            nC = nC + 1
            If nLimit <> -1 And nC >= nLimit Then Exit Do
            nPos = InStr(1, sIn, sDelim, bCompare)
        Loop
    End If

    ReDim Preserve sOut(nC)
    sOut(nC) = sIn

    Split = sOut
End Function
Avatar billede joern Nybegynder
08. november 2006 - 09:42 #16
Hej.

Jeg har lige skrevet et langt indlæg, men det viser sig ikke.  Måske skal jeg bare gå tur i skoven idag.
Avatar billede thesurfer Nybegynder
08. november 2006 - 09:56 #17
Hehe..

Skriv altid indlægget i en tekst editor, og husk at gemme/save tit.
Når du er færdig med indlægget, smid det over på Eksperten.

Hvis du bruger browsere Opera, har du mulighed for at gå tilbage, selv efter du har postet indlægget.
Avatar billede joern Nybegynder
08. november 2006 - 10:30 #18
Hej Thesurfer.

Tak for din interesse, jeg vender forhåbentlig frisk tilbage over middag efter en tur ved Møns nordkyst.  Jeg bruger Opera, men den har været lukket i mellemtiden.
Avatar billede joern Nybegynder
09. november 2006 - 11:38 #19
Hej thesurfer.
Det blev ikke igår og bliver nok heller ikke idag jeg forsøger mig med forslagene fra dig.  Min kunde har nemlig kun bedt om validitets-test - han har nok slet ikke tænkt på cookie-muligheden.  Så fortsættelsen afventer en 'åbenbaring'.  Jeg bryder mig ikke om at kopiere kode ind, som jeg ikke forstår.
Står du lige og mangler point  :-)  kan du svare, ellers vender jeg tilbage til spørgsmålet om nogle dage.
m.v.h.  Jørn
Avatar billede thesurfer Nybegynder
09. november 2006 - 12:05 #20
Hej Jørn.

Jeg har rigeligt med points, og kan umuligt komme til at bruge dem alle sammen.. Jeg finder nok ud af hvad meningen med livet og universet er, før jeg er nede på 0 points.. :-)

Jeg venter bare til at du vender tilbage med feedback.
Avatar billede joern Nybegynder
09. november 2006 - 21:23 #21
Hej.

Jeg har nu læst yderligere 100 sider og måske forstået {} og ;
Jeg har også efter bedste evne indsat dit eksempel, men som jeg havde regnet med, får jeg det ikke til at fungere.  Mulighederne for fejl og misforståelser er for mig uendelige.
Jeg giver ikke op, også idag en lille sejr;  at der kommer en alert-boks som bekræftelse på at en pladsbestilling er afsendt.  http://jkfsoft.dk/hrbook/H45.htm
Avatar billede thesurfer Nybegynder
10. november 2006 - 00:06 #22
Din onclick (knappen "thesurfer") er forkert..

Det skal se sådan ud:

<input type="button" value="thesurfer" onclick="bilnr = readCookie("bilnummer");email = readCookie("mailadresse");alert('Dit bilnr er ' + bilnr + ' og din mail adresse er ' + email);return false;"

Jeg ville dog nok hellere putte koden i en funktion..

Pas på med at bruge "-tegnet til forskellige ting..

Lige som med VB:
Hvis du starter en streng med ", afsluttes strengen med "-tegnet.
Det er det samme med events, som f.eks. onclick. Derfor:

Hvis du absolut *vil* bruger "-tegnet midt i en streng, skal du enten escape'e det med \", eller bruger '-tegnet til at starte strengen..

Gælder også for events (f.eks onclick)..
Avatar billede thesurfer Nybegynder
10. november 2006 - 00:07 #23
Hehe.. Så laver jeg selv fejlen..

Sådan:

<input type="button" value="thesurfer" onclick="bilnr = readCookie('bilnummer');email = readCookie('mailadresse');alert('Dit bilnr er ' + bilnr + ' og din mail adresse er ' + email);return false;"

Som du kan se, er det kun start og slut tegnet, der er "-tegnet.. dvs, de ydre tegn..
Avatar billede thesurfer Nybegynder
10. november 2006 - 00:42 #24
Jeg har lavet følgende til din side, så det bliver nemmere at arbejde med:

function saetCookie(b, e)
{
    // Her kan du sætte antallet af dage cookien skal leve:
    antal_dage_som_cookien_skal_leve = 30; // rediger denne

    createCookie("bilnummer", b.value, antal_dage_som_cookien_skal_leve_dvs_huskes); // opret cookie med de valgte data
    createCookie("mailadresse", e.value, antal_dage_som_cookien_skal_leve_dvs_huskes); // opret cookie med de valgte data
    rBil = readCookie("bilnummer"); // Check: læg værdien over i en variabel ("rBil")
    rEmail = readCookie("mailadresse"); // Check: læg værdien over i en variabel ("rEmail")
    alert("Følgende oplysniger er nu gemt:\n\nBilnummer: " + rBil + "\nMail adresse: " + rEmail); // vis de gemte data
}

function sletCookie()
{
    eraseCookie("bilnummer"); // slet cookien "bilnummer")
    eraseCookie("mailadresse"); // slet cookie "mailadresse"

    // Her kan du vælge om indeholder i felterne og skal slettes:
    slet_vaerdien_i_felterne = false; // FALSE = værdierne skal IKKE slettes, TRUE = værdierne SKAL slettes

    if (slet_vaerdien_i_felterne == true)
    {
        f = document.kunde; // opret en reference til form, og kald reference "f"s
        f.bilnr.value = ""; // sæt feltets værdi til "" (tom)
        f.email.value = ""; // sæt feltets værdi til "" (tom)
    }
}

function hentCookie()
{
    f = document.kunde; // opret en reference til form, og kald reference "f"
    rBil = readCookie("bilnummer"); // læs værdien af cookien "bilnummer" ind i variablen "rBil"
    rEmail = readCookie("mailadresse"); // læs værdien af cookien "mailadresse" ind i variablen "rEmail"
    if (rBil != null) f.bilnr.value = rBil; // hvis værdien ikke er null (som betyder tom cookie), put værdien i feltet i formen
    if (rEmail != null) f.email.value = rEmail; // hvis værdien ikke er null (som betyder tom cookie), put værdien i feltet i formen
}


Jeg har også rettet din "Opret cookie" knap til følgende:

<input type="button" value="Opret cookie" onclick="saetCookie(this.form.bilnr,this.form.email)">

"this.form.bilnr" betyder "I denne form, tag feltet bilnr" (og det samme med email)

Den sender en reference til objekterne (felterne) til funktionen "saetCookie", som kan tilgå deres egenskaber (indhold/value osv..)

Og til sidst har jeg tilføjet en slet-cookie knap:
<input type="button" value="Slet cookie" onclick="sletCookie()">


Funktionerne med danske navne, kalder funktionerne med de engelsk navn, og sender data med.

Jeg har kommenteret koden, så den burde være til at forstå..

Men skriv endeligt, hvis du har spørgsmål.
Avatar billede thesurfer Nybegynder
10. november 2006 - 00:43 #25
Jeg tror faktisk, at man altid bør sætte "return false" på knapper, da browseren Mozilla FireFox behandler alle buttons som submit-knapper..

Så altid: onclick="...noget kode her... ; return false"
Avatar billede thesurfer Nybegynder
10. november 2006 - 00:46 #26
Det er ikke det hele..

Jeg har også tilføjet et kald til funktionen "hentCookie()" i body onload, så dataene loades automatisk:

<body ... onload="hentCookie()">

Hvis browseren ikke skal loade dataene automatisk, fjern onload="hentCookie()"-delen..
Avatar billede joern Nybegynder
10. november 2006 - 07:53 #27
Hej thesurfer.

Det er overvældende, at du vil hjælpe så meget.  Jeg skal om lidt på værksted og have lavet bremser før periodesyn, men vil forsøge i eftermiddag at anvende det seneste.    M.v.h. Jørn
Avatar billede thesurfer Nybegynder
10. november 2006 - 10:38 #28
Når man nu har lyst til at hjælpe, kan man lige så godt gøre det :-)

Jeg har kigget på din side.. både indholdet og kode..

Jeg ved ikke om resultatet er en webside, eller et program (hvor websiden bare viser hvordan det kommer til at se ud).


Hvis det er en webside du vil lave til en kunde, vil jeg komme med nogle anbefalinger:

1) Dynamisk - ASP (VBScript) - Gentagne data
Jeg kan se at dine data oftest kommer igen og igen. Her tænker jeg på afgangstid.
Her ville jeg nok bruge en database.
Jeg ville nok putte standardværdierne i databasen, og rettelserne også.
Så hiver jeg alle standardværdierne ud, og derefter rettelerne. Rettelserne erstatter standardværdier

Eksempel (i arrayform da jeg ikke har lavet database):

<%

' Tiden "09:55" ændres til "09:23"

dim standard
dim rettelse

standard="06:55,07:55,08:55,09:55,10:55,11:55,12:55,13:55,14:55,15:55,16:55,17:55,18:55"
rettelse=",,,09:23,,,,,,,,,"

s = split(standard, ",")
r = split(rettelse, ",")

tmp = ""
tid = ""
for i = 0 to ubound(s)
    tid = s(i)
    if r(i) <> "" then tid = "<b>" & r(i) & "</b>" ' her fremhæves ændringen med fed: <b>Tekst</b>
    tmp = tmp & tid & ","
next
tmp = left(tmp, len(tmp) - 1)

response.write tmp
' Resultatet: 06:55,07:55,08:55,09:23,10:55,11:55,12:55,13:55,14:55,15:55,16:55,17:55,18:55

%>

2) Genbrug layout, ASP eller CSS

Ved at bruge ASP eller f.eks. CSS (Cascading Style Sheets), kan du lave en skabelon, så du altid får samme layout.
Det kan være tabeller, farver, skriftformater osv.

ASP lektioner: http://www.html.dk/tutorials/asp/

CSS lektioner: http://www.html.dk/tutorials/css/

3) Valider koden

Hvis du kan validere koden, og få den godkendt af W3C, vil den blive ens i samtlige browser.. rent teoretisk.
Der er altid fejl i browsere, som vil vise designet lidt forkert, men så bliver siden vist korrekt i ca 95% og derover..
Det skal lige siges, at det er et skud fra hoften, og at jeg ikke kender statistikken.

Validering af HTML (outputtet/udskriften): http://validator.w3.org/

Husk doctype.
Avatar billede joern Nybegynder
10. november 2006 - 16:51 #29
Hej thesurfer

For 5 år siden udviklede jeg et program til HR-færgerne, der af de ansatte bruges til at registrere pladsbestilling, der modtages via telefonopkald. http://www.jkfsoft.dk/fargebok.htm    Dette program anvender en årsplan, der igen aktiverer 2 af 38 sæt sejlplaner, sommer / vinter jul og påske o.s.v.  Programmet fungerer i LAN og har i de travleste perioder 3 betjeningspladser.
Efterhånden som pladserne bliver reserveret fremgår dette straks af en progressbar for hver afgangstid.

Hjemmesiden du har set og omtaler er en af 106 sider, alle dannes fra det ovenfor beskrevne program ved et klik på en knap - én uge ad gangen.
Planen for indeværende dag bliver altså løbende vedligeholdt således, at der ikke kan ske overbookning eller en kunde ved en fejltagelse booker en afgang, der er afsejlet.  De reservationer der skal indløbe online vil, ligesom de telefonisk modtagne, straks regulere visningen af resterende ledige pladser.  Færgernes kapacitet er lille 12 og 22 biler, og om sommeren er der meget ofte udsolgt flere timer før afgangstid.
http://www.hundested-roervig.dk/
Af og til forekommer aflysninger f.eks. som sidste onsdag da høj vandstand umuliggjorde anvendelse af lejerne.  Maskinskade er heller ikke helt sjælden på de gamle færger, og undertiden kan sygdom hos skibsførerne medføre pludselige indskrænkninger i sejladsen.

Hjemmesiderne dannes af 3 dele, en øverste der er fast, en mellemdel der dannes af VB-programmet og en bund, der er fast.

Jeg er først lige kommet hjem efter rep. af bilen - i Stubbekøbing, jeg bor i Stege på Møn.  Synet blev den ikke, håndbremsen, der fungerer på skiver bagpå, kan ikke overholde en bremsekraft på 300 kg, så kalibrene skal skiftes selv om fodbremsen kan aktivere kraft nok.  Bilen er snart 13 år gammel.
Avatar billede thesurfer Nybegynder
11. november 2006 - 00:09 #30
1) Websiden er altså til personalet, og ikke kunderne?

2) Dvs, dit VB program uploader en htm fil?
Avatar billede joern Nybegynder
11. november 2006 - 09:25 #31
Hej.  Forkert.  Websiden er til kunderne, medarbejderne bruger VB-programmet.  Når du læser teksten til ventre i websiden, kan du da ikke være i tvivl, vel?        Hver gang en afgangstid er udsolgt eller er afsejlet genereres en ny, ajourført webside, så kunderne kun kan reservere på afgange, hvor der er ledige pladser.
Avatar billede thesurfer Nybegynder
11. november 2006 - 13:34 #32
Ang "Hver gang en afgangstid er udsolgt eller er afsejlet genereres en ny, ajourført webside":

Som jeg forstår det, genereres en ny ".htm"-fil (af VB programmet), som så må uploades til serveren.


Da du allerede programmerer i VB, vil jeg anbefale ASP som serverside scriptsprog.
Du kan kigge ASP lektionerne igennem på http://www.html.dk/tutorials/asp/

Jeg mener helt klart at du kan optimere dit system, ved bruger af f.eks. ASP og en database (f.eks Access eller MySQL.. MSSQL er lidt overkill).

Hvis du bruger Windows 98, kan du installere webserveren Personal Web Server ("PWS") fra Windows-cd'en.
Hvis du bruger Windows XP/2000/2003, kan du installere webserveren Internet Information Services ("IIS") fra Windows-cd'en.

Med webserveren (enten PWS eller IIS) kan du lave og teste ASP sider, lokalt på din egen computer.

Når du er tilfreds med resultatet, kan du uploade dine filer til en server der understøtter ASP. Så vil du kunne bruge dem.

Hvis serveren ikke understøtter ASP, bliver de læst som HTML, hvilket betyder at din kode (typisk VBScript) ikke bliver afviklet/udført.


Men jeg vil klart anbefale at kigge på ASP + database (f.eks. Access til at starte med).
Avatar billede thesurfer Nybegynder
11. november 2006 - 13:38 #33
Ang "Når du læser teksten til ventre i websiden, kan du da ikke være i tvivl, vel?":

Korrekt.. Jeg havde bare ikke læst teksten til venstre på websiden.. :-)
Avatar billede joern Nybegynder
11. november 2006 - 17:10 #34
Hej thesurfer.
Eksperten har vist være 'nede' et stykke tid idag.  I øjeblikket ligger websiderne på min server, der kører Apache på en win2003.  Kunden har som 'server' for det nuværende telefon-betjente system også en win2003-installation.  Nye websider skal ikke 'uploades' hos mig, men blot kopieres over LAN.
VB-systemet skal ikke ændres, som omtalt i en del tråde, - måske også nogle, du har set - anvender jeg rene ascii-filer til opbevaring af data.
Hele online-systemet er faktisk operationelt, blot kunne det være elegant, at kunder blev genkendt, - der er nemlig mange faste - og ikke behøvede at indtaste deres bilnummer hver gang.  Det er sådan set det eneste i hele dette spørgsmål :-)

Efter at jeg havde indsat dit seneste forslag til cookie-løsning, holdt mine tidligere JavaScript med kontrol at tomme felter op med at fungere, så p.t. er cookie-scriptene fjernet igen.

Jeg vil gerne orientere dig om kundens IT-kompetancer og budget, men det skal ikke foregå åbent her i tråden, det må være via e-mail eller evt. på Skype, hvor mit navn er:  jkfsoft.    Skulle du have lyst til en udflugt til Møns Klint i en weekend, så kan du kigge ind og få hele projektet forevist.   
Jeg takker igen for din interesse for dette spørgsmål, og lægger du et svar, vil jeg give pointene, så de ikke hænger uudløste.
Avatar billede joern Nybegynder
13. november 2006 - 20:06 #35
Hej thesurfer.

Jeg har ikke tidligere interesseret ret meget for cookies, men vidste dog at IE lægger cookies under "dokument and settings".  Dér kiggede jeg så for at se om mine forsøg førte til en ny cookie.  Imidlertid er Opera min standard-browser, så alle forsøg er udført med den.
Jeg har netop testet en toturial, der skulle oprette en cookie - den kunne jeg ikke se i "cookie-mappen". 
Opera tilbyder et gennemsyn af cookies under sine indstillinger og dér - mellem 100-vis af 'småkager' lå sandelig 4 stk. oprettet af mig !
http://jkfsoft.dk/medier/cookies.jpg              Nu skal jeg så bare finde ud af hvilket forsøg, der skrev dem, og finde ud af at læse dem.
Avatar billede thesurfer Nybegynder
14. november 2006 - 00:07 #36
Hej Jørn.

Jeg er ret sikker på at koden fra 10/11-2006 00:42:48 virker..

Jeg testede koden i min Opera, hvor den sagtens kunne finde bilnummer og email.

Prøv at lave en backup af filen, og derfter fjerne alt andet kode som har med cookies at gøre..

Jeg regner med at kigge på koden, engang i morgen.

- Points venter vi lige med, indtil det virker 100%.. :-)
Avatar billede joern Nybegynder
14. november 2006 - 19:20 #37
Hej thesurfer.

Nu har jeg på siden http://jkfsoft.dk/hrbook/H46.htm indsat funktionen til at hente cookie i headeren.  Men hvordan får jeg den så udført?
Der skulle eksistere to cookies til jkfsoft.dk med bilnr og email.
Jeg har forsøgt at lave et kald til funktionen under knappen, som er omdøbt til lejligheden, men som tidligere omtalt har jeg mere end vanskeligt ved at se hvad der er rigtigt og hvad der ikke er i disse script.    Jeg prøvede først at tildele indholdet til felterne, nu prøver jeg bare at få vist værdierne i en boks.  Det bliver ved forsøget :-(
Avatar billede joern Nybegynder
14. november 2006 - 19:36 #38
Hej.

Og i http://jkfsoft.dk/hrbook/R46.htm  har jeg forsøgt at tildele rBil en værdi og indsætte den i feltet - det virker!
Avatar billede thesurfer Nybegynder
14. november 2006 - 20:28 #39
Hej Jørn.

* Hvordan sætter du cookien? Det kan jeg ikke se på de to links..

* I din onclick skal det bare hedde onclick="hentCookie()" i stedet for onclick="function hentCookie()"..

* Denne her funktion kan du godt smide væk:

  function setCookie(navn,vaerdi,udloeb,sti,websted,sikker)
  {
    cookietekst = navn + "=" + escape(vaerdi)
   
    if (udloeb) {
    cookietekst = cookietekst + '; expires=';
    cookietekst = cookietekst + udloeb.toGMTString();
    }
   
    if (sti) {
    cookietekst = cookietekst + '; path=' + sti;
    }

    if (websted) {
    cookietekst = cookietekst + '; domain=' + websted;
    }

    if (sikker) {
    cookietekst = cookietekst + '; secure=';
    }

    document.cookie = cookietekst;
  }
Avatar billede thesurfer Nybegynder
14. november 2006 - 20:29 #40
PS:

"Hvornår mon kunden begynder på sin del af opgaven?" -- Huh? :-)
Avatar billede joern Nybegynder
14. november 2006 - 20:57 #41
Hej.

Jeg sætter den ikke i de to eksempler. Jeg forsøger at hente de cookies, der eksisterer.  Det du citerer er ikke aktivt, det er eksemplet fra min ene lærebog.

Hvis jeg skal uddybe kommentaren skal det være diskret.  Men projektet med online-booking startede i maj måned efter en først uformel henvendelse fra en menig medarbejder - matros og webmaster på HR's hjemmeside.  I et halvt år har det program som danner hjemmesider været tilgængeligt for kunden, men endnu har jeg ikke hørt om, at de har afprøvet det.
Linien under fartplanen et et tilbud om at knytte en kommentar til dagens afgange, skulle kunden kigge ind, hører jeg måske fra dem!
Avatar billede thesurfer Nybegynder
18. november 2006 - 14:41 #42
Jeg kan se at spørgsmålet ikke er afsluttet endnu, så jeg går ud fra at problemet ikke helt er løst..

Hvad mangler der?
Avatar billede joern Nybegynder
18. november 2006 - 15:37 #43
Hej.

Der mangler bare at det virker.  Men projektet er først tilbudt i drift til april 2007, så jeg venter på en åbenbaring i det nye år.  Kunden har såmænd endnu ikke accepteret leveringsaftale og kravspecifikation.  Så svar du blot.
Avatar billede thesurfer Nybegynder
19. november 2006 - 00:47 #44
Ok, så lægger jeg er svar.

Du er velkommen til skrive, selvom svaret er accepteret.
Avatar billede joern Nybegynder
19. november 2006 - 10:38 #45
Hej thesurfer.
Der er stor forskel på at skulle lære et sprog ved selvstudium, og så at have en lærer ved sin side, der kan svare på "dumme" spørgsmål.  Hvor skal der bruges "return" og hvor skal der være semikolon.  Den lærebog, jeg har, synes jeg ikke er tilstrækkelig med hensyn til at forklare betydningen af hver del i syntaksen.
Avatar billede joern Nybegynder
19. november 2006 - 10:40 #46
Jeg har klikket på "Accepter" 6 gange - det er ligesom med mine egne JavaScript :-)
Avatar billede joern Nybegynder
19. november 2006 - 10:41 #47
Sorry, jeg kan ikke få lov at acceptere dit svar.
Avatar billede joern Nybegynder
19. november 2006 - 10:42 #48
Det er måske Opera , der er problemet med Script-fortolkningen.
Avatar billede joern Nybegynder
19. november 2006 - 10:43 #49
Prøver at åbne spørgsmålet i Firefox...
Avatar billede joern Nybegynder
19. november 2006 - 10:43 #50
Nu accepterer jeg i FireFox
Avatar billede joern Nybegynder
19. november 2006 - 10:44 #51
Så prøver vi IE
Avatar billede joern Nybegynder
19. november 2006 - 10:45 #52
Det er sidste forsøg - dette med IE6.
Avatar billede thesurfer Nybegynder
20. november 2006 - 08:35 #53
Det er fordi du skal markere navnet i boksen først, og derefter klikke på Accepter-knappen..

Ellers virker det ikke.. :-)

Det er noget "nyt" der er kommet, i version 4 (nuværende version) af Eksperten..
Avatar billede joern Nybegynder
20. november 2006 - 09:56 #54
Hej.

Så lykkedes det at acceptere.  I går lykkedes pludselig noget helt andet, der ikke har fungeret i 1½ år.  Jeg har 3 domæner og egen webserver, der hoster JkfSoft.dk    Men jeg har indtil igår aldrig kunnet skrive direktiverne for Virtuel Host så de andre 2 domæner blev dirigeret til de respektive mapper - og index.htm-filer.  Igår skulle jeg vejlede HR-Færgefart (der sker altså lidt igen nu) om installation af Apache, derfor kiggede jeg igen på min egen konfigurationsfil, og pludselig kunne jeg se en fejl, som jeg har overset 30 gange.  Nu peger feliks det rigtige sted.

Når jeg en dag får læst min egen cookie, skal du nok få besked her i tråden.
Avatar billede thesurfer Nybegynder
20. november 2006 - 10:00 #55
Hvis du giver mig den endelige kode, skal jeg fortælle dig hvordan du får det til at virke.

Med mindre at det er en eller anden fuldstændig mystisk fejl, som opstår engang imellem i it-universet.. den slags fejl forekommer..

Der er intet værre end en computer, der siger at der er fejl, når der i virkeligeheden ikke er fejl.
Avatar billede joern Nybegynder
18. februar 2007 - 20:47 #56
Hej.

Jeg genoptager nu forsøget på at få skrivning og læsning af cookie til at fungere.  Foreløbig printer jeg dette spørgsmål ud, så jeg kan læse det på papir.  Jeg har også gemt indholdet som en fil, så jeg kan evt. "klippe og klistre".  Blot for at orientere om, at jeres anstrengelser - især the surfer - ikke har været spildt.

Ang. indlæg 14-11 om kunden, kan jeg fortælle at test af projektet startes i morgen.
Avatar billede thesurfer Nybegynder
18. februar 2007 - 21:20 #57
Hej joern.

Det er noget tid siden, at vi sidst havde gang i dette spørgsmål..

Men her er hvad du har brug for at gøre:



1) Put følgende JavaScript i filen "cookie.js", som du placerer ud i roden af din mappestruktur/webhotel (læg mærke til, at der IKKE er "script"-tags!):

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}



2) Referer til filen med cookie-funktionerne, i HEAD-området, så det ser sådan ud:
<head>
<script type="text/JavaScript" language="JavaScript" src="/cookie.js"></script>
</head>



3a) For at skrive en cookie:
onclick("createCookie('navnet-på-cookien','værdien-på-cookie','evt-udløbsdato-på-cookie');return false"

Eksempel:
<input type="button" value="Gem data i cookie" onclick="createCookie('bilnr',this.form.bilnr.value,'')">



3b) Aflæsning af cookie ved load:
<body onload="document.FormenTilBilnrCookie.bilnr.value=readCookie('bilnr');">

Du har ikke angivet navnet på formen, der indeholder textbox'en til bilnr og knappen "Gem data i cookie"!
Derfor: <form name="FormenTilBilnrCookie">

Navnet "FormenTilBilnrCookie" er bare et eksempel, og kan naturligvis ændres! :-)



3c) Sletning af cookie:
Hvis brugeren ikke længere ønsker at systemet skal huse bilnr:

onclick="eraseCookie('bilnr');


Så burde dit system køre som det skal! :-)
Avatar billede joern Nybegynder
18. februar 2007 - 23:37 #58
Hej thesurfer.

Endnu engang tak.  Jeg har oprettet js-filen som du angiver, og indsat linier i en af mine sider http://hr-booking.jkfsoft.dk/H8.htm

Når siden åbnes står der: null i bilnr.feltet og Opera har ikke tilføjet en ny cookie på sin liste.
Formen hedder:    kunde

Da jeg fremdelses ikke forstår syntaksen ret godt, kan jeg jo meget let lave fejl.

Mener du at js-filen skal ligge i samme mappe som h8.htm eller i en mappe:  htdocs under apache, som i øvrigt ikke har med dette projekt at gøre.  Her er et brudstykke af min httpd.conf      hr-booking er den sidste virtual host



NameVirtualHost *:80

<VirtualHost *:80>
  ServerName www.jkfsoft.dk
  ServerAdmin jt@jkfsoft.dk
  DocumentRoot C:/PROGRA~1/Apache/Apache2/htdocs/jkfsoft
#  PerlOptions +Parent
#  PerlSwitches -wT
</VirtualHost>

<VirtualHost *:80>
  ServerName feliks.dk
  ServerAdmin jt@jkfsoft.dk
  DocumentRoot C:/PROGRA~1/Apache/Apache2/htdocs/jkfsoft/feliks
#  PerlOptions +Parent
#  PerlSwitches -wT
</VirtualHost>

<VirtualHost *:80>
  ServerName jydelejet.dk
  ServerAdmin jt@jkfsoft.dk
  DocumentRoot d:/ftp-root/jydelejet
#  PerlOptions +Parent
#  PerlSwitches -wT
</VirtualHost>

<VirtualHost *:80>
  ServerName dokumentarkiv.dk
  ServerAdmin jt@jkfsoft.dk
  DocumentRoot C:/PROGRA~1/Apache/Apache2/htdocs/da
#  PerlOptions +Parent
#  PerlSwitches -wT
</VirtualHost>

<VirtualHost *:80>
  ServerName journal.dokumentarkiv.dk
  ServerAdmin jt@jkfsoft.dk
  DocumentRoot C:/PROGRA~1/Apache/Apache2/htdocs/journal
#  PerlOptions +Parent
#  PerlSwitches -wT
</VirtualHost>

<VirtualHost *:80>
  ServerName sidsel.dokumentarkiv.dk
  ServerAdmin jt@jkfsoft.dk
  DocumentRoot d:/ftp-root/sidsel
#  PerlOptions +Parent
#  PerlSwitches -wT
</VirtualHost>

<VirtualHost *:80>
  ServerName hr-booking.jkfsoft.dk
  ServerAdmin jt@jkfsoft.dk
  DocumentRoot d:/sbookhtm
#  PerlOptions +Parent
#  PerlSwitches -wT
</VirtualHost>
Avatar billede thesurfer Nybegynder
18. februar 2007 - 23:43 #59
Prøv først at lægge cookie.js sammen med din .htm fil, og fjern "/" fra src="/cookie.js".

Lad os få det til at virke først.. så kan du flytte filen senere..

Prøv det, og skriv tilbage..
Avatar billede thesurfer Nybegynder
18. februar 2007 - 23:45 #60
Det virker fint hos mig, når jeg sætter cookien..

Ændrer din onload til:

<body onload="bilnr = readCookie('bilnr'); if (bilnr != null) document.FormenTilBilnrCookie.bilnr.value=bilnr">
Avatar billede thesurfer Nybegynder
18. februar 2007 - 23:50 #61
Jeg har glemt at rette "FormenTilBilnrCookie" til "kunde"..
Avatar billede thesurfer Nybegynder
18. februar 2007 - 23:56 #62
Jeg vil helt klart anbefale, at du sætter dig ind i HTML:

http://www.html.dk/tutorials/html/

Kildekoden er meget rodet, og der er dubletter der ikke må være der..

Jeg vil faktisk anbefale at du sætter dig ind i både HTML og JavaScript..

Egentligt ville det også være en god ide, at kunne et serverside scriptsprog, som f.eks. ASP (nu hvor du allerede kan VB).. :-)
Avatar billede joern Nybegynder
19. februar 2007 - 10:05 #63
Hej TheSurfer.

Da jeg skrev i tråden igår, var det ment som en påskønnelse af din indsats i november, nemlig at jeg nu for nogle timer genoptager dette emne.
Lykkes det ikke på en rimelig kort tid, bliver det ikke udført nu.  Det er overhovedet ikke afgørende for at kunderne kan udføre deres pladsbestillinger.  Da jeg begyndte på cookie-sagen, var det kun for at tilføre det ekstra "pift" at kunder blev genkendt, når de næste gang ville bestille plads fra deres egen PC.
Du hører ikke mere fra mig i denne tråd.
Avatar billede thesurfer Nybegynder
19. februar 2007 - 10:31 #64
Ahh, ok..

Så misforstod jeg dit indlæg 18/02-2007 23:37:05 hvor du bl.a. skriver:

"Mener du at js-filen skal ligge i samme mappe som h8.htm eller i en mappe..."

Det virkede som et spørgsmål, så jeg prøvede på at besvare det.. :-)

Held og lykke med projektet! Jeg håber at alt går godt.
Avatar billede showsource Seniormester
10. marts 2008 - 10:31 #65
Ehh, denne kommentar er rettet mod thesurfer .....
Har leget lidt med cookie halløjet, for at sætte en tabelbredde, altså det er muligt at klikke på et "link" og så få vist tabellen i den bredde.

Vil blot spørge om flg. er ok, eller om noget bør rettes:

var cookname = 'tablesize';
var cookdays = 1;
var bredde = 440;

function createCookie(value) {

    var date = new Date();
    date.setTime(date.getTime()+(cookdays*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    document.cookie = cookname+"="+value+expires+"; path=/";
    setSize(value);

}

function readCookie() {
    var nameEQ = cookname+ "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function setSize(size) {

    if (($bcontent = get_id('cook'))) {
    $bcontent = $bcontent.style;

        if(!size && !readCookie()) {
        $bcontent.width = bredde;
        }else{
            if(readCookie()) {
            $bcontent.width = readCookie();
            }else{
            $bcontent.width = bredde;
            }
        }

    }else{

    return false;

    }

}


Før afsluttende </body> bruger jeg så:

<script type="text/javascript">
setSize();
</script>

Laver meget gerne et spm. med point. !!!!!
Avatar billede showsource Seniormester
10. marts 2008 - 10:32 #66
Nå, hov, koden for get_id() er: ( fundet i kildekoden her på exp )

function get_id ($id) {

    if (document.all && document.getElementById) {
    return document.all($id);
    } else if (!document.all && document.getElementById) {
    return document.getElementById($id);
    } else {
    return false;
    }
}
Avatar billede thesurfer Nybegynder
10. marts 2008 - 20:37 #67
showsource> Du bliver nødt til at oprette et nyt spørgsmål.. Ellers bliver dine indlæg betragtet som spam, hvilket ikke er tilladt ifølge Ekspertens regler, nærmere betegnet §2.1.8:

[Det er ikke tilladt, at] "spamme, flame eller skrive indlæg uden relevans for det aktuelle spørgsmål."

Hvis du gør det, kommer coadmins (eller admin) efter dig :-)

Så, opret et nyt spørgsmål, for en sikkerhedsskyld.. :-)



Jeg gad egentligt godt høre lidt om hvordan det går med joern.. jeg kan se at siderne ikke længere er tilgængelige..
Avatar billede showsource Seniormester
11. marts 2008 - 09:07 #68
Jahhh, det har du vel ret i, så det gør jeg!
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

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