---
title: "Webbutik bygge och kak problem"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/50008-webbutik-bygge-och-kak-problem"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "fredriksk"
published: "2002-08-10T16:04:49.000Z"
updated: "2002-08-11T12:32:05.000Z"
replies: 18
views: 505
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/50008-webbutik-bygge-och-kak-problem"
---

# Webbutik bygge och kak problem

## #1 — fredriksk, 2002-08-10T16:04Z

Hello!
Går en kurs i php programmering/javascript. 
Som projektarbete skall vi bygga en webbutik och jag håller nu på med att försöka få ihop själva köpdelen av den.

Själva kundkorgen skall implementeras med cookies och till detta har vi fått en klass tilldelad oss i en fil jag kallar kaka.js

Själv förstår jag inte riktigt hela klassen då jag är ganska färsk på javascript men det skall ju inte behövas heller. Koden till klassen ser ut så här:

```
function Kaka(document, name, hours, path, domain, secure) {
  this.$document = document;
  this.$name = name;

  this.$expiration=hours?new Date(new Date().getTime() + hours*36000000):null;
  this.$path=path?path:null;
  this.$domain=domain?domain:null;  
  this.$secure=secure?secure:null;
}

Kaka.prototype.store = function() {
  var cookieval="";
  for(var prop in this) {
    if (prop.charAt(0) == '$' || ((typeof this[prop]) == 'function'))
      continue;
    if(cookieval != "") cookieval+='&';
    cookieval += prop + ':' + escape(this[prop]);
  }
	
  var cookie = this.$name + '=' + cookieval;
  if(this.$expiration) cookie+=';expires='+this.$expiration.toGMTString();
  if(this.$path) cookie +='; path='+this.$path;
  if(this.$domain) cookie +='; domain='+this.$domain;
  if(this.$secure) cookie +='; secure='+this.$secure;

  this.$document.cookie=cookie;
}

Kaka.prototype.load = function() {
  var allcookies = this.$document.cookie;
  if(allcookies == "") return false;
	
  var start = allcookies.indexOf(this.$name + '=');
  if(start == -1) return false;
  start += this.$name.length+1;
  var end = allcookies.indexOf(';', start);
  if (end == -1) end = allcookies.length;
  var cookieval = allcookies.substring(start, end);
	
  var a = cookieval.split('&');
  for(var i=0;i<a.length;i++)
    a[i] = a[i].split(':');

  for(var i = 0;i<a.length; i++)
    this[a[i][0]] = unescape(a[i][1]);

  return true;
}

Kaka.prototype.remove = function() {
  var cookie = this.$name+'='; 
  if(this.$path) cookie += '; path='+this.$path;	
  if(this.$domain) cookie += '; domain='+this.$domain;
  cookie+='; expires=Fri, 02-Jan-1970 00:00:00 GMT';

  this.$document.cookie=cookie;
}
```

Som förslag till hur man kan använda klassen har vi fått följande av vår handledare...

> Om klassen ovan skulle användas för att koda personinformationen skulle det så ut så här. 
> 
> person = new Kaka(document, "person");
> person\["namn"\]="kalle";
> person\["telefonnummer"\]="12345";
> person.store();
> Vill vi istället hämta värdet från kakan skulle det se ut så här: 
> 
> person = new Kaka(document, "person");
> if(person.load())
>   alert("Hejsan "+person.name);

Och det är väl allt jag behöver veta antar jag... 
Så jag gjorde en testsida för att kika lite på hur det kunde tänkas lösas. Detta är mitt förslag...

