⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 order.cgi

📁 支持全流程的Perl+MySQL电子商务系统。完全公开代码。
💻 CGI
📖 第 1 页 / 共 2 页
字号:
#!/usr/bin/perl
#
#
##########################################################
#					网络小厨房 商店系统
#					Net Kitchen SHOP
##########################################################
#首页代码
##########################################################

####################################################################################
#前端预处理
####################################################################################
use FindBin qw($Bin);
use lib "$Bin/library";
use iLcatlib;
use strict;
use vars qw(%FORM %CON %COOKIE $LIB $sth $row @userdata);

#获得系统参数
tie %CON, 'IniFiles', ( -file => "$Bin/nkshop.ini" );

#构造新对象
$LIB=iLcatlib->new(ttmlpath=>"$CON{path}{ttmlpath}");

#获得COOKIE
%COOKIE=$LIB->ReadCookie();

#获得提交内容
%FORM=$LIB->ReadParse();

#连接数据库
$LIB->MySQL_Connect(
	database=>"$CON{database}{database}",
	dbhost=>"$CON{database}{dbhost}",
	dbuser=>"$CON{database}{dbuser}",
	dbpwd=>"$CON{database}{dbpwd}"
);

#用户检测
@userdata=$LIB->key_proc("$COOKIE{'key'}","$CON{parameter}{timeout}");

#if ($COOKIE{'test_var'} ne '1') {$LIB->Error("无法正确处理购物车系统,请修改降低您浏览器的安全级别");}

if ($FORM{'act'} eq "buy") {&buy;}
elsif ($FORM{'act'} eq "adjust") {&adjust;}
elsif ($FORM{'act'} eq "do_adjust") {&do_adjust;}
elsif ($FORM{'act'} eq "send_order") {&send_order;}
elsif ($FORM{'act'} eq "check_send_order") {&check_send_order;}
elsif ($FORM{'act'} eq "do_send_order") {&do_send_order;}
else {$LIB->Error("Null Request");}

############################################################################################
#将商品存在用户COOKIE当中
############################################################################################
sub buy
{
my ($user_order,$user_count,$user_spec,$save_cookie);

#########
#先读出商品的资料
#取得商品
$sth=$LIB->MySQL_Query("select num,statmsg from store where num = '$FORM{'num'}'");
$row = $sth->fetchrow_arrayref();
if ($row->[0] eq "") {$LIB->Error("没有这个商品存在");}
if ($row->[1] eq 1) {$LIB->Error("无货不能订购,如果您有需要请与本站联系");}

#########
#再读出COOKIE里已经有的商品
#if ($COOKIE{'test_var'} eq '1') {
	$user_order=$COOKIE{'order'};
	$user_count=$COOKIE{'count'};
	$user_spec=$COOKIE{'spec'};
	#$save_cookie = &iLcatlib::cookie(-name=>'order',
	#				 -value=>"$user_order");
	print ("Set-Cookie: order=$user_order$row->[0]║; path=/\n");
	print ("Set-Cookie: count=$user_count","1║; path=/\n");
	print ("Set-Cookie: spec=$user_spec","NULL║; path=/\n");

	$LIB->Location("$CON{path}{cgiurl}/nkshop.cgi");
#}
#else {
#	$user_order="$FORM{'order'}$row->[0]║";
#	$user_count="$FORM{'count'}1║";
#	$user_spec="$FORM{'spec'}NULL║";

#	$LIB->Location("$CON{path}{cgiurl}/nkshop.cgi?order=$user_order&count=$user_count&user_spec=$user_spec");
#}

#MySQL Disconnect And The END
$LIB->MySQL_Disconnect();$LIB->exit();
}


