การทำ Shopping cart ใช้ cookie

ปรับปรุง : 2548-02-12 ()

บทเรียน ONLINE : การเขียนภาษา PERL
[ การทำ Shopping cart ใช้ cookie ]

  1. ข้อควรทราบ
  2. กำหนดสินค้าใน cart.htm (แบบหยิบได้ทีละรายการเท่านั้น)
  3. Source program ภาษา Perl (โปรแกรม cart.cgi นี้เขียนด้วย perl)
  4. แบบฝึกหัด

Click ที่นี่ เพื่อทดสอบโปรแกรม ขายสินค้า แบบใช้รถเข็น ด้วย cookie

ข้อควรทราบ
  1. Source นี้ คุณกิติภูมิ ชัยสุวรรณ นส่งให้ผมช่วยแก้ไข ซึ่งเขียนโดย Yingyos Santiprasert [sritrang@thaimail.com] จาก http://www.thaistarter.com/ และข้อยืนยันว่าผมไม่ได้คิด และเขียนเองทั้งหมด เพียงแต่นำมาปรับปรุงให้ใช้ได้กับ hypermart เท่านั้น ต้นฉบับสามารถหาได้จากเว็บ thaistarter.com ครับ
  2. โปรแกรมชุดนี้ ต้องใช้ 3 แฟ้ม ซึ่งตัวอย่างนี้ผมเก็บไว้ในห้อง shopping ทั้งหมด คือ cart.htm, cart.cgi และ cookie.lib โดย cookie.lib นี้ถูกเขียนโดยคุณ matt ซึ่งหา download ได้จาก http://www.worldwidemart.com/scripts/
  3. ส่วน cart.cgi นั้นเขียนโดยคุณ Yingyos ซึ่งทำหน้าที่รับค่าที่ส่งมาจาก cart.htm เก็บเข้า cookie แล้วสามารถเรียกมาใช้ได้ตามต้องการ
  4. โปรแกรมนี้เป็นระบบตะกร้า แต่ไม่ได้ทำระบบฐานข้อมูล สินค้าทั้งหมด แสดงไว้ในแฟ้ม cart.htm จะปรับปรุงต้องเข้าไปแก้แฟ้มนี้ และยังเลือกสินค้าได้ทีละรายการเท่านั้น
  5. ปัญหาที่ผมยังแก้ไม่ได้คือ การเลือกลบสินค้าจากตะกร้า เมื่อลบจะลบทั้งตะกร้า ไม่สามารถเลือกลบบางรายการ ถ้ามีโอกาสช่วยปรับปรุงให้ลบบางรายการ แล้วส่ง source มาให้ผมด้วยนะครับ .. ขอขอบคุณล่วงหน้า
  6. ดูตัวอย่างได้ที่ http://thaiall.hypermart.net/shopping/cart.htm
  7. Download โดยใช้ right click แล้ว save target as ไปนะครับ มี 3 แฟ้ม คือ cart.htm, cart.cgi, cookie.lib

กำหนดสินค้าใน cart.htm
Source program
<font face="microsoft sans serif">
<font size=4>
Shopping Cart by cookie at<br>
<font size=0>
http://thaiall.hypermart.net<br>
<hr>
<form action=/shopping/cart.cgi method=POST>
<input type=hidden name=action value=AddItem>
Quantity: <input type=text name=quantity size=3>
<b>Item :</b> Acer pentium X <input type=hidden name=item value="Acer Pentium X">
<b>Price :</b> $1000.51 <input type=hidden name=price value=1000.51>
<input type=submit value="Add" name="submit"><input type=reset value="Clear" name="reset">
</form>
<form action=/shopping/cart.cgi method=POST>
<input type=hidden name=action value=AddItem>
Quantity: <input type=text name=quantity size=3>
<b>Item :</b> SCANNER IBM 2212 <input type=hidden name=item value="SCANNER IBM 2212">
<b>Price :</b> $2100.66 <input type=hidden name=price value=21000.66>
<input type=submit value="Add" name="submit"><input type=reset value="Clear" name="reset">
</form>
<form action=/shopping/cart.cgi method=POST>
<input type=hidden name=action value=AddItem>
Quantity: <input type=text name=quantity size=3>
<b>Item :</b> TABLE BURIN 1441 <input type=hidden name=item value="TABLE BURIN 1441">
<b>Price :</b> $500 <input type=hidden name=price value=500>
<input type=submit value="Add" name="submit"><input type=reset value="Clear" name="reset">
</form>
<hr>
<a href=cart.cgi?action=ViewCart>View Cart's contents</a>
Result : Shopping Cart by cookie at
http://thaiall.hypermart.net