```
<html>
<head>
<title>Fredriks WebShop - Produktlista</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../style.css" rel="stylesheet" type="text/css">

<!-- Här kommer javascriptet som lägger till varorna i cookiesen -->
<script language="JavaScript1.2" type="text/JavaScript1.2" src="kaka.js">
	function AddItem(obj)
	{
		var antal=obj.value;	
		
		varukorg["vara"]=antal;							//stopar in antalet på platsen med varunamnet
		varukorg.store();								//antar att denna sparar värdet i kakan
	}	
	
	varukorg = new Kaka(document, "varukorg", 12);					//skapar ny kaka
	varukorg.load();												//laddar in värden från gammal kaka
		
</script>
</head>

<body>

<p align="center"><font color="#0000FF" size="5">Produktlista</font></p>
<p align="center">Nedan visas en lista med alla produkter som g&aring;r att k&ouml;pa 
  i Fredriks Webbshop!</p>
<hr align="center" width="70%"></p>
<table width="704" border="0" align="center" cellpadding="2" cellspacing="2" bordercolor="#FFFFFF" bgcolor="#FFFFFF">
  <tr bgcolor="#CCCCCC"> 
    <td width="68" bgcolor="#999999"><font color="#000000">Produkt id</font></td>
    <td width="173" bgcolor="#999999"><font color="#000000">Vara</font></td>
    <td width="243" bgcolor="#999999"><font color="#000000">Beskrivning</font></td>
    <td width="64" bgcolor="#999999">Pris/st</td>
    <td width="62" bgcolor="#999999">Antal</td>
    <td width="56" bgcolor="#999999">K&ouml;p</td>
  </tr>
  <!-- här börjar formuläret som krävs för köp knappen och för antalfältet -->
  <form action="/users/fskfr02/kund/produkter.php" method="POST" name="kop">
<TR bgcolor=#FFFFFF><TD>3</TD>
			<TD>Apelsiner</TD>
			<TD>Gula runda frukter</TD>
			<TD>2.00</TD>			
			<TD><input name='antal0' type='text' size='4' maxlength='4' class='formFields'></TD>
			<TD><input name='kop0' type='submit' onclick='AddItem(document.kop.antal0);' value='K&ouml;p' class='formButtons'>
			</TR>
<TR bgcolor=#CCCCCC><TD>5</TD>
			<TD>Druvor (Blå)</TD>
			<TD>Söta druvor med druvsmak</TD>
			<TD>2.00</TD>			
			<TD><input name='antal1' type='text' size='4' maxlength='4' class='formFields'></TD>
			<TD><input name='kop1' type='submit' onclick='AddItem(document.kop.antal1);' value='K&ouml;p' class='formButtons'>
			</TR>
<TR bgcolor=#FFFFFF><TD>4</TD>
			<TD>Druvor (Gröna)</TD>
			<TD>Syrliga druvor med druvsmak</TD>
			<TD>1.00</TD>			
			<TD><input name='antal2' type='text' size='4' maxlength='4' class='formFields'></TD>
			<TD><input name='kop2' type='submit' onclick='AddItem(document.kop.antal2);' value='K&ouml;p' class='formButtons'>
			</TR>
<TR bgcolor=#CCCCCC><TD>6</TD>
			<TD>Kiwi</TD>
			<TD>Grön och luden. Mycket nyttig.</TD>
			<TD>2.00</TD>			
			<TD><input name='antal3' type='text' size='4' maxlength='4' class='formFields'></TD>
			<TD><input name='kop3' type='submit' onclick='AddItem(document.kop.antal3);' value='K&ouml;p' class='formButtons'>
			</TR>
<TR bgcolor=#FFFFFF><TD>2</TD>
			<TD>Äpplen</TD>
			<TD>Smakar som Äpplen</TD>
			<TD>1.00</TD>			
			<TD><input name='antal4' type='text' size='4' maxlength='4' class='formFields'></TD>
			<TD><input name='kop4' type='submit' onclick='AddItem(document.kop.antal4);' value='K&ouml;p' class='formButtons'>
			</TR>
  </form>
</table>
<p align="center">&nbsp;</p>
<hr width="70%">
<p align="center"><a href="index.htm">Meny</a> | <a href="kunduppgifter.php">Kunduppgifter</a> 
  | <a href="kassan.htm">Kassa</a></p>

</body>
</html>
```