############################################################################################
#						订购的商品调整
############################################################################################
sub adjust
{
my ($text,$ordered,@user_order,@user_count,@user_spec,%dbs);

#if ($COOKIE{'order'} eq "") {$LIB->Error("您未做任何订购");}

###读出订购商品
@user_order=$LIB->Shopping("$COOKIE{'order'}");
@user_count=$LIB->Shopping("$COOKIE{'count'}");
@user_spec=$LIB->Shopping("$COOKIE{'spec'}");

###########调整
my $dm_pro_list=0;
my $i=0;
my $all_price=0;
for ($i=0;$i<=$#user_order ;$i++) {

my (@spec_desc,@spec,$fspec,$spec_price);

	if ($user_order[$i] =~ /[0-9]/) {
		if ($user_spec[$i] eq 'NULL') {$user_spec[$i]="";}

		$sth=$LIB->MySQL_Query("select num,name,price,spec_desc,spec from store where num = '$user_order[$i]'");
		$row = $sth->fetchrow_arrayref();

		if ($row->[3] ne "") {#在当产品有类型的情况下
			
			@spec_desc=$LIB->Str_spec($row->[3]);
			@spec=$LIB->Str_spec($row->[4]);


			for(my $fsc=0;$fsc<=$#spec;$fsc++) {

				#计算当前类型是否加价
				$spec_price=$spec[$fsc] if ($spec_desc[$fsc] eq $user_spec[$i]);

				#记录类型选择数据
				$fspec .=qq~<option value="$spec_desc[$fsc]">$spec_desc[$fsc]</option>~;
			}
		}

		#总加价
		$spec_price=$spec_price*$user_count[$i];

		#计算总价
		$all_price=$spec_price+$all_price+$user_count[$i]*$row->[2];

		if ($row->[0] ne "") {
			$dbs{'pro_list'}{"$dm_pro_list"}={
				num		=>	$row->[0],
				name	=>	$row->[1],
				price	=>	$row->[2],
				spec_current	=>	$user_spec[$i],
				spec_price		=>	$spec_price,
				spec	=>	$fspec,
				count	=>	$i,
				order_count => $user_count[$i],
			};
			$dm_pro_list++;
		}

	}
}

$text = {
		cgiurl	=>	$CON{path}{cgiurl},
		imgurl	=>	$CON{path}{webimg},
		loop_pro_list => $dm_pro_list-1,
		all_price	=>	$all_price,
		};

print $LIB->Parse("shop_adjust.htm",$text,%dbs);
#MySQL Disconnect And The END
$LIB->MySQL_Disconnect();$LIB->exit();
}


sub do_adjust
{
my ($text,@user_order,@user_count,@user_spec,%dbs);

if ($COOKIE{'order'} eq "") {	$LIB->Location("$CON{path}{cgiurl}/nkshop.cgi");}

###读出订购商品
@user_order=$LIB->Shopping("$COOKIE{'order'}");
@user_count=$LIB->Shopping("$COOKIE{'count'}");
@user_spec=$LIB->Shopping("$COOKIE{'spec'}");

#########
#重新编码
my ($i,$new_order,$new_count,$new_spec);

for ($i=0;$i<=$#user_order ;$i++) {

	if ($FORM{"rm$i"} eq "0") {#删除一条
	}
	elsif ($user_count[$i] eq "0") {
	}
	else {#重新编码
		$new_order.=qq~$user_order[$i]║~;

		if ($FORM{"order_count$i"} ne $user_count[$i]) {
			$new_count.=qq~$FORM{"order_count$i"}║~;
		}
		else {
			$new_count.=qq~$user_count[$i]║~;
		}

		if ($FORM{"new_spec$i"} ne 'NULL') {
			$new_spec.=qq~$FORM{"new_spec$i"}║~;
		}
		else {
			$new_spec.=qq~$user_spec[$i]║~;
		}

	}
}

print ("Set-Cookie: order=$new_order; path=/\n");
print ("Set-Cookie: count=$new_count; path=/\n");
print ("Set-Cookie: spec=$new_spec; path=/\n");

if ($FORM{'type'} eq "0") {
	$LIB->Location("$CON{path}{cgiurl}/nkshop.cgi");
}
elsif ($FORM{'type'} eq "2") {
	$LIB->Location("$CON{path}{cgiurl}/order.cgi?act=send_order");
}
else {
	$LIB->Location("$CON{path}{cgiurl}/order.cgi?act=adjust");
}


#MySQL Disconnect And The END
$LIB->MySQL_Disconnect();$LIB->exit();
}