Quantity: Item : Acer pentium X Price : $1000.51
Quantity: Item : SCANNER IBM 2212 Price : $2100.66
Quantity: Item : TABLE BURIN 1441 Price : $500

View Cart's contents
Click เพื่อดูข้อมูลสินค้า จากแฟ้มจริง ตามที่เห็นข้างบนนี้

Source program ภาษา Perl (Cart.cgi)
    ความสามารถของโปรแกรมนี้
  1. เลือกสินค้าได้ทีละรายการเท่านั้นจาก cart.htm
  2. สามารถดูสินค้าในตะกร้าได้
  3. การหยิบออก จะเป็นการหยิบทุกชิ้น ไม่สามารถหยิบบางชิ้นได้
  4. เมื่อส่งรายการไปให้หลัง shop เสร็จ จะส่งให้ทั้งผู้ขาย และผู้ซื้อ
  5. โปรแกรมย่อยมี ดังนี้ mailit, memail, themmail, checkout, viewcart, removeitem, totalit, additem, parse และ banner ซึ่งคำอธิบาย subroutine สั้น ได้เขียนไว้ใน source แล้ว


#!/usr/bin/perl
##############################################################################
# Shopping Cart
# Source by Yingyos Santiprasert [sritrang@thaimail.com]
# http://www.thaistarter.com/
# copyright 2000. Distribute freely. Don't sell.
####
# แล้ว บุรินทร์ รุจจนพันธุ์ เอามาแก้ไขนิดหน่อย
# แล้วเปิด source ให้ดูผ่านเว็บครับ
# http://www.thaiall.com และ http://thaiall.hypermart.net
# สำหรับคำอธิบายเพิ่มเติมลองไปอ่านที่ http://www.thaiall.com/perl
# ผมเขียนทั้งแบบใช้ cookie และแบบไม่ใช้ cookie ครับ
# ระบบนี้จะนำคำสั่งซื้อของท่าน ส่งเป็น mail ไปให้คนขาย ไม่ได้ตัด stock
#
# โปรแกรม Shopping Cart ประกอบด้วย
# 1. /shopping/cart.cgi ซึ่งเขียนด้วย perl
# 2. /shopping/cookie.lib ซึ่ง download จาก เว็บฝรั่งของนาย matt
# 3. /shopping/cart.htm ซึ่งเป็นจุดใช้เพิ่มลดสินค้า
#
# การติดตั้ง
# 1. สร้างห้องชื่อ shopping ใน server ที่ให้บริการ perl เช่น hypermart.net
# 2. ส่ง 3 แฟ้มนี้ลงห้อง shopping ที่ http://thaiall.hypermart.net/shopping
# 3. กำหนดที่อยู่ของ Mail Program ซึ่ง hypermart เป็น /var/qmail/bin/qmail-inject
# 4. แก้ไขค่าต่อไปนี้ url เป็น URL ของคุณ และ เปลี่ยน myemail, from_email เป็นที่ชอบ
# สำหรับ email อย่าลืม เครื่องหมาย Slash นะสำหรับอีเมล์ ต้องใส่ก่อนเครื่องหมาย @
# เช่น x@hotmail.com ก็ต้องใส่ว่า x\@hotmail.com
# 5. อัพโหลดไฟล์ cart.cgi, cookie.lib และ cart.htm ในโหมด ASCII ในห้อง shopping
# เพราะที่ hypermart.net สามารถสั่ง perl หรือ cgi run จากห้องไหนก็ได้
# เขาไม่ได้กำหนดว่าต้อง run จากห้อง cgi หรือ cgi-bin เท่านั้น จึงสะดวกมาก
# 6. เปลี่ยนโหมด cart.cgi เป็น 755 แต่ผมทดสอบที่ hypermart.net เขาจัดการอัตโนมัติ
# 7. เพิ่ม ลด สินค้าในส่วนของ input hidden ในแฟ้ม cart.htm ได้
##############################################################################
# Shopping cart is a simple little program that allows you to use a shopping
# cart on your site with relatively little pain. It's also the only good
# FREE shopping cart I can think of, which is why I did it.
#
#     NOTE!!!!! Shopping Cart REQUIRES Matt Wright's "cookie.lib," which
#     I have included in the "sit" and "zip" files. If you got this by
#     viewing the source online, you MUST get Matt's "cookie.lib at
#     http://www.worldwidemart.com/scripts/
#
# This shopping cart uses e-mail, and is not secure. What this means is, although
# I have never heard of it actually happening, there is a remote chance that some
# person may intercept information generated by this form in transit. By using
# this script, you agree that it's not my fault if something gets intercepted.
#
#####################  HTML CONFIGURATION  #####################
# This cart uses regular form inputs from your html pages. Each form input must
# have the following:
#
# <form action=/shopping/cart.cgi method=POST>
# (this tells the browser where to find the script)
#
# <input type=hidden name=action value=AddItem>
# (this tells the script that we're adding something to the shopping cart)
#
# Quantity: <input type=text name=quantity>
# (this allows the user to select how many of each item she wants)
#
# Item: Acer pentium X
# <input type=hidden name=item value="Acer pentium X">
# (this tells the script exactly which item the user is ordering)
#
# Price: $10.45
# <input type=hidden name=price value=10.45>
# (this tells the script exactly how much to charge for the item)
#
# <hr><input type=submit value="Add to my cart">
# (this is the submit button that has to appear at the bottom of the form)
# </form>
###################  END HTML CONFIGURATION  ###################
#
###################  SCRIPT CONFIGURATION  ###################
#
# the variables you need to set are defined below.
#
# $mailprog tells the script where to find your server's mail program
# if you're unsure where it is, contact your system administrator.
$mailprog = '/var/qmail/bin/qmail-inject';
$url = "http://thaiall.hypermart.net";
# Change yourname
# myemail is your email address. If you use perl5, you'll need to put a slash
# (\) before the @ sign. (ex: my\@email.com)
# กำหนดให้ผู้รับ email คือ shopping@thaiall.com
$myemail = "shopping\@thaiall.com";
# $from_mail is the address you want to appear on emails you send to the user. This
# address will appear in the "from" portion of that email. Usually, it should be
# the same as the $myemail value, but in rare cases, you may want to put a different
# value here, so I gave you the opportunity.
# กำหนดให้ส่งจาก sendershopping@thaiall.hypermart.net
# แต่ผมไม่ได้ใช้ แต่ให้รับ seller จาก ฟอร์มแทน
$from_mail = "sendershopping\@thaiall.com";
# $them_mail tells the program whether to send email to the USER once they
# have ordered their items. 0=no, 1=yes.
$them_mail = 1;
# $me_mail tells the program whether to send email to YOU when someone orders.
# Since there's no reason to have a shopping cart unless you can get the order,
# you should leave this value alone.
$me_mail = 1;
# $newform tells the script where to find itself
$newform = "$url/shopping/cart.cgi";
$store = "$url/shopping/cart.htm";
# this should be left alone, unless you put "cookie.lib" in a directory other
# than the same directory as the script (although I can't see why you would do
# that.) If you do, this needs to tell the directory where the script is.
# You shouldn't have to configure "cookie.lib" at all. It should work just as it is.
require 'cookie.lib';
###################  YOU'RE DONE! CONGRATULATIONS!  #####################
&parse;
$referer = $ENV{'HTTP_REFERER'};
if ($contents{'action'} eq "AddItem") {	&AddItem; }
if ($contents{'action'} eq "RemoveItem") { &RemoveItem; }
if ($contents{'action'} eq "ViewCart") { &ViewCart; }
if ($contents{'action'} eq "MailIt") { &MailIt; }
#####################
# end of main program
######################################################################
# start mailit : mail ข้อมูลการสั่งซื้อไปให้ผู้ขาย หรือ seller
sub MailIt {
if (&GetCookies('cart')) {
 print "Content-type: text/html\n";
 $mailcookie = "$Cookies{'cart'}";
 $tobeadded = $mailcookie;
 @msg = split(/\|/, $mailcookie);
 &memail;
 &themmail;
 print "\n";
 print "<body bgcolor=white><h1>Order</h1>\n";
 print "<center>รายการสั่งซื้อของคุณเราได้รับแล้ว ขอขอบคุณมากสำหรับการสั่งซื้อ.<br>เราจะรีบจัดการส่งให้ท่านอย่างรวดเร็วที่สุด<br>\n";
 &banner;
 print "</body></html>";
 exit;
} else {
 print "Content-type: text/html\n\n";
 print "<body bgcolor=white><h1>Whoops</h1>\n";
 print "<center>คุณไม่สามารถดูรถเข็นคุณได้เพราะว่าไม่มี.</center>\n";
}
}
# end mailit
############ MEMAIL SUBROUTINE ############
# sends email to $myemail (you) informing you
# that someone has used this script. IF you don't
# want email, set the me_mail value to 0.
# ส่ง email แจ้งผู้ขาย
sub memail {
if ($me_mail eq '1') {
 open (MAIL, "|$mailprog") || die "Can't open $mailprog!\n";
#print MAIL "To: $from_mail\n";
 print MAIL "To: $contents{'seller'}\n";
 print MAIL "From: $contents{'email'}\n";
 print MAIL "Subject: shopping_cart \n\n";
 print MAIL "มีคนสั่งซื้อสินค้าดังนี้\n\n";
 print MAIL "สั่งซื้อโดย\n";
 print MAIL "$contents{'FirstName'} $contents{'LastName'}\n";
 print MAIL "ที่อยู่ : $contents{'StreetAddress'}\n";
 if ($contents{'Apt'}) {
  print MAIL " $contents{'Apt'}\n";
 }
 print MAIL "อำเภอ : $contents{'City'}, จังหวัด: $contents{'State'}\n";
 print MAIL "รหัสไปรษณีย์ : $contents{'PostalCode'} โทรศัพท์ : $contents{'phone'}\n";
 print MAIL "แฟกซ์ : $contents{'Fax'} E-mail: $contents{'email'}\n";
 print MAIL "การชำระเงิน: $contents{'CardType'} \n";
 print MAIL "\n";
 print MAIL "รายการสั่งซื้อ\n";
 foreach $msg (@msg) {
  ($mquantity, $mprice, $mitem) = split(/:/ , $msg);
  print MAIL "$mquantity $mitem  $mprice \n";
 }
 &TotalIt;
 print MAIL "รวมทั้งหมด: ";
 print MAIL "$TheTotal\n";
 print MAIL "==============================================\n";
 print MAIL "http://thaiall.hypermart.net/shopping/cart.htm";
 close (MAIL);
}
else {
 print "Content-type: text/html\n\n";
 print "<body bgcolor=white><h1>คุณไม่สามารถเช็คเอาต์ได้เพราะไม่มีรายการสินค้าในรถเข็นของคุณ\n";
 &banner;
 print "</body></html>";
 exit;
}
}
############ THEMMAIL SUBROUTINE ############
# This sends email to the person who signs the guestbook.
# ส่ง email แจ้งผู้ซื้อ
sub themmail {
if ($them_mail eq '1' && $contents{'email'}) {
 open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n";
 print MAIL "To: $contents{'email'}\n";
 print MAIL "From: $from_mail\n";
 print MAIL "Subject: Thank you!\n\n";
 print MAIL "Dear $contents{'FirstName'},\n\n";
 print MAIL "ขอขอบคุณครับสำหรับรายการสั่งซื้อจากคุณ\n\n";
 print MAIL "-----------------------------------------------\n";
 print MAIL "สั่งซื้อโดย\n";
 print MAIL "$contents{'FirstName'} $contents{'LastName'}\n";
 print MAIL "ที่อยู่ : $contents{'StreetAddress'}\n";
 if ($contents{'Apt'}) {
  print MAIL "$contents{'Apt'}\n";
 }
 print MAIL "อำเภอ : $contents{'City'}, จังหวัด: $contents{'State'}\n";
 print MAIL "รหัสไปรษณีย์ : $contents{'PostalCode'} โทรศัพท์ : $contents{'phone'}\n";
 print MAIL "แฟกซ์ : $contents{'Fax'} E-mail: $contents{'email'}\n";
 print MAIL "การชำระเงิน: $contents{'CardType'} \n";
 print MAIL "\n";
 print MAIL "รายการสั่งซื้อ\n";
 foreach $msg (@msg) {
  ($mquantity, $mprice, $mitem) = split(/:/ , $msg);
  print MAIL "$mquantity $mitem  $mprice \n";
 }
 &TotalIt;
 print MAIL "รวมทั้งหมด: ";
 print MAIL "$TheTotal\n";
 print MAIL "==============================================\n";
 print MAIL "http://thaiall.hypermart.net/shopping/cart.htm";
 close (MAIL);
}
}
# start checkout : ฟอร์ม ส่ง email ให้ผู้ขาย และผู้ซื้อ
sub CheckOut {
print "<p><hr noshade size=1><p><form action=$newform method=POST>\n";
print "<center><h3>Check out</h3></center><input type=hidden name=action value=MailIt>\n";
print 'E-Mail ผู้ขาย : <input type=text name=seller value="webmaster@thaiall.com" size=30> (ให้เปลี่ยนเป็น E-Mail ของท่าน)<hr width=50%>';
print "<table border=\"0\" cellpadding=\"3\" align=\"center\"><tr><td align=right>ชื่อผู้สั่ง:</td><td><input type=text name=FirstName></td>";
print "<td align=right> นามสกุล :</td><td><input type=text name=LastName></td></tr>\n";
print "<tr><td align=right>ที่อยู่ : </td><td><input type=text name=StreetAddress></td><td align=right>ที่อยู่</td><td><input type=text name=AptNumber></td></tr>\n";
print "<tr><td align=right>อำเภอ</td><td><input type=text name=City></td><td align=right>จังหวัด</td><td><input type=text name=State></td></tr>\n";
print "<tr><td align=right>รหัสไปรษณีย์</td><td><input type=text name=PostalCode></td><td align=right>โทรศัพท์</td><td><input type=text name=Phone></td></tr>\n";
print "<tr><td align=right>E-mail</td><td><input type=text name=email></td><td align=right>แฟกซ์</td><td><input type=text name=Fax></td></tr>\n";
print "<tr><td align=right>การชำระเงิน</td><td><select name=CardType><option value=พกง.>พัสดุเก็บเงินปลายทาง<option value=โอนเงิน.>โอนเงินเข้าบัญชี</select></td>\n";
print "<td colspan=2><input type=Submit value=\"ตกลง\"><input type=Reset value=\"ล้างข้อมูล\"></form></td></tr></table>\n";
}
# end checkout
# start viewcart : ดูสินค้าในตะกร้า
sub ViewCart {
if (&GetCookies('cart')) {
 print "Content-type: text/html\n";
 $viewcookie = "$Cookies{'cart'}";
 $tobeadded = $viewcookie;
 @chocolate = split(/\|/, $viewcookie);
 print "\n";
 print "<body bgcolor=white>\n";
 print "<center>คุณอาจจะกดปุ่มรีเฟรชหน้านี้เพื่อดูรายการล่าสุดในตะกร้าของคุณ.</center><br>\n";
 print "<table border=\"0\" align=\"center\"><tr><td>จำนวน.</td><td>รายการ</td><td>ราคา</td><td></td></tr>\n";
 $RemoveNumber=0;
 foreach $chocolate (@chocolate) {
  ($quantity, $price, $item) = split(/:/ , $chocolate);
  if ($quantity gt "0") {
   print "<tr><td>$quantity</td><td>$item</td><Td>$price </td><td>  <a href=$newform?action=RemoveItem\&number=$RemoveNumber>หยิบออก</a></td></tr>\n";
  }
  $RemoveNumber++;
 }
 &TotalIt;
 print "<tr><td colspan=3 align=right>ทั้งหมด:</td><td><b>";
 printf("%.2f", $TheTotal);
 print "</b></td></tr>\n";
 print "</table>\n";
 &CheckOut;
 print "<a href=$store>กลับไปที่หน้าร้าน</a>\n";
 &banner;
 print "</body></html>";
}else{
 print "Content-type: text/html\n\n";
 print "<body bgcolor=white><h1>Whoops</h1>\n";
 print "<center>ในตะกร้าของคุณว่างเปล่า.<./center>\n";
 print "<a href=$store>กลับไปที่หน้าร้าน</a>\n";
 &banner;
 print "</body></html>";
}
}
# end viewcart
# start removeitem : ลบทีเกลี้ยงตะกร้าเลยครับ
sub RemoveItem {
if (&GetCookies('cart')) {
 print "Content-type: text/html\n";
 (@ToBeModified) = split(/\|/, $Cookies{'cart'});
 $KillNumber = $contents{'number'};
 splice(@ToBeModified,$KillNumber,1,());
 &SetCookies('cart',@ToBeModified);
 print "\n";
 print "<html><head><title>Deleted</title></head><body bgcolor=white><h1>รายการที่ถูกลบ</h1>\n";
 print "<center>ในรถเข็นคุณบรรจุ</center>\n";
 print "<table border=\"0\" align=\"center\"><tr><td>จำนวน</td><td>รายการ</td><td>ราคา</td><td></td></tr>\n";
 $RemoveNumber=0;
 foreach $ToBeModified (@ToBeModified) {
  ($quantity, $price, $item) = split(/:/ , $ToBeModified);
  if ($RemoveNumber > 0) {
  print "<tr><td>$quantity</td><td>$item</td><Td>$price </td><td>  <a href=$newform?action=RemoveItem\&number=$RemoveNumber>หยิบออก</a></td></tr>\n";
  }
  $RemoveNumber++;
  $tobeadded = $ToBeModified;
 } #end foreach
 &TotalIt;
 print "<tr><td colspan=3 align=right>รวมทั้งหมด :</td><td><b>";
 printf("%.2f", $TheTotal);
 print "</b></td></tr>\n";
 print "</table>\n";
 &CheckOut;
 print "<a href=$store>กลับไปที่หน้าร้าน</a>\n";
 &banner;
 print "</body></html>";
} else {
 print "<center>คุณจะต้องมีรายการสินค้าในรถเข็นของคุณเพื่อเอาออก.</center>\n";
 print "<a href=$store>กลับไปที่หน้าร้าน</a>\n";
 &banner;	
 print "</body></html>";
 exit;
} #end else
} #end sub
# end removeitem
# start totalit : คำนวณผลรวมเป็นเงิน
sub TotalIt {
 $RunningTotal = 0;
 (@tobetotaled) = split(/\|/, $tobeadded);
 foreach $tobetotaled (@tobetotaled) {
  ($HowMany, $HowMuch, $What) = split(/:/, $tobetotaled);
  $ItemTotal = $HowMany * $HowMuch;
  $RunningTotal = $RunningTotal + $ItemTotal;
 }
 $TheTotal = $RunningTotal;
}
# end TotalIt
# start additem : เพิ่มสินค้าในตะกร้า
sub AddItem {
if (&GetCookies('cart')) {
 print "Content-type: text/html\n";
 $tobeadded = "$Cookies{'cart'}" . "\|" . "$contents{'quantity'}" . ":" . "$contents{'price'}" . ":" . "$contents{'item'}";
 &SetCookies('cart',$tobeadded);
 &TotalIt;
 print "\n";
 print "<html><head><title>Item added</title></head>\n";
 print "<body bgcolor=white>\n";
 print "  <center><h1>สินค้านี้คุณได้เลือก !</h1></center>\n";
 $oldcookie = "$Cookies{'cart'}";
 @dough = split(/\|/, $oldcookie);
 print "คุณได้เพิ่ม $contents{'quantity'} $contents{'item'}  $contents{'price'} บรรจุในรถเข็นคุณเป็นที่เรียบร้อยแล้ว :\n";
 print "<table border=\"0\" align=\"center\"><tr><td>จำนวน.</td><td>รายการ</td><td>ราคา</td></tr>\n";
 $RemoveNumber=0;
 foreach $dough (@dough) {
  ($quantity, $price, $item) = split(/:/ , $dough);
  if ($RemoveNumber > 0) {
  print "<tr><td>$quantity</td><td>$item</td><Td>$price </td><td>  <a href=$newform?action=RemoveItem\&number=$RemoveNumber>หยิบออก</a>  </td></tr>\n";
  }
  $RemoveNumber++;
 }
 print "<tr><td colspan=3 align=right>Total:</td><td><b>";
 printf("%.2f", $TheTotal);
 print "</b></td></tr>\n";
 print "</table>\n";
 &CheckOut;
 print "<a href=$store>กลับไปที่หน้าร้าน</a>\n";
 &banner;
 print "</body></html>";
} else {
 print "Content-type: text/html\n";
 $newitem = "$contents{'quantity'}" . ":" . "$contents{'price'}" . ":" . "$contents{'item'}";
 &SetCookies('cart',$newitem);
 print "\n";
 print "<html><head><title>Item added</title></head><body bgcolor=white>\n";
 print "  <center><h1>รายการที่เพิ่มขึ้น</h1>\n";
 print "คุณได้เพิ่ม $contents{'quantity'} $contents{'item'} $contents{'price'} ในรถเข็นของคุณ.\n";
 $NewQuantity = $contents{'quantity'};
 $NewPrice = $contents{'price'};
 $NewTotal = $NewQuantity * $NewPrice;
 print "<p>ยอดรวมทั้งหมดขณะนี้คือ ";    printf("%.2f", $NewTotal);
 &CheckOut;
 print "<a href=$store>กลับไปที่หน้าร้าน</a>\n";
 &banner;
 print "</body></html>\n";
}
}
# end AddItem
# start parse : ปรับค่าที่รับเข้ามา
sub parse {
 read(STDIN, $input, $ENV{'CONTENT_LENGTH'});
 $input = $ENV{'QUERY_STRING'} if $ENV{'QUERY_STRING'};
 @pairs = split(/&/, $input);
 foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $contents{$name} = $value;
 }
}
# end parse
# start banner : เพื่อไม่ให้ hypermart แสดง banner ในหน้าต่างใหม่
sub banner {
print "<hr><center>";
print "Support by <a href=http://www.thaiall.com target=_blank>Thaiall.com</a>";
print "<br>ICQ : 20449588<br>";
print '<!--#echo banner=""--><br>';
}
# end banner
;

แบบฝึกหัด
    ให้ทำตามโจทย์ต่อไปนี้
  1. ให้ทำแบบที่ผมทำนี่เลยในเว็บของท่าน
  2. ให้ทำเพิ่ม - ลดรายการสินค้า แล้วทดลองว่ามีปัญหาหรือเปล่า
  3. ให้เพิ่มสินค้า โดยเพิ่มกลุ่มสินค้า โดยเลือกจากหลายหน้าเว็บได้
  4. ถ้าเป็นไปได้ก็ให้ทำฐานข้อมูล ตัด stock แล้วเก็บข้อมูลเข้าแฟ้มได้
ผู้สนับสนุน + ผู้สนับสนุน
+ รับผู้สนับสนุน

แนะนำเว็บใหม่ : ผลการจัดอันดับ
รักลำปาง : thcity.com : korattown.com : topsiam.com : มหาวิทยาลัยโยนก
ศูนย์สอบ : รวมบทความ : ไอทีในชีวิตประจำวัน : ดาวน์โหลด : yourname@thaiall.com
ติดต่อ ทีมงาน ชาวลำปาง มีฝันเพื่อการศึกษา Tel.08-1992-7223