Men serru detta fungerar inte. För det första så antar jag att det borde skapas en coockie med namnet varukorg direkt när sidan laddas. Så är inte fallet. Å andra sidan får jag inga felmeddelanden heller när jag klickar på någon av knapparna för att köpa en vara... 

Vad gör jag för tokigt nu då???

OBS inlämning på Torsdag!!!!!!

 :stud

Permalänk: https://www.webforum.nu/p/50008

## #2 — solbulle, 2002-08-10T23:54Z

SKa inte deta se ut typ så här:

```
<script language="JavaScript1.2" type="text/JavaScript1.2" src="kaka.js">
<script language="JavaScript1.2" type="text/JavaScript1.2">
	function AddItem(obj)
	{
		var antal=obj.value;	
		
		varukorg["vara"]=antal;							//stopar in antalet på platsen med varunamnet
		varukorg.store();								//antar att denna sparar värdet i kakan
	}	
	
	varukorg = new Kaka(document, "varukorg", 12);					//skapar ny kaka
	varukorg.load();												//laddar in värden från gammal kaka
		
</script>
```

Permalänk: https://www.webforum.nu/p/747974

## #3 — fredriksk, 2002-08-11T09:34Z

Jo... testat det med men det fungerar inte heller... 
Börjar misstänka att det är något fel på själva anropet till funktionen för nu får jag ett scriptfel på den raden när jag klickar på knappen. 

Raden ser ut så här alltså:

```
<input name='kop0' type='submit' onclick='AddItem(document.kop.antal0);' value='K&ouml;p' class='formButtons'>
```

Där antal0 = namnet på det fält innehållande antalet som användaren har anget

och felmeddelandet är:
Object expected

Knepigt det här... \*suck\* 
:l

(editerat anm)
Sorry för php koden.. .fixade till det lite.. 
Dock används inte namnet på knappen till något så det borde inte påverka.

Men tack iaf...=)

Permalänk: https://www.webforum.nu/p/748048

## #4 — Jojoxx, 2002-08-11T10:19Z

Jag tror du missat av Solbulle syftar på. Du kan inte inkludera script i samma script-block som du sedan lägger kod i, utan du får lägga det i varsitt script-block som Solbulle gjort. Annars kommer koden som ligger i script-blocket att ignoreras och funktionen AddItem() kommer aldrig att definieras.

> \<input name='kop$i' type='submit' onclick='AddItem(document.kop.antal0);' value='Köp' class='formButtons'\>

Här har php-kod slunkit med ('kop$i'). Hänvisa gärna till den kod som verkligen kommer fram till webbläsaren. Annars händer det gärna att man försöker hitta fel som egentligen ligger i php-koden och alltså inte har med JavaScriptet att göra.

Permalänk: https://www.webforum.nu/p/748070

## #5 — fredriksk, 2002-08-11T10:20Z

Har kommit på en del grejer till som kanske kan vara till hjälp... 

För det första... provade att skriva ut en alertruta i min funktion. Den körs aldrig... 

Om jag däremot delar på scripten så här:

```
<script language="JavaScript1.2" type="text/JavaScript1.2" src="kaka.js">

	varukorg = new Kaka(document, "varukorg", 12);
	varukorg.load(); 
	
</script>

<script language="JavaScript1.2">

          function AddItem(obj)
          {
                  var antal=obj.value;
 	  alert(antal);
				  
                  varukorg["vara"]=antal; 
                  varukorg.store(); 
          }
		
</script>
```

så kommer alert rutan att skrivas ut. Då försvinner också felmeddelandet "Object expected" för anropsraden (se ovan)

Dock kommer den naturligtvis att klaga på att: "varukorg is not defined". Detta då varukorg inte deklareras i samma script...

Antar att det finns någon slags "global" historia för att få en variabel att bli tillgänglig över flera script?