sub send_order
{
my (%dbs,$text,$all_order_count);
my (@user_order,@user_count,@user_spec);
if ($COOKIE{'order'} eq "") {	$LIB->Error("在没有订购商品的情况下是无法发送定单");}


###读出订购商品
@user_order=$LIB->Shopping("$COOKIE{'order'}");
@user_count=$LIB->Shopping("$COOKIE{'count'}");
@user_spec=$LIB->Shopping("$COOKIE{'spec'}");

###########调整
my $dm_pro_list=0;
my $i=0;
my $all_price=0;
for ($i=0;$i<=$#user_order ;$i++) {

my (@spec_desc,@spec,$spec_price,$pro_value);

	if ($user_order[$i] =~ /[0-9]/) {
		if ($user_spec[$i] eq 'NULL') {$user_spec[$i]="";}

		$sth=$LIB->MySQL_Query("select num,name,price,spec_desc,spec,pid from store where num = '$user_order[$i]'");
		$row = $sth->fetchrow_arrayref();

		if ($row->[3] ne "") {#在当产品有类型的情况下
			
			@spec_desc=$LIB->Str_spec($row->[3]);
			@spec=$LIB->Str_spec($row->[4]);


			for(my $fsc=0;$fsc<=$#spec;$fsc++) {

				#计算当前类型是否加价
				$spec_price=$spec[$fsc] if ($spec_desc[$fsc] eq $user_spec[$i]);
			}
		}

		#总加价(型号加价*附加费)
		$spec_price=$spec_price*$user_count[$i];

		#单总价(单种订购量*单价格)
		$pro_value=$user_count[$i]*$row->[2]+$spec_price;

		#计算总价(当前单种价+总价)
		$all_price=$all_price+$pro_value;
		
		#总数量(当前数量+单种数量)
		$all_order_count=$all_order_count+$user_count[$i];

		if ($row->[0] ne "") {
			$dbs{'pro_list'}{"$dm_pro_list"}={
				num		=>	$row->[0],
				name	=>	$row->[1],
				price	=>	$row->[2],
				pro_value	=>	$pro_value,
				spec_current	=>	$user_spec[$i],
				spec_price	=>	$spec_price,
				order_count => $user_count[$i],
				pid		=>	$row->[5],
			};
			$dm_pro_list++;
		}

	}
}

#计算邮费
my (%ems,%pack);
%ems=&_count_postage('0',$all_order_count);
%pack=&_count_postage('1',$all_order_count);

$text = {
	loop_pro_list => $dm_pro_list-1,
	all_price	=>	$all_price,
	ems		=>	$ems{'value'},
	pack	=>	$pack{'value'},
	sendpack_num	=>	$CON{parameter}{rec_num_type1},
	sendpack_value	=>	$CON{parameter}{rec_value_type1},
	sendpack_addup	=>	$CON{parameter}{rec_addup_type1},
	sendems_num	=>	$CON{parameter}{rec_num_type0},
	sendems_value	=>	$CON{parameter}{rec_value_type0},
	sendems_addup	=>	$CON{parameter}{rec_addup_type0},
	imgurl	=>	$CON{path}{webimg},
	cgiurl	=>	$CON{path}{cgiurl},
};

print $LIB->Parse("shop_order_form.htm",$text,%dbs);
#MySQL Disconnect And The END
$LIB->MySQL_Disconnect();$LIB->exit();
}

sub check_send_order
{
my (@view,%dbs);
my ($text,$user_row);

if ($FORM{'uid'} eq "") {$LIB->Error("请填写用户名");}
elsif ($FORM{'rec_type'} ne '1' and $FORM{'rec_type'} ne '0') {$LIB->Error('收货方式错误');}
elsif ($FORM{'change_info'} eq 'yes') {
	if ($FORM{'rec_name'} eq "") {$LIB->Error('没有收货人');}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -