techniek

Ik maak een spreadsheet met alles wat ik te koop heb.

De spreadsheet, (van Open Office) krijgt de volgende kolommen:

   soort - code - voorraad - prijs - btw

Ik laat Open Office een CSV lijst maken, daarmee werkt de winkel. Bestellingen gaan via een e-mail form. Als gevolg van de bestelling verandert alleen de voorraadkolom in de CSV lijst.

De winkelier hoeft geen PHP enz. kennis te hebben. Een spreadsheet gebruiken, dat kan iedereen. Bij het toevoegen van een nieuw artikel horen ook foto's en beschrijving, die uploaden is niet moeilijk.

De soort wordt aangegeven door een getal, soort 0 betekent: negeer deze regel. Dat wordt ook gebruikt om een artikel tijdelijk te verwijderen. Alle artikelen in groep 2 hebben dus een 2 in de eerste kolom. Een negatief getal, -2 bijvoorbeeld, specificeert de catalogus op het hoogste niveau, zie winkel.csv hieronder.

De map met de winkel heeft drie sub-mappen: groot, klein en tekst. In 'groot' en 'klein' staan de afbeeldingen, in 'tekst' staat een beschrijving van het artikel. De kleine afbeeldingen moeten liefst allemaal even hoog zijn, bijvoorbeeld 112 pixels. De grote afbeeldingen zijn ongeveer 300x200. De kolom code in het spreadsheet bevat één woord bijvoorbeeld boa32. De afbeeldingen moeten als naam boa32.jpg (of .gif, of .png) hebben, de tekst moet boa32.txt heten. De tekst mag HTML zoals <B> en <U> bevatten. De code moet dus een geldige naam zijn, zoiets als abc_def. Die _ wordt zonodig vervangen door , zichtbaar resultaat: abc, def

Pas het $mailadres in post.php aan, misschien ook het onderwerp?

Hier is de code:

winkel.php

1: <html>
2: <head><title>winkel</title>
3: <LINK REL="stylesheet" TYPE="text/css" HREF="winkel.css">
4: </head>
5: <body>
6: <?php
7: include "menu.txt";
8: $ok="xxx";
9: ?>
10: <div class="tx">
11: <h2>intro</h2>
12: <p>Doel van deze winkel is de winkel zelf. Je kunt iets bestellen, je kunt het zelfs betalen maar je krijgt niks. Verder zou alles moeten werken zoals ik het bedoelde.
13: <p>Zoek een artikel in de catalogus. Klik desgewenst op 'bestel' na het invullen van een aantal. Als je klaar bent ga je naar 'betalen'. Daar krijg je een lijst van het bestelde te zien. Die lijst kan je nog veranderen. Na een klik op 'betaal' wordt de lijst als e-mail verstuurd. Je krijgt een bevestigingsbericht terug, met een bankrekeningnummer.
14:
15: <P><A class="m" HREF="wislijst.php">bestellijst wissen?</A>
16:
17: <p><b>Werk in uitvoering! nog niet alles is klaar!</b>
18:
19: <p><A style="float:left" HREF="techniek.php">techniek</A> <A style="float:right" HREF="admin_login.php">admin</A><br>
20: </div></html>

winkel.css

1: body{    font-size:80%;
2:     font-family: verdana, sans-serif;
3:     color: #000;
4:     background: url(web.gif);
5: }
6:
7: a{color:blue;}
8:
9: .btr {background:#f88; float:left;}
10: .btg {background:#8f8; float:right;}
11: .btr, .btg{border:4px solid #448; padding:5; text-decoration:none;}
12:
13: .fl{    float:left;
14:     padding:10 5;
15: }
16:
17: .m{    color:#00f;
18:     background:#ff0;
19:     padding:2 20;
20:     text-decoration:none;
21: }
22:
23: .w{    margin:0 100;
24:     padding:10 100;
25:     font-size:300%;
26:     color:#ff8;
27:     background:#f00;
28: }
29:
30: td{font-size:80%;}
31:
32: .m, img{border:2px solid #f00;}
33:
34: .top a, .top a:hover{
35:     background:#ff0;
36:     color:#f00;
37:     font-size:120%;
38:     font-weight:bold;
39:     text-decoration:none;
40:     padding:5 20 5 20;
41:     margin:4;
42:     border:2px solid #f00;
43: }
44:
45: .top{text-align:center;margin:30 0;}
46: .top a:hover{background:#b99; color:#fff;}
47:
48: .tx{    width:800;
49:     margin:0 100;
50:     background:#fff;
51:     padding:0 20 10 20;
52:     border:6px solid #f00;
53: }
54:
55: .cd{    padding:10px;
56:     font-family:monospace;
57:     font-size:14px;
58:     color:#000;
59:     background:#dd9;
60:     bio-align:left;
61: }
62:
63: .lgn{    margin:100;
64:     padding:0 10;
65:     width:300;
66:     border:1px solid #00f;
67:     background:#fff;
68: }

cat.php

1: <html>
2: <head><title>webwinkel, catalogus</title>
3: <LINK REL="stylesheet" TYPE="text/css" HREF="winkel.css">
4: <style>
5: a{color:#000; text-decoration:none;}
6: .im{margin-right:12; width:120;}
7: </style>
8: </head>
9: <body>
10: <?php
11: include "menu.txt";
12: ?>
13: <div class="tx">
14: <h2>catalogus</h2>
15: klik de afbeelding voor meer!<BR><BR>
16: <?php
17: $min = 0;
18: $fp = fopen("winkel.csv", "r");
19: while (($data = fgetcsv($fp, 100, ",")) !== FALSE) if($data[0]<$min) $min = $data[0];    
20: rewind($fp);
21: for($i = -1; $i>=$min; $i--){
22:     while (($data = fgetcsv($fp, 100, ",")) !== FALSE) if($data[0]==$i){
23:         echo "<a href=\"cat_klein.php?c=".-$i."&t=".$data[naam]."\">";
24:         echo "<img class=im src=".$data[prys]." align=left>".$data[aant]."</a>";
25:         echo "<br clear=all><br>";
26:         rewind($fp);
27:         break;
28:     }
29: }
30: ?>
31: </div></body></html>

cat_klein.php

1: <html>
2: <head><title>webwinkel, kleine plaatjes</title>
3: <LINK REL="stylesheet" TYPE="text/css" HREF="winkel.css">
4: <script>
5: function fullscreen(url) {window.open(url, '', 'fullscreen=yes, scrollbars=yes');}
6: </script>
7: </head>
8: <body>
9: <?php
10: include "menu.txt";
11: $c = $_GET['c'];
12: echo "<div class=tx>";
13: echo "<h2>".$_GET['t']."</h2>";
14: $rij = 0;
15: if (($fp = fopen("winkel.csv", "r")) !== FALSE)
16:     while (($data = fgetcsv($fp, 100, ",")) !== FALSE) {
17:         $rij++;
18:         if($data[0]==$c){
19:             $nam = $data[naam];
20:             if(file_exists('klein/'.$nam.'.jpg')) $suf=".jpg";
21:             else if(file_exists('klein/'.$nam.'.gif')) $suf=".gif";
22:             else if(file_exists('klein/'.$nam.'.png')) $suf=".png";
23:             else {$nam = "geen_foto"; $suf=".jpg";}
24:             echo "<div class=fl>";
25:             echo '<a href="cat_groot.php?x='.$rij.'")>';
26:             echo "<IMG SRC=\"klein/".$nam.$suf."\"></a><br>";
27:             echo str_replace("_",", ",$data[naam])."</div>";
28:         }
29: }
30: echo "<br clear=all>";
31: fclose($fp);
32: ?>
33:
34: </div></body></html>

cat_groot.php

1: <html>
2: <head><title>webwinkel, grote plaat</title>
3: <LINK REL="stylesheet" TYPE="text/css" HREF="winkel.css">
4:
5: <SCRIPT LANGUAGE="JavaScript">
6: function cyfers(evt) {
7: evt = (evt) ? evt : window.event
8: var ch = (evt.which) ? evt.which : evt.keyCode
9: if (ch < 48 || ch > 57) return false
10: return true
11: }
12: </SCRIPT>
13:
14: </head>
15: <body>
16: <?php
17: include "menu.txt";
18: echo "<div class=tx>";
19: $ip = str_replace(".","_",$_SERVER["REMOTE_ADDR"]);
20: if(isset($_POST['ga'])){
21:     $bs = $_POST['bs'];
22:     $ry = $_POST['ry'];
23:     $fp = fopen("winkel.csv", "r");
24:     flock($fp,LOCK_EX);
25:     $fb = fopen("winkel.tmp", "w");
26:     $ri = 0;
27:     while (($data = fgetcsv($fp, 100, ",")) !== FALSE) {
28:         $ri++;
29:         if($ri==$ry){
30:             if($data[aant]>=$bs) $data[aant] = $data[aant] - $bs;
31:             else{
32:                 $bs = 0;
33:                 echo "onvoldoende voorraad, ";
34:             }
35:         }
36:         fputcsv($fb, $data);
37:     }
38:     flock($fp,LOCK_UN);
39:     fclose($fp);
40:     fclose($fb);
41:     unlink("winkel.csv");
42:     rename("winkel.tmp","winkel.csv");
43:     echo "besteld: ".$bs."<BR>";
44:     if($bs>0){
45:         $fip = fopen($ip,"a");
46:         $s = $bs.",".$ry."\n";
47:         fputs($fip, $s);
48:         fclose($fip);
49:     }
50: }
51: else{$ry = $_GET['x']; echo "<br>";}
52: $rij = 0;
53: if (($fp = fopen("winkel.csv", "r")) !== FALSE)
54:     while (($data = fgetcsv($fp, 100, ",")) !== FALSE) {
55:         $rij++;
56:         if($rij==$ry){
57:             $n2 = $nam = $data[naam];
58:             if(file_exists('groot/'.$nam.'.jpg')) $suf=".jpg";
59:             else if(file_exists('groot/'.$nam.'.gif')) $suf=".gif";
60:             else if(file_exists('groot/'.$nam.'.png')) $suf=".png";
61:             else{ $nam="geen_foto"; $suf=".jpg";}
62:             echo "<br><br><IMG SRC=\"groot/".$nam.$suf."\" align=left>";
63:             $p = str_replace(",",".",$data[prys]);
64:             $b = str_replace(",",".",$data[btw]);
65:             $t = $p*(100.0+$b)/100;
66:             $t = number_format($t,2,",",".");
67:             echo "<table><tr><td>prijs, exc:&nbsp;</td><td>".$data[prys]."</td></tr>";
68:             echo "<tr><td>BTW:</td><td>".$data[btw]."%</td></tr>";
69:             echo "<tr><td>prijs, inc:</td><td>".$t."</td></tr>";
70:             echo "<tr><td>voorraad:</td><td>".$data[aant]."</td></tr></table>";
71:         }
72:     }
73: fclose($fp);
74: ?>
75: <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
76: aantal:
77: <INPUT type="text" NAME="bs" SIZE="3" value="0" MAXLENGTH="3" onKeyPress="return cyfers(event)">
78: <INPUT class="btg" TYPE="submit" name="ga" VALUE="bestel">&nbsp;
79: <input type="hidden" name="ry" value="<?php echo $ry; ?>">
80: </FORM>
81: <?php
82: if(file_exists("tekst/".$n2.".txt")){
83:     $fpt = fopen("tekst/".$n2.".txt", "r");
84:     while(($buf = fgets($fpt,100)) != false) echo str_replace("\r","<br>",$buf);
85:     fclose($fpt);
86:     echo "<br clear=\"all\">";
87: }
88: ?>
89:
90: </div></body></html>

betaal.php

1: <html>
2: <head><title>webwinkel, betaal</title>
3: <LINK REL="stylesheet" TYPE="text/css" HREF="winkel.css">
4: </head>
5: <body>
6: <?php
7: include "menu.txt";
8: ?>
9: <div class="tx">
10: <h2>betalen</h2>
11: <?php
12: $gt = 0;
13: $ip = str_replace(".","_",$_SERVER["REMOTE_ADDR"]);
14: $fp = fopen("winkel.csv", "r");
15: $lijst=" ";
16: if (file_exists($ip)){
17:     $fip = fopen($ip, "r");
18:     echo "<table border=1><tr>";
19:     echo "<th>code</th><th>prijs, stuk</th><th>aantal</th><th>totaal</th></tr>";
20:     while (($s = fgets($fip,50)) !== false){
21:         $i = strpos($s,',');
22:         $aantal = substr($s, 0, $i);
23:         $rij = substr($s, ++$i);
24:         rewind($fp);
25:         $ry = 0;
26:         while (($data = fgetcsv($fp, 100, ",")) !== FALSE) {
27:             $ry++;
28:             if($rij==$ry){
29:                 $p = str_replace(",",".",$data[prys]);
30:                 $b = str_replace(",",".",$data[btw]);
31:                 $ps = number_format($p*(100.0+$b)/100, 2);
32:                 $tt = $ps*$aantal;
33:                 $ps = number_format($ps,2,",",".");
34:                 $tn = number_format($tt,2,",",".");
35:                 $tmp = str_replace("_",", ",$data[naam]);
36:                 echo "<tr><td>".$tmp."</td>";
37:                 $lijst = $lijst.$tmp." | ";
38:                 echo "<td align=right>".$ps."</td>";
39:                 $lijst = $lijst.$ps." | ";
40:                 echo "<td align=right>".$aantal."</td>";
41:                 $lijst = $lijst.$aantal." | ";
42:                 echo "<td align=right>".$tn."</td></tr>";
43:                 $lijst = $lijst.$tn."\n";
44:                 $gt += $tt;
45:             }
46:         }
47:     }
48:     $lijst = $lijst."te betalen: ";
49:     $tmp = number_format($gt, 2,",",".");
50:     echo "<tr><td colspan=3>te betalen</td><td align=right><b>".$tmp."</b></td></tr></table>";
51:     $lijst = $lijst.$tmp;
52:     fclose($fip);
53: }
54: else echo "geen bestellingen!";
55: fclose($fp);
56: ?>
57:
58: <form name="form1" method="post" action="post.php">
59: <p><table><tr><td>naam:<td><input name="naam" type="text" value"">
60: <td>adres:<td><input name="adr" type="text" value"">
61: <tr><td>woonplaats:<td><input name="wpl" type="text" value"">
62: <td>postcode:<td><input name="pcd" type="text" value"">
63: <tr><td>e-mail:<td><input name="em_1" type="text" value="">
64: <td>herhaal e-mail:<td><input name="em_2" type="text" value="">
65: </table>
66: <textarea name="mess" rows="10" cols="65"><?php echo $lijst;?></textarea><br>
67: <input class="in" type="submit" name="Submit" value="Betaal">
68: </form>
69:
70: </div></body></html>

post.php

1: <html>
2: <head><title>mail post</title>
3: <LINK REL="stylesheet" TYPE="text/css" HREF="winkel.css">
4: </head>
5: <body><br><br><br><br><br>
6: <div class="tx">
7: <?php
8: $naam = $_POST['naam'];
9: $em_1 = $_POST['em_1'];
10: $em_2 = $_POST['em_2'];
11: $mess = $_POST['mess'];
12: $adr = $_POST['adr'];
13: $wpl = $_POST['wpl'];
14: $pcd = $_POST['pcd'];
15: $er = 0;
16: if (!$naam) $er = 1;
17: else if (!$em_1) $er = 2;
18: else if (!$em_2) $er = 3;
19: else if(strcmp($em_1,$em_2)!=0) $er = 4;
20: else if (!$adr) $er = 5;
21: else if (!$wpl) $er = 6;
22: else if (!$pcd) $er = 7;
23: if($er>0){
24:     switch($er){
25:         case 1: echo "<p>naam ontbreekt"; break;
26:         case 2: echo "<p>geen email adres"; break;
27:         case 3: echo "<p>herhaling email ontbreekt"; break;
28:         case 4: echo "<p>mail adressen ongelijk"; break;
29:         case 5: echo "<p>geen adres"; break;
30:         case 6: echo "<p>geen woonplaats"; break;
31:         case 7: echo "<p>geen postcode"; break;
32:     }
33:     echo "<br><br><p><input type=button value=verbeter onclick=history.back()>";
34:     exit;
35: }
36: else{
37:     $mess = $mess."<br><br>".$naam."<br>".$adr."<br>".$wpl.", ".$pcd;
38:     date_default_timezone_set("CET");
39:     $tijd = date("Y-m-d H:i");
40:     $message = "".$naam.", ".$em_1.", stuurde op $tijd:<br>".$mess."<br>";
41:     $mailadres = "frabb@planet.nl";
42:     $message = str_replace("<br>","\n",$message);
43:     mail("$mailadres","besteel",$message,"From: ".$em_1."\r\nBcc:".$em_1);
44:     echo "<b>bestelling geplaatst</b>";
45:     $ip = str_replace(".","_",$_SERVER["REMOTE_ADDR"]);
46:     unlink($ip);
47: }
48: echo "<br><br><input type=button value=terug onClick=history.back()>";
49: ?>
50: </div></body></html>

wislijst.php

1: <html>
2: <head><title>wis lijst</title>
3: <LINK REL="stylesheet" TYPE="text/css" HREF="winkel.css">
4: </head>
5: <body>
6: <?php
7: define("aant",2);
8: echo "<BR><BR><BR><BR><BR><BR><BR><BR><BR>";
9: $ip = str_replace(".","_",$_SERVER["REMOTE_ADDR"]);
10: if (file_exists($ip)){
11:     $fp = fopen("winkel.csv","r");
12:     flock($fp,LOCK_EX);
13:     $fb = fopen("winkel.tmp","w");
14:     $fip = fopen($ip,"r");
15:     $ry = 0;
16:     while (($data = fgetcsv($fp,100,",")) !== false){
17:         $ry++;
18:         rewind($fip);
19:         while (($s = fgets($fip,100)) !== false){
20:             $i = strpos($s,',');
21:             $aantal = substr($s, 0, $i);
22:             $rij = substr($s, ++$i);
23:             if($rij==$ry)$data[aant] += $aantal;
24:         }
25:         fputcsv($fb, $data);
26:     }
27:     fclose($fip);
28:     unlink($ip);
29:     flock($fp,LOCK_UN);
30:     fclose($fp);
31:     fclose($fb);
32:     unlink("winkel.csv");
33:     rename("winkel.tmp","winkel.csv");
34:     echo "<p class=\"w\">bestellijst gewist!";
35: }
36: else echo "<p>geen geldige bestellijst gevonden";
37: ?>
38: <meta http-equiv="refresh" content="1; URL=winkel.php">
39: </body></html>

menu.txt

1: <IMG style="border:none;" SRC="logo.png" WIDTH="200" HEIGHT="64">
2: <br clear="all">
3: <div class="top">
4: <A HREF="winkel.php">intro</A>
5: <A HREF="cat.php">catalogus</A>
6: <A HREF="betaal.php">betalen</A>
7: <A HREF="contact.php">contact</A>
8: </div>
9: <?php
10: define("naam",1);
11: define("aant",2);
12: define("prys",3);
13: define("btw",4);
14: ?>

In het origineel van admin_login.php gebruik ik een ander wachtwoord!
Dat de cookie winkel=okkie bestaat moet je ook niet publiceren, als je dat weet kan je de login omzeilen...

Kopie van admin_login.php

1: <html>
2: <head>
3: <title>admin</title>
4: <LINK REL="stylesheet" TYPE="text/css" HREF="winkel.css">
5: <?php
6: $wachtwoord = "kr0k0d1l";
7: ?>
8: </head>
9:
10: <body>
11:
12: <?php
13: if (isset($_POST["wachtwoord"]) && ($_POST["wachtwoord"]=="$wachtwoord")) {
14: ?>
15:
16: <script>
17: document.cookie = 'winkel=okkie; path=/'
18: </script>
19: <meta http-equiv="refresh" content=0;URL=admin.php>
20:
21: <?php
22: }
23: else{
24:     print "<div class=lgn><h2> admin login</h2>";
25:     if (isset($_POST['wachtwoord']) || $wachtwoord == "") {
26:         print "<p align=\"center\"><font color=\"red\"><b>wachtwoord fout</p>";}
27:     print "<form method=\"post\"><p align=\"center\">wachtwoord ";
28:     print "<input type=password name=\"wachtwoord\" size=\"20\">";
29:     print "</form></div>";
30: }
31: ?>
32: </body>
33: </html>

admin.php

1: <html>
2: <head>
3: <title>admin</title>
4: <LINK REL="stylesheet" TYPE="text/css" HREF="winkel.css">
5: </head>
6:
7: <body>
8: <div class="tx">
9: <h1>admin</h1>
10: <table><tr><td>
11: <?php
12: if(isset($_COOKIE['winkel'])){
13:     if(strcmp($_COOKIE['winkel'],"okkie")==0){
14:         if ($fp = opendir('.')) {
15:             $tx = time() - (48*60*60);
16:             print "<table border=1><tr><th>file</th><th>j m d</th><th>u:m:s</th></tr>";
17:             while (($file = readdir($fp)) !== false) {
18:                 if((strncmp($file,"1",1)>=0) && (strncmp($file,"9",1)<=0)){
19:                     $t = filemtime($file);
20:                     print "<tr><td><a href='adwis.php?ip=".$file."'>".$file."</a></td>";
21:                     print "<td>";
22:                     if($t<$tx) print "<font color=#ff0000>";
23:                     else print "<font color=#000000>";
24:                     print date("Y m d",$t)."</td>";
25:                     print "<td>".date("H:i:s.",$t)."</td></tr>";
26:                     print "</font>";
27:                 }
28:             }
29:             print "</table>";
30:             closedir($fp);
31:         }
32:     }
33: }
34: ?>
35: </td><td width=30></td><td width=400 valign=top>
36: De datum van de niet verwerkte bestellijsten is in rood aangeven als die lijst meer dan twee dagen oud is.
37: <p>Klik de naam om de lijst te wissen, de bestellingen worden teruggeboekt naar de voorraad.
38: <p>(de naam is afgeleid van het IP-adres van de besteller)</td></tr></table>
39: <p><A class="btr" HREF="winkel.php">terug</A><A class="btg" HREF="adcsv.php">csv lijst</A>
40: </div>
41: </body>
42: </html>

adcsv.php

1: <html>
2: <head><title>toon csv</title>
3: </head>
4: <LINK REL="stylesheet" TYPE="text/css" HREF="winkel.css">
5: </head>
6: <body>
7: <div class="tx">
8: <h1>CSV</h1>
9: <?php
10: if(isset($_COOKIE['winkel'])){
11:     $fp = fopen("winkel.csv", "r");
12:     print "<table>";
13:     while (($data = fgetcsv($fp, 100, ",")) !== FALSE){
14:         print "<tr>";
15:         for($i = 0; $i<5; $i++) print "<td>".$data[$i]."</td>";
16:         print "</tr>";
17:     }
18:     print "</table>";
19: }
20: ?>
21: <p><A class="btr" HREF="admin.php">terug</A>
22: </body></html>

adwis.php

1: <html>
2: <head><title>wis lijst</title>
3: </head>
4: <body>
5: <?php
6: define("aant",2);
7: if(isset($_COOKIE['winkel'])){
8:     $ok = $_COOKIE['winkel'];
9:     if(strncmp($ok,"okkie",5)==0){
10:         $ip = $_GET['ip'];
11:         if (file_exists($ip)){
12:             $fp = fopen("winkel.csv", "r");
13:             flock($fp,LOCK_EX);
14:             $fb = fopen("winkel.tmp", "w");
15:             $fip = fopen($ip, "r");
16:             $ry = 0;
17:             while (($data = fgetcsv($fp,500,",")) !== false){
18:                 rewind($fip);
19:                 while (($s = fgets($fip, 100)) !== false){
20:                     $i = strpos($s,',');
21:                     $aantal = substr($s, 0, $i);
22:                     $rij = substr($s, ++$i);
23:                     if($rij==$ry)$data[aant] += $aantal;
24:                 }
25:                 $ry++;
26:                 fputcsv($fb, $data);
27:             }
28:             fclose($fip);
29:             unlink($ip);
30:             fclose($fp);
31:             flock($fp,LOCK_UN);
32:             fclose($fb);
33:             unlink("winkel.csv");
34:             rename("winkel.tmp","winkel.csv");
35:         }
36:         print "<meta http-equiv=\"refresh\" content=0;URL=admin.php>";
37:     }
38: }
39: ?>
40: </body></html>

winkel.csv

1: 0,code,voorraad,prijs,btw
2: -2,spinnen,"een uitgebreide collectie spinnen",cat02img.jpg,
3: 2,spin_blauw,3,"0,75","19,5"
4: 2,spin_bruin,1,"1,23","19,5"
5: 1,web_blauw,1,"0,55","19,5"
6: 1,web_tekst,2,"3,45",1
7: 1,web_zwart,0,"0,1","19,5"
8: 2,spin_groen,2,295,"19,5"
9: 2,spin_paars,77,"23,44","19,5"
10: -3,gereedschap,"alles voor het webmaken",cat03img.jpg,
11: 3,spinnewiel,1,"2500,15","19,5"
12: 1,web_laag,2,"0,66","19,5"
13: 2,spin_rood,6,"0,88","19,5"
14: 2,spin_zwart,123,"2,49","19,5"
15: 1,web_smal,5,"3,49","19,5"
16: 1,web_groen,0,"0,2","19,5"
17: 1,web_rood,1,"1,75","19,5"
18: 1,web_rond,1,"4,95","19,5"
19: -1,webben,"webben in alle maten en kleuren",cat01img.jpg,
20: 2,spin_suiker,5,"0,99",6
21: 1,web_geen,100,0,0

naar intro, naar boven.