Men det är en sak till jag inte blir klok på! Varför skapas det ingen kaka när sidan laddar? Borde det inte göra det när raden:

```
varukorg = new Kaka(document, "varukorg", 12);
varukorg.load();
```

Körs?

Man tycker ju det? Kan det finnas fler fel?

Permalänk: https://www.webforum.nu/p/748071

## #6 — Jojoxx, 2002-08-11T10:25Z

Kuriosa...

Dokumenttypen type="text/JavaScript1.2" känns lite avigt på samma sätt som du inte sätter med versionsnummer när du definierar en stilmall med elementet \<style\> (type="text/css2")

[W3C](http://www.w3.org/TR/html401/interact/scripts.html#adef-type-SCRIPT)

Permalänk: https://www.webforum.nu/p/748080

## #7 — fredriksk, 2002-08-11T10:27Z

> **Jojoxx skrev:**
>
> Kuriosa...
> 
> Dokumenttypen type="text/JavaScript1.2" känns lite avigt på samma sätt som du inte sätter med versionsnummer när du definierar en stilmall med elementet \<style\> (type="text/css2")
> 
> [W3C](http://www.w3.org/TR/html401/interact/scripts.html#adef-type-SCRIPT)

Jo.. men det borde ju inte påverka att kakan inte skapas?
Eller kan det göra det?
Vad borde det stå istället?

Permalänk: https://www.webforum.nu/p/748083

## #8 — Jojoxx, 2002-08-11T10:29Z

Åter igen. Du kan **INTE** lägga in script-kod i samma script-block som du använder för att inkludera script. Denna kod kommer att ignoreras, d.v.s. ditt objekt kommer aldrig att definieras.

Alltså, finns attributet *src="something.js"* med i \<script\>-elementet så kan du inte lägga in javascript-kod i detta block utan får skapa ett nytt.

Permalänk: https://www.webforum.nu/p/748085

## #9 — Jojoxx, 2002-08-11T10:31Z

> Jo.. men det borde ju inte påverka att kakan inte skapas?

Nej, det var därför jag skrev "Kuriosa" (skönhets-grej). Medans jag skrev inlägget hade du dock svarat på det tidigare, så det hamnade i mitten.

Permalänk: https://www.webforum.nu/p/748087

## #10 — fredriksk, 2002-08-11T10:32Z

Men hur skall jag isf få med funktionerna i kaka.js + skapa en varukorg med:

new kaka(...)

och därefter

varukorg.load

Jag måste ju få tillgång till dessa funktioner för att kunna utföra dessa rader?

Permalänk: https://www.webforum.nu/p/748089

## #11 — Jojoxx, 2002-08-11T10:34Z

Titta på [Solbulles exempel](http://www.webforum.nu/showthread.php?s=&postid=412590#post412590). Han har där delat upp det i 2 script-block.

Permalänk: https://www.webforum.nu/p/748091

## #12 — Jojoxx, 2002-08-11T10:38Z

```
varukorg["vara"]=antal;
```

Detta verkar inte heller helt rätt. I detta exempel borde du bara kunna lagra 1 vara i varukorgen vid namn "vara". "vara" borde alltså vara en variabel (parameter som skickas med till funktionen) med namn eller id på artikeln som skall läggas i korgen.

Permalänk: https://www.webforum.nu/p/748097

## #13 — fredriksk, 2002-08-11T10:54Z

> **Jojoxx skrev:**
>
> ```
> varukorg["vara"]=antal;
> ```
>
> 
> 
> Detta verkar inte heller helt rätt. I detta exempel borde du bara kunna lagra 1 vara i varukorgen vid namn "vara". "vara" borde alltså vara en variabel (parameter som skickas med till funktionen) med namn eller id på artikeln som skall läggas i korgen.

Joru det är helt rätt... ville bara testa lite... vill först se en coockie ;-)

Permalänk: https://www.webforum.nu/p/748116

## #14 — fredriksk, 2002-08-11T10:59Z

Jo nu ser det ut så här:

```
<script language="JavaScript1.2" type="text/JavaScript1.2" src="kaka.js">
<script language="JavaScript1.2">

          function AddItem(obj)
          {
                  var antal=obj.value;
 				  alert(antal);
				  
                  varukorg["vara"]=antal; 
                  varukorg.store(); 
          }
		  
		  
	varukorg = new Kaka(document, "varukorg", 12);
	varukorg.load(); 
		
</script>
```

Men det fungerar inte heller... Det skapas fortfarande ingen coockie när sidan laddas... 

Dessutom så ser koden väldigt lustig ut i dreamweaver... Den andra \<script\> koden färgas inte rätt... Verkar inte vara rätt att skriva så...

Permalänk: https://www.webforum.nu/p/748119

## #15 — Jojoxx, 2002-08-11T11:03Z

Sorry, såg att Solbulle slarvat lite och missat att \</script\> :)

```
<script language="JavaScript1.2" type="text/JavaScript1.2" src="kaka.js"></script>
<script language="JavaScript1.2" type="text/JavaScript1.2">
	function AddItem(obj)
	{
		var antal=obj.value;	
		
		varukorg["vara"]=antal;							//stopar in antalet på platsen med varunamnet
		varukorg.store();								//antar att denna sparar värdet i kakan
	}	
	
	varukorg = new Kaka(document, "varukorg", 12);					//skapar ny kaka
	varukorg.load();												//laddar in värden från gammal kaka
		
</script>
```

Permalänk: https://www.webforum.nu/p/748124

## #16 — solbulle, 2002-08-11T11:04Z

Om inte annat kan du ju fimpa hela js-filen och lägga hela scriptet i "html-filen". Det blir lättare att felsöka då. (Med tanke på radhänvisningar)

Permalänk: https://www.webforum.nu/p/748125

## #17 — fredriksk, 2002-08-11T11:08Z

Joru... nu börjar det likna något!

nu ser det ut så här... så alla är med ;-)

