โปรแกรมนี้ผมแบ่งการทำงานเป็นส่วน ได้ดังนี้
1. เริ่มรับค่าจากที่ส่งเข้ามา ผ่านคำสั่ง form (ที่ submit เข้ามานั่นหละ)
2. พิมพ์หัวตาราง ให้อ่านรู้เรื่องว่า form นี้คืออะไร
3. ตรวจสอบว่ามีสินค้าในตะกร้าหรือไม่
4. พิมพ์ของในตะกร้า พร้อมคำนวณ บนจอภาพให้ลูกค้าดู
5. พิมพ์รายการสินค้าทั้งหมด ให้ลูกค้าเลือก ทางจอภาพ
6. นำสินค้าที่เคยเลือก เตรียมส่งไปพร้อมข้อมูลใหม่ แต่ไม่แสดงให้เห็น
มีขั้นตอนการทำงานเท่านี้เอง .. ต้องใช้สมาธินิดหน่อยสำหรับผู้ไม่คุ้นเคยครับ
ผมเองยังใช้เวลาตั้งหลายชั่วโมง แก้ bug เล็ก ๆ น้อย ๆ .. ผมเสร็จแล้ว คราวนี้ก็ท่านหละ
#!/usr/local/bin/perl
$b = $ENV{DOCUMENT_ROOT};
print"Content-type:text/html\n\n";
# $filename = join '',$b,"/perl/plbsktd.dat";
$filename = "plbsktd.dat";
# เริ่มรับค่าจากที่ส่งเข้ามา
$cntrec = 0;
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
$buffer =~ tr/+/ /;
$buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$buffer =~ s/~!/~!/g;
@choosepro = split(/&/, $buffer);
$cntrec = @choosepro;
}
# พิมพ์หัวตาราง
print '<font face="microsoft sans serif" size=0>';
print '<center>โปรแกรมชุดนี้ใช้รับคำสั่งซื้อจากลูกค้า ';
print 'โดยใช้ตะกร้าจับจ่ายของ อย่างง่าย<br>';
print '<b>ท่านทดลองได้ แต่ให้ระบุ E-mail ท่านจะได้เห็นผลเอง<br>';
print 'เมื่อกด Confirm โปรแกรมจะส่งคำสั่งซื้อไปให้ท่านทาง E-Mail</b><br>';
print 'โปรแกรมนี้เขียน ง่าย ๆ เป็นแนวทางนิดหน่อย ถ้าจะให้ Perfect ';
print 'ท่านต้องถลกขากางเกง และลงไปคลุกกับมันแล้วหละ</center><hr>';
print '<b>รายการสินค้าในตะกร้า ที่ลูกค้าเลือกไว้แล้ว</b><br>';
# ตรวจสอบในตะกร้า
$startchk = 0;
if ($choosepro[1] eq "amount=0") { $startchk = 2;}
if (substr($choosepro[0],0,7) eq "amount=") { $startchk = 1 ;}
if (@choosepro eq "0" or $startchk >= @choosepro) {
print "<font color=#ff0000>ตะกร้าว่างอยู่ รอท่านหยิบสินค้า และระบุจำนวน</font>";
}
# พิมพ์ของในตะกร้า พร้อมคำนวณ
$total = 0;
foreach $i ($startchk .. $cntrec - 1) {
print '<form method=post action="http://www.thaiall.com/cgi/sndform.pl">';
@rec = split /=/,$choosepro[$i];
@recn = split /=/,$choosepro[$i+1];
$keep = $rec[1];
if (length($recn[1]) < 15 and length($recn[1]) > 0) {
$keep = join ":",$rec[1],$recn[1];
}
if (length($choosepro[$i]) > 15) {
push(@youbuy,$keep);
print " - ",$keep;
@calrec = split /:/,$keep;
print '<input type=hidden name=',$calrec[0];
print ' value="',$keep,'">';
$tot = $calrec[2] * $calrec[3];
$total = $total + $tot;
print " = <font color=#ff0000>",$tot,"</font><br>";
}
}
if ($total > 0) {
print "<center>รวมเงิน<b> ",$total,"</b> บาท</center><hr>";
print '<input type=hidden name=total value=',$total,'>';
print "E-Mail ของผู้ขาย (ปกติ hidden เป็น email ของท่าน) : ";
print '<input type=text name=recipient size=30 ';
print 'value="Seller@yourdomain.com"><br>';
print "E-Mail ของผู้ซื้อ เพื่อให้ผู้ขายติดต่อกลับ : ";
print '<input type=text name=buyer size=30 ';
print 'value="Buyer@yourdomain.com">';
print '<input type=submit value="ส่งรายการไปให้ผู้ขาย เมื่อพอใจสินค้าในตะกร้าแล้ว(Confirm)">';
print '</form>';
print '<form method=post action="plbskt1.pl">';
print '<input type=submit value="เอาใหม่ ยกเลิกการเลือกทั้งหมด (Reset)">';
print '</form>';
}
# พิมพ์รายการสินค้าทั้งหมด ให้เลือก
print '<hr><b>รายการสินค้า ที่มีให้ลูกค้าเลือกหยิบลงตะกร้า</b><br>';
print '<form method=post action="plbskt1.pl">';
open(myfile,"$filename");
@getrec = <myfile>;
close(myfile);
foreach $line_rec (@getrec) {
@rec = split /:/,$line_rec;
@recok = split /\n/,$line_rec;
$found = 0;
foreach $ybuy (@youbuy) {
@yrec = split /:/,$ybuy;
if ($yrec[0] eq $rec[0]) {
$found = 1;
print "<font color=#0000ff>";
}
}
if ($found eq 0) {
print '<input type=radio name=',$rec[0];
print ' value="',$recok[0],'">';
}
print '<b>รหัสสินค้า</b> : [ ',$rec[0],' ] ';
print "<b>ราคา</b> : ",$rec[2]," บาท ";
print '<b>รายละเอียด</b> : ',$rec[1],"<br>";
if ($found eq 1) { print "</font>"; }
}
print '<b>จำนวนที่ต้องการซื้อ</b> :<input type=text name=amount value=1><br>';
# นำสินค้าที่เคยเลือก เตรียมส่งไปพร้อมข้อมูลใหม่ แต่ไม่แสดงให้เห็น
for $i (0 .. @youbuy - 1) {
@rec = split /:/,$youbuy[$i];
print '<input type=hidden name=',$rec[0],' value="',$youbuy[$i],'">';
}
print '<input type=submit value="เมื่อเลือกสินค้า และระบุจำนวน (Click here)">';
print '</form>';
print '<form method=post action="plbskt1.pl">';
print '<input type=submit value="เอาใหม่ ยกเลิกการเลือกทั้งหมด (Reset)">';
print '</form><hr>';
Click เข้าสู่หน้าจอขาย เพื่อทดสอบดูความสามารถของโปรแกรม
|