```
<script language="JavaScript1.2" type="text/JavaScript1.2" src="kaka.js">
</script>

<script language="JavaScript1.2">

          function AddItem(obj)
          {
                  var antal=obj.value;
 				  alert(antal);
				  
                  varukorg["vara"]=antal; 
                  varukorg.store(); 
          }
		  
		  
	varukorg = new Kaka(document, "varukorg", 12);
	varukorg.load(); 
		
</script>
```

Och när jag klickar på knappen kommer alert rutan upp så nu är allt funkis.... 

Förutom att det fortfarande inte finns någon kaka då... 

Vad skall den heta?
Borde den inte heta varukorg.txt eller nått?

Permalänk: https://www.webforum.nu/p/748129

## #18 — Jojoxx, 2002-08-11T12:14Z

Hur webbläsaren väljer att spara cookies på användarens dator har du ingen aning om, och det är inte meningen heller. Du läser bara från document.cookie och webbläsaren talar då om vad som finns där.

Bara ett litet exempel som visar vad som finns;

```
<a href="#" onClick="alert(document.cookie); return false;">Visa kakor</a>
```

Tillägg:

När jag kör din kod (fast jag bytt ut submit-knappen mot en button eftersom jag inte har de kringliggande php-filerna) så sätts kakan och går att läsa från document.cookie.

Permalänk: https://www.webforum.nu/p/748157

## #19 — fredriksk, 2002-08-11T12:32Z

joru!
Nu så!

Nu fungerar det... =)))

Tack så väldans mycket för all hjälp!

Kanske blir det inlämning på Torsdag iaf... =)

Permalänk: https://www.webforum.nu/p/748168

---

Tråden på webben: https://www.webforum.nu/amne/javascript/50008-webbutik-bygge-och-kak-